1. Status
Accepted
2. Context
백엔드에서 JUnit 기반 e2e 테스트를 진행해야함
현재까지는 개발환경, 빌드 환경에서 테스트를 위해 H2 인메모리 DB 사용 중
근데 테스트 속도를 위해, 비교적 가벼운 Unit 테스트 만 진행.
좀 더 실제와 같은 테스트를 위해 e2e 테스트도 진행해야함
H2 인메모리 DB는 실제 DB와 똑같이 동작한다고 보장 불가능함
3. Decision
| 고려한 옵션 | 장점 | 단점 |
|---|---|---|
| H2 인메모리 DB | 빠르고 설정이 간단, 현재 적용 되어있음 | 실제 DB와 SQL dialect 차이 있음 (버그를 놓칠 가능성이 있음) |
| 개발자가 따로 DB를 띄워두고 테스트 | 실제 DB 사용 가능 | 개발 환경 마다 설정이 달라짐, 빌드 환경 즉 CI/CD에 적합하지 않음 |
| Testcontainers를 이용해, JUnit 테스트 [Docker Container로 DB 실행] |
테스트 시작 시 DB 컨테이너 실행 (환경 독립성 보장) CI/CD에서도 동작 실제 DB 사용 가능 |
테스트 실행 시간이 H2에 비해 훨씬 느림 Docker 환경 셋팅 필요 |
- 테스트 환경에서 Testcontainers를 활용해 Docker 기반 DB를 실행하기로 한다.
- Unit 테스트 또한 계속 유지해서, 가볍게 테스트 하기 위해 사용한다.
4. Consequences
- 실제 운영 DB와 동일한 환경에서 테스트가 가능해진다. 안정성이 증가한다.
- CI/CD 환경에 Docker 환경을 갖춰야한다.
- 테스트 실행 시간이 늘어난다.