Home React | React Refactor
Post
Cancel

React | React Refactor

목차

  • 테스트
    1. 단위테스트 vs 통합테스트 vs E2E테스트를 비교하여 설명해주세요
    2. 리액트 테스트에 사용되는 도구들을 비교하여 설명해주세요
  • 최적화
    1. CDN(Content Distributed Network)에 대해 설명해주세요
    2. Web Vitals에 대해 설명해주세요
    3. Lighthouse에 대해 설명해주세요


테스트

1. 단위테스트 vs 통합테스트 vs E2E테스트를 비교하여 설명해주세요

  1. 단위테스트
    • 작은 단위를 떼어내어 분리된 환경에서 테스트
    • 복잡한 알고리즘이 제대로 동작하는지 확인
    • Mocking 필요(의존성이 있는 모듈을 제어하기 위해 사용)
    • 작성 비용 낮음 / 실행 속도 빠름
    • 작은 단위의 리팩토링에도 쉽게 깨질 수 있음
    • ex. Jest
  2. 통합테스트
    • 어플리케이션의 여러 부분들이 통합되어 제대로 상호작용되는지 테스트
    • 주로 단위테스트보다 큰 범위의 테스트
    • 앱의 모든 기능이 제대로 동작한다는 확신을 줄 수 있음
    • 단일 모듈이 복잡한 알고리즘을 갖고 있을 때 단위테스트에 비해 테스트가 번거롭고 테스트 중복이 발생할 확률이 높음
    • ex. Jest, RTL, Enzyme
  3. E2E테스트(End to End)
    • 실제 사용자가 사용하는 것과 같은 조건에서 전체 시스템을 테스트
    • API 서버, DB 등의 외부 서비스들을 모두 사용하여 통합된 시스템을 테스트
    • 작성 비용 높음 / 실행 속도 느림
    • 테스트 실행 환경의 예상치 못한 문제(네트워크 문제, 프로세스 대기로 인한 타임아웃 등)로 인해 테스트가 가끔 실패하는 일이 발생
    • ex. Cypress, Selenium
단위테스트통합테스트E2E테스트
개발자 관점개발자 관점실제 사용자 관점
작은 단위를 떼어내어 분리된 환경에서 테스트2개 이상의 모듈이 실제로 연결된 상태를 테스트실제 상활에서의 테스트
작성 비용 1 / 실행속도 3작성 비용 2 / 실행속도 2작성 비용 3 / 실행속도 1

* 느림/낮음(1) - 빠름/높음(3)

2. 리액트 테스트에 사용되는 도구들을 비교하여 설명해주세요

  1. 단위 테스트나 통합 테스트를 위한 도구

    • 테스트 러너 : 테스트를 구동할 수 있는 환경을 제공
      • 테스트 파일을 읽어들여 작성한 코드를 실행하고 그 결과를 특정한 형식으로 출력
      • Node.js 기반의 테스트 러너들은 굳이 러너의 실행 환경과 코드의 실행 환경을 구분할 필요가 없기 때문에 대부분 테스트 프레임워크와 통합된 형태로 제공
      • ex. Karma(브라우저에서 직접 코드 실행), Jest(Node.js 환경에서 코드를 실행)
    • 테스트 프레임워크 : 테스트 코드 작성을 위한 기반을 제공해주는 자바스크립트 도구
      • 프레임워크가 제공하는 함수들을 사용해서 테스트 코드를 작성하면, 프레임워크가 테스트 코드를 자동으로 실행한 후 성공 및 실패에 대한 결과를 반환
      • ex. Mocha, Jasmine, AVA, Jest
  2. E2E 테스트 도구

    • 작성이 번거롭고 실행 속도가 느리며 통제된 환경에서 테스트를 할 수 없다는 단점 때문에 개발자들이 개발 과정에 사용하기에는 어려움
    • ex. Selenium Webdriver, Cypress, TeskCafe
  3. 리액트 테스트 도구

    • Jest : JS 테스트 러너
      • DOM에 접근하게 하는 jsdom을 통해서 jsdom은 단지 어떻게 브라우저가 작동하는지에 대한 대략적 개요
      • mocking modules과 timers 같은 파워풀한 특징과 결합되어 훌륭한 반복속도를 제공
    • React Testing Library : 실행 디테일을 가지지 않는 React 컴포넌트를 테스트하게 하는 도구 모음
      • 리팩토링을 수월하게 하며 접근성에 대한 가장 좋은 테스트를 가능하게 함

최적화

1. CDN(Content Distributed Network)에 대해 설명해주세요

  • 데이터 사용량이 많은 애플리케이션의 웹 페이지 로드 속도를 높이는 상호 연결된 서버 네트워크
  • 클라이언트와 웹 사이트 서버 간에 중간 서버를 두어 효율성을 높임
  • 웹 서버에 대한 웹 트래픽을 줄이고, 대역폭 소비를 줄이며, 애플리케이션의 사용자 환경을 개선
  • 장점
    • 페이지 로드 시간 단축 : 반송률을 줄이고 사용자가 사이트에서 보내는 시간을 늘릴 수 있음
    • 대역폭 비용 절감 : 캐싱 및 기타 최적화를 통해 CDN은 오리진 서버가 제공해야 하는 데이터의 양을 줄여 웹 사이트 소유자의 호스팅 비용을 절감
    • 콘텐츠 가용성 제고 : 하나 이상의 CDN 서버가 오프라인으로 전환되면 다른 운영 서버가 해당 서버를 대체하여 서비스가 중단되지 않도록 할 수 있음
    • 웹 사이트 보안 강화 : 여러 중간 서버 간에 로드를 분산하여 오리진 서버에 미치는 영향을 줄임으로써 이러한 트래픽 급증을 처리할 수 있음
  • 작동 방식
    • 캐싱 : 더 빠른 데이터 액세스를 위해 동일한 데이터의 여러 복사본을 저장하는 프로세스
    • 동적 가속 : 애플리케이션과 클라이어언트 사이의 CDN 서버로 인해 발생하는 서버 응답시간을 단축
    • 엣지 로직 계산 : 클라이언트와 서버 간의 통신을 단순화하는 논리적 계산을 수행하도록 CDN 에지 서버를 프로그래밍할 수 있음

2. Web Vitals에 대해 설명해주세요

  • Web Vitals : 웹에서 훌륭한 사용자 경험을 제공하는 데 필수라고 생각하는 품질 지표에 대한 통합적 지침을 제시
  • Core Web Vitals : 모든 웹 경험에서 중요한 공통 집합
    • 핵심 사용자 경험 요구사항에는 로딩 경험, 상호 작용, 페이지 콘텐츠의 시각적 안정성이 포함
    • LCP(Largest Contentful Paint, 최대 콘텐츠풀 페인트): 로딩 성능을 측정
      • 페이지의 주요 콘텐츠가 로드외었을 가능성이 높은 시점에 페이지 로드 타임라인에 점을 표시
      • 페이지가 처음으로 로딩된 후 LCP가 발생 시간 <= 2.5s
    • FID(First Input Delay, 최초 입력 지연): 상호 작용을 측정
      • 사용자가 페이지와 처음 상호작용하려고 할 때 느끼는 경험을 정량화함
      • FID <= 100ms
    • CLS(Cumulative Layout Shift, 누적 레이아웃 시프트): 시각적 안정성을 측정
      • 눈에 보이는 페이지 콘텐츠의 예기치 않은 레이아웃 변화량을 정량화함
      • CLS <= 0.1 유지

3. Lighthouse에 대해 설명해주세요

  • Lighthouse : 개발자가 사이트의 사용자 경험을 개선할 수 있는 기회와 진단을 제공하는 자동화된 웹사이트 감사 도구

    Metric설명가중치
    First Contentful Paint최초 콘텐츠가 포함된 페인트
    사용자가 페이지를 탐색한 후 브라우저가 DOM콘텐츠의 첫 번째 부분을 렌더링하는 데 걸리는 시간을 측정
    10%
    Speed Index속도 지수
    콘텐츠가 시각적으로 표시되는 속도를 측정
    10%
    Largest Contentful Paint가장 큰 콘텐츠가 포함된 페인트
    가장 큰 콘텐츠를 렌더링 하는데 걸리는시간
    25%
    Time to interactive상호 작용까지의 시간
    사용자가 페이지와 완전하게 상호작용할 수 있을 때까지걸리는 시간
    10%
    Total Blocking Time총 차단 시간
    마우스 클릭, 화면 탭 또는 키보드 누름과 같은 사용자 입력에페이지가 응답하지 못하도록 차단된 총 시간
    30%
    Cumulative Layout Shift누적 레이아웃 이동
    사용자가 예상치 못한 레이아웃 이동을 경험하는 것에 대한 점수
    15%

    * 성능 점수 : 메트릭 점수의 가중치 평균
    가중치가 더 높은 메트릭이 전체 성능 점수에 더 큰 영향을 미침

  • 메트릭 점수와 성능점수는 다음 범위에 따라 색상이 지정됨

    • 0~49(빨간색): 나쁨
    • 50~89(주황색): 개선 필요
    • 90~100(녹색): 양호





출처

테스트

[10분 테크톡]도비의 프론트엔드에서의 테스트 종류
테스트
테스팅 개요


최적화

CDN이란 무엇입니까?
Web Vitals
Web Vitals 소개: 건강한 사이트를 위한 필수적인 측정항목
Lighthouse 6.0의 새로운 기능
Lighthouse 성능 점수


23.07.29 원티드 프리온보딩 챌린지 이후 내용 추가 예정

This post is licensed under CC BY 4.0 by the author.