TestContainers로 유저시나리오와 비슷한 통합테스트 만들어 보기
핵심 내용
컬리가 TestContainers를 활용해 실제 환경과 유사한 통합 테스트를 자동화해 배포 안정성을 높였다.
자세히 보기
컬리 딜리버리프로덕트팀이 TestContainers를 도입해 실제 QA 환경과 유사한 통합 테스트를 자동화했다. 기존에는 서버별 단위 테스트와 Mock 기반 통합 테스트로 인해 서버 간 제약조건 불일치로 발생하는 버그를 사전에 발견하기 어려웠다.
기존 테스트 방식의 한계와 해결책
기존 방식은 각 서버의 관심사에 맞춰 외부 의존성을 Mock 처리하여 테스트를 수행했다. 하지만 배송관리 서버의 조회 조건 변경이 이벤트 수집 서버의 데이터 생성 로직과 맞지 않을 경우, 개별 테스트는 통과하더라도 실제 QA 단계에서 주문 노출 버그가 발생할 수 있었다. 이를 해결하기 위해 Kafka, PostgreSQL, Spring Application 등 실제 인프라를 Docker 컨테이너로 띄워 서버 간 연동 흐름을 검증하는 통합 테스트 구조를 제안했다.
TestContainers 기반 통합 테스트 구성
테스트 환경은 KafkaContainer, PostgisContainer, ApiContainer, ConsumerContainer 등 4개의 컨테이너로 구성된다. **Network.newNetwork()**를 통해 컨테이너 간 통신을 설정하고, withNetworkAliases로 서비스 이름을 지정해 내부 연결을 수행한다. Spring Application은 배포용 Container Registry에서 이미지를 불러오며, withImagePullPolicy를 적용해 테스트 실행 시마다 최신 이미지를 사용하도록 설정했다.
인증 우회 및 CI/CD 연동
실제 인증 서버 구동의 복잡성을 줄이기 위해 Local 프로필 환경에서 magic-token을 사용하는 인증 우회 방식을 적용했다. 테스트 코드는 Kafka에 주문 이벤트를 발행하고, API를 호출해 데이터가 정상적으로 조회되는지 검증한다. 이 테스트는 GitHub Actions의 workflow_run 트리거를 통해 배포 완료 시 자동으로 실행되며, QA 인력은 비정상 케이스 테스트에 집중할 수 있도록 지원한다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.