Backend
Enterprise Go 시리즈 #7: 테스트 전략과 실전
Go 서비스에서 유닛/통합 테스트를 분리해 운영하는 실전 전략을 정리합니다.
Enterprise Go Series(7 / 9)
Enterprise Go 시리즈 #7: 테스트 전략과 실전
기본 전략
테스트는 도구보다 계층 분리가 먼저입니다.
- 유닛 테스트: 빠르고 결정적이어야 함
- 통합 테스트: 실제 인프라를 붙여 계약 검증
권장 구성
- Mock:
gomock또는 hand-written fake - 통합:
testcontainers-go - BDD 스타일 필요 시:
ginkgo + gomega
1) 유닛 테스트 원칙
- DB/네트워크 없이 메모리에서 끝낼 것
- 입력/출력 계약을 먼저 검증
- 실패 메시지는 의도 중심으로 명확하게 작성
2) 통합 테스트 원칙
- SQL/인덱스/트랜잭션 동작은 실제 DB에서 검증
- 테스트 데이터는 케이스 단위로 독립 유지
- CI에서 실행 시간을 통제하기 위해 라벨 분리
예:
- PR: unit + 핵심 integration
- main/nightly: full integration
3) 라벨 기반 실행
ginkgo -r --label-filter='!integration'
ginkgo -r --label-filter='integration'
자주 하는 실수
- 유닛 테스트에서 mock 과도 사용으로 구현 결합 증가
- 통합 테스트가 전역 상태를 공유해 순서 의존 발생
- flaky 테스트를 무시하고 재시도만 늘림
실무 체크리스트
- 신규 기능은 최소 1개 유닛 + 1개 통합 테스트
- PR 단계에서 10분 내 완료되는 테스트 세트 유지
- flaky 발생 시 즉시 격리하고 원인 제거
요약
좋은 테스트 전략은 "많이 쓰는 것"이 아니라 "빠른 피드백과 높은 신뢰도를 분리해서 확보"하는 것입니다. 유닛과 통합의 책임을 섞지 않으면 CI와 릴리즈 품질이 안정됩니다.