test-container

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 환경을 갖춰야한다.
  • 테스트 실행 시간이 늘어난다.