전체 목록
테스트Easy#241

단위 테스트, 통합 테스트, E2E 테스트의 차이를 설명해주세요.

#테스트#UnitTest#IntegrationTest#E2E

답변 포인트

검증 범위와 실행 비용를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

단위 테스트는 작은 로직, 통합 테스트는 모듈 간 상호작용, E2E 테스트는 사용자 흐름 전체를 검증합니다. 범위가 넓을수록 느리고 원인 분석이 어려울 수 있습니다.

단위 테스트, 통합 테스트, E2E 테스트는 검증 범위가 다릅니다. 범위가 넓을수록 실제 사용자 환경에 가까워지지만 느리고 불안정해지기 쉽습니다.

단위 테스트

함수, 클래스, 작은 모듈을 독립적으로 검증합니다.

TypeScript
expect(calculateDiscount(10000, 'VIP')).toBe(8000);

빠르고 실패 원인을 찾기 쉽지만, DB나 네트워크 연동 문제는 잡지 못합니다.

통합 테스트

여러 모듈이 함께 동작하는지 확인합니다. 예를 들어 Service와 Repository, 실제 DB container를 연결해 테스트합니다.

TypeScript
await request(app).post('/orders').send({ itemId: 1 });
expect(await db.order.count()).toBe(1);

설정, 트랜잭션, 직렬화, SQL 문제를 잡는 데 좋습니다.

E2E 테스트

브라우저나 실제 클라이언트 관점에서 전체 흐름을 검증합니다.

TypeScript
await page.goto('/login');
await page.fill('input[name=email]', 'user@example.com');
await page.click('text=로그인');
await expect(page).toHaveURL('/dashboard');

사용자 경험에 가장 가깝지만 느리고 flaky해질 수 있습니다.

면접 답변 포인트

단위는 빠른 로직 검증, 통합은 경계와 연동 검증, E2E는 실제 사용자 흐름 검증입니다. 세 종류를 목적에 맞게 조합해야 하며 모든 것을 E2E로 해결하려 하면 유지보수 비용이 커집니다.

관련 질문

같은 카테고리/태그 기준