[Spring Test] JPA 이용하여 CRUD 테스트 코드를 작성할 때 어떤 DB환경이 좋을까?

zhzkzhffk·2022년 12월 3일
0

스프링 테스트

목록 보기
3/5
post-thumbnail

테스트 환경에서 DB 선택은 다음과 같다.

JPA 이용하여 CRUD 테스트 코드를 작성할 때 어떤 DB환경이 좋을까?


1. 운영환경과 유사한 스펙의 DB(개발 환경 DB) 사용하기

  • 운영 환경과 유사한 테스트를 할 수 있다는 장점이 존재한다.

  • 테스트 코드의 신뢰성이 깨질 수 있다. 즉, 실행하면 같은 결과값이 안 나오는 경우가 있다.

    • 공용으로 같은 DB를 다른 개발자와 같이 바라보고 있으면, A 개발자는 DB 조회를 하고, B에서는 그 테이블을 제거하고 있을시에 다른 결과값이 나올 수 있다.

    • 따라서 독립적인 환경의 데이터베이스가 필요하다.


2. 인메모리 DB(ex. H2) 사용하기

  • 메모리에서 실행되므로 독립적인 공간에서 실행되는 것을 알 수 있다.
  • 단점으로는 운영 환경과 다른 스펙이기에, 데이터베이스에 특화된 테스트 케이스를 진행하지 못한다.(예. 격리 레벨, 전파 레벨)

3. Docker 사용하기

  • 운영 환경과 유사한 스펙의 이미지를 도커 환경에 구성한 다음 테스트를 진행한다.
  • 단점으로는 스크립트와 컨테이너 정리등 관리 포인트가 늘어난다.

4. TestContainers를 이용하기

  • 운영 환경과 유사한 DB스펙으로 독립적인 환경에서 테스트 코드를 작성하여 테스트가 가능하다.
  • Java언어만으로 docker container를 활용한 테스트 환경 구성할 수 있다.
  • 도커를 이용하여 테스트할 때 컨테이너를 직접 관리해야 하는 번거로움을 해결 해주며, 운영환경과 유사한 스펙으로 테스트가 가능하다.
  • 즉, 테스트 코드가 실행 될 때 자동으로 도커 컨테이너를 실행하여 테스트 하고, 테스트가 끝나면 자동으로 컨테이너를 종료 및 정리
  • TestContainers는 다양한 모듈이 존재한다.
  • https://www.testcontainers.org/
profile
Backend Developer

0개의 댓글