피드로 돌아가기
Dev.toBackend
원문 읽기
Mock의 거짓말을 멈추고 Testcontainers로 확보하는 데이터 계층 신뢰성
Notes on Testing: Why I Prefer Testcontainers Over Mocks
AI 요약
Context
Mock 기반 테스트는 개발자의 가설을 검증할 뿐 실제 DB 동작을 반영하지 못함. SQL 문법 오류나 제약 조건 위반을 감지하지 못해 운영 환경에서 런타임 오류 발생. 테스트 통과와 실제 동작 사이의 괴리로 인한 낮은 신뢰도 문제.
Technical Solution
- Mocking 방식에서 Testcontainers 기반의 실제 Docker 컨테이너 구동 방식으로 전환
- Postgres 16-alpine 이미지를 사용하여 실제 데이터베이스 엔진의 제약 조건과 JSONB 처리 방식 검증
- 테스트 스위트 시작 시 컨테이너 인스턴스를 한 번만 생성하여 실행 시간 최적화
- 개별 테스트 케이스마다 독립적인 데이터베이스나 스키마 마이그레이션을 적용하는 격리 전략 채택
- Docker-in-Docker(DinD) 설정 및 /var/run/docker.sock 마운트를 통한 CI 파이프라인 환경 구축
- wait.ForLog 전략을 통해 데이터베이스 준비 완료 상태를 확인한 후 테스트를 시작하는 동기화 설계
Impact
- 컨테이너 구동에 약 10초 소요
- 전체 테스트 스위트 실행 시간 약 2분 소요
Key Takeaway
테스트 속도보다 더 중요한 가치는 실제 환경과 동일한 제약 조건에서의 검증을 통한 코드 신뢰성 확보임.
실천 포인트
데이터 계층 테스트 시 Mocking 대신 Testcontainers를 도입하고, CI 환경의 디스크 공간 및 권한 설정을 우선 점검할 것