목적: 각 유닛 또는 독립적인 컴포넌트의 테스트를 위함. 유닛은 함수, 클래스, 모듈 또는 코드베이스 내에서 기능의 작은 단위가 될 수 있다.
스코프: 애플리케이션의 컴포넌트와 의존성의 나머지 특정 유닛을 독립적으로 테스트
의존성: 단일 테스트 당 하나의 유닛만 평가. 의존성 파악 위해 전형적으로 mock data 사용
장점: 빠르고, 효율적이고 초기 단게에서 버그 발견 가능. 작은 단위의 코드로 빠른 피드백 유지 가능.
통합 테스트
목적: 여러 개의 유닛 또는 컴포넌트가 함께 원활하게 돌아가는 것을 테스트를 위함.
스코프: 유닛 테스트보다는 크다.
의존성: 실제 컴포넌트와 그들의 실제 의존성을 가지고 테스트. 단일 유닛 테스트에서는 발견할 수 없는 이슈 발견 가능.
장점: 컴포넌트가 통합적으로 작동할 때 발생하는 에러를 발견할 수 있다. 유닛 테스트보다는 느리지만 전반적인 시스템 작동을 보장.
E2E 테스트
목적: 유저 관점에서 전체 애플리케이션 플로우를 테스트를 위함. 실제 유저 인터렉션을 따라하면서 테스트.
스코프: 유저 행동을 완성하고, 다수의 페이지, view, 유저 상호작용과 서버 상호작용까지 포함.
의존성: 실제 유저가 경험할 UI를 가지고 테스트. mock data가 아니라 실 데이터를 가지고 브라우저 또는 headless 브라우저 환경에서 시뮬레이션.
장점: 애플리케이션의 기능성의 유효성을 판단. 유닛, 통합 테스트에 비해 느리고 준비하는데 느리지만 전반적인 애플리케이션 작동에서 고수준의 이슈를 판단할 수 있다.
프론트엔드 테스트에는 위 세 가지 테스트의 조합으로 구성되어 있다.
각 테스트는 코드 퀄리티, 컴포넌트 간의 기능성, UX를 보증하는 데에 주 목적을 가지고 있다.
리액트 테스트에 사용되는 도구들을 비교하여 설명해주세요
Jest
주로 쓰이는 React 테스트 프레임워크.
테스트 toBe 작성하기 위해 강력한 라이브러리와 함께 번들 제공
React 컴포넌트의 렌더를 비교하고 UI의 예상치 못한 변경을 감지하기 위한 스냅샷 테스트 제공
자동으로 의존성을 모방하여 테스트 프로세스 단순화
React Testing Library
테스트 모범 사례를 장려하도록 설계된 경량화된 사용자 중심 테스트 라이브러리
상세 구현 보다는 컴포넌트 상호작용 테스트 기반 강조
유저 중심으로 만들어진 요소 선택 쿼리(ex. getByText, getByRole)
UI 시뮬레이션과 기대 결과 확인을 통해 통합 테스트 장려
Enzyme
React용 테스트 유틸리티 라이브러리
자식 컴포넌트가 아니라 테스트 되는 컴포넌트만 독립적으로 렌더하는, shallow rendering 지원
요소를 찾고 렌더링된 구성 요소 트리를 쉽게 탐색할 수 있는 API 제공
보다 포괄적인 통합 테스트를 위해 전체 렌더링 지원
어떤 툴을 쓰는지는 테스트 철학, 팀 선호도, 애플리케이션 별 테스트 필요도에 따라 달라진다.
많은 개발자들은 단순함과 견고함을 따져 Jest + React Testing Library 조합을 선호한다고 한다.
최적화
CDN(Content Distributed Network)에 대해 설명해주세요
웹 콘텐츠를 보다 효율적으로 제공하고 프론트엔드 최적화를 위해 전 세계에 전략적으로 위치한 서버의 분산 네트워크
작동 방식
유저가 웹 사이트에 접근했을 때, 웹 사이트가 호스트된 기존 서버가 아니라 CDN에 있는 가장 가까운 엣지 서버가 요청이 라우트된다. 엣지 서버는 유저와 지리적으로 더 가까운데, 이는 물리적인 거리를 줄여 데이터 전송에 필요한 네트워크 이동 시간도 줄일 수 있다. 엣지 서버는 이미지, CSS, JavaScript 파일과 같은 웹 사이트의 정적 asset은 물론, CDN 설정으로 동적으로 생성된 콘텐츠를 캐싱할 수 있다. 따라서 동일한 콘텐츠에 대해 이후 사용자 요청은 가까운 엣지 서버에서 제공되므로 로드 시간이 빨라지고 원본 서버 로드가 줄어든다. 또한 CDN은 데이터 압축, HTTP/2 및 TCP 최적화와 같은 기술을 사용하여 콘텐츠 전송 속도를 더욱 향상시킨다.
장점
접속 대기 시간 감소
페이지 로드 속도 향상
확장성
서버 네트워크 전체를 분산시킬 수 있으므로 트래픽이 급증하거나 로드가 많은 경우에도 웹사이트의 성능을 유지
대역폭 절약
엣지 서버에서 캐시된 콘텐츠를 제공하여 원본 서버에서 대역폭 사용의 상당 부분을 오프로드하여 서버 비용 절감
글로벌 도달 범위
전 세계에 분산된 서버를 보유하고 있기때문에 전 세계 사용자에게 콘텐츠 제공 가능
DDos 보호
일부 CDN은 DDos 보호 기능을 제공하여 악성 트래픽이 원본 서버에 도달하기 전에 흡수 가능
HTTPS 및 보안
SSL/TLS 인증서 및 보안 기능을 제공하여 안전하고 암호화된 콘텐츠 전달 보장
Web Vitals에 대해 설명해주세요
유저 참여 및 만족도에 직접적인 영향을 미치는 웹의 UX 필수적인 퍼포먼스 수치를 측정하는 기준
LCP(Largest Contentful Paint)
가장 큰 콘텐츠(주로 이미지, 비디오, 텍스트 블록)가 완전 렌더링되어 사용자에게 보이기까지 걸리는 시간
LCP 최적화 방법
효율적인 이미지 포맷을 사용하고, 크기를 줄이기 위해 이미지 압축
중요한 콘텐츠의 경우 빨리 렌더링될 수 있도록 우선순위 적용
서버 응답 시간을 최적화하고 빠른 웹 호스팅 서비스 이용
FID(First Input Delay)
첫 유저 상호작용과 브라우저의 응답 간의 시간
FID 최적화 방법
코드 최적화 및 장시간 태스크 제거를 통해 JavaScript 실행 시간을 최소화
JavaScript 재컴파일 최소화 위해 브라우저 캐시를 사용
웹 작업자(web worker)를 사용하여 메인 스레드에서 무거운 작업을 오프로드하는 것을 고려
CLS(Cumulative Layout Shift)
예기치 않은 레이아웃 변화와 같은, 로드 단계에서 웹 페이지의 시각적 안정성 측정
CLS 최적화 방법
로드하는 동안 크기가 변경되지 않도록 미디어 요소에 대한 명시적 크기 설정
레이아웃 변경을 피하기 위해 광고 및 동적으로 삽입된 콘텐츠를 위한 공간 확보
의도치 않은 레이아웃 변경 방지 위해 CSS 전환 및 애니메이션 사용 주의
그 외
TTFB(Time to First Byte): 브라우저가 서버에서 첫 바이트를 받는 데에 걸리는 시간
Speed Index: 페이지의 시각적 부분이 얼마나 빨리 렌더링되는지 계산
Page Load Time: 페이지가 전체 로드되는 시간
Page Size: HTML, CSS, JavaScript, 이미지 등과 같은 asset를 포함한 웹 페이지의 전체 크기 계산
Google Search Console과 PageSpeed Insights와 같은 툴로 계산 가능.
Web Vital을 최적화하면서 웹 사이트를 빠르고 응답성이 뛰어나며 사용자 친화적으로 만들 수 있다.
이는 검색 엔진 순위를 높이고 사용자 참여 또한 높일 수 있다.
Lighthouse에 대해 설명해주세요
웹 페이지의 퀄리티와 퍼포먼스를 평가할 수 있는 오픈 소스 툴
작동 방식
Google Chrome의 Chrome DevTools에서 브라우저 확장프로그램으로서 작동한다. Chrome DevTools > 상단 탭에서 더보기를 누르면 Lighthouse를 확인할 수 있다. 검사를 시작하면 Lighthouse가 웹 페이지를 로드하고 페이지 로드 경험을 시뮬레이션한다. 그런 다음 성능, 접근성, 모범 사례 및 SEO와 관련된 데이터 및 지표를 수집한다. Lighthouse는 검사가 끝난 후 페이지의 성능 및 사용자 경험을 개선하기 위한 자세한 정보와 제안이 포함된 보고서를 생성한다.
주요 지표
Performance: FCP, LCP, Speed Index, TTI(Time to Interactive) 등과 같은 여러 퍼포먼스 지표를 측정
Accessibility: WCAG(웹 콘텐츠 접근성 가이드라인)에 기반하여 접근성 이슈를 확인한다. 장애가 있는 사용자가 보다 포괄적이고 사용할 수 있는 페이지를 만들기 위해 권장 사항을 제공
Best Practice: 웹 페이지가 보안 HTTPS 연결 사용, 반응형 디자인 구현, 더 이상 사용하지 않는 HTML 태그 방지와 같은 모범 사례를 따르는지 확인
SEO: 적절한 메타 태그, 최적화된 페이지 제목 및 기타 SEO 관련 요소를 확인하여 페이지의 검색 엔진 최적화를 평가
활용 방안
성능 병목 현상 식별
최적화 우선 순위 지정
최적화 검증
SEO 및 접근성 향상
개발자에게 웹 사이트 성능, 접근 성 및 전반적인 사용자 경험을 향상시키기 위한 통찰과 제안을 제공할 수 있는 강력한 도구이다. 개발자는 Lighthouse를 활용하여 웹사이트를 미세 조정하고 더 나은 성능을 달성하며 사용자에게 더 나은 브라우징 경험을 제공할 수 있다.
테스트
유닛테스트 vs 통합테스트 vs E2E테스트를 비교하여 설명해주세요
유닛테스트
통합 테스트
E2E 테스트
리액트 테스트에 사용되는 도구들을 비교하여 설명해주세요
Jest
React Testing Library
Enzyme
최적화
CDN(Content Distributed Network)에 대해 설명해주세요
장점
Web Vitals에 대해 설명해주세요
FID(First Input Delay)
CLS(Cumulative Layout Shift)
그 외
Lighthouse에 대해 설명해주세요
주요 지표
활용 방안