통합 테스트
통합 테스트 (Integration Test)
여러 모듈(컴포넌트)끼리 연결되어있는 코드가 함께 잘 작동하는지를 검증하는 테스트 방식 사용자 관점에서 앱의 흐름과 UI가 의도한 대로 동작하는지 확인
API 요청 상태에 따라 로딩, 성공, 실패 등 각 상태별로 올바른 컴포넌트가 렌더링되는지
Form의 다양한 input 요소들이 의도대로 상호작용하는지 (ex: 입력, 선택, 비활성화 조건, 유효성 검사 등)
사용자의 특정 액션(ex: 버튼 클릭, form 제출 등)에 따라 이후 기대 동작(UI 변경, 알림 노출, 라우팅 등)이 제대로 수행되는지
통합 테스트는 실제 사용자와 최대한 유사한 시나리오를 다루고, 기능 간 연결성과 UX 흐름의 완성도를 중점적으로 검증함
왜 통합테스트가 중요한가?
E2E 테스트의 한계
E2E 테스트는 프론트엔드와 백엔드 등 전체 시스템을 실제처럼 실행하여 실사용자 환경(브라우저)에서 테스트
비교적 테스트 환경 구축이 복잡하고, 구현 및 유지보수에 비용이 많이 듬
테스트 환경이 네트워크, API 서버 등 다양한 외부 요인에 의존 → 기능은 잘 작동하지만 테스트는 실패하는 경우 발생
서비스 기능이 추가될수록 기존 E2E 테스트를 수정해야 하는 일이 잦아지며, 테스트 양도 함께 증가함
점점 관리와 유지보수가 어려워지고 테스트 속도도 느려짐
단위 테스트의 한계
단위 테스트는 개별 함수나 컴포넌트 단위의 로직이 정상적으로 동작하는지를 빠르게 검증할 수 있는 테스트
실제 앱은 여러 컴포넌트와 함수가 상호작용하며 동작하므로, 단위 테스트만으로 전체 기능이 잘 작동한다고 보장할 수 없음
작은 단위에 집중 → 전체 흐름(UX, 상태 전이 등)을 커버하기 어려움
사용자 관점의 흐름을 파악하기 어렵기 때문에 UI 버그나 통합 이슈를 놓칠 수 있음
통합 테스트 장점
단위 테스트보다 현실적인 흐름을 확인할 수 있고, E2E보다 비용이 적어 유지보수 효율이 높음
핵심 기능 위주로 테스트하므로 테스트 범위를 전략적으로 좁힐 수 있음
실제 UI 흐름을 따라가기 때문에 사용자 경험 중심의 문제를 잘 커버함
모킹을 통해 외부 의존성을 커버하여 독립적으로 테스트 가능
빠르고 상대적으로 신뢰성 높은 테스트를 통해 적은 비용으로도 안정성을 확보
물론 통합테스트만으로 앱이 잘 동작하는지에 대해 보장할 수 없지만, 중요한 기능 위주로 적절히 커버하면서 빠르게 피드백 받을 수 있어 기능 개발 → 리팩터링 → 배포까지의 개발 사이클을 안정적으로 유지하는 데 유용, (적당한 타협)
Last updated