🛹 목표
목표 | 난이도 | 달성 여부 |
패스트 캠퍼스 강의 듣기 |
中 | ✔️ |
알고리즘 문제풀이 | 中 | ✔️ |
📋 공부 내용 & 기록
스프링의 TestContainers
1. TestContainers란
- 테스트를 위해 Java 언어만으로 docker container를 실행시켜주는 자바 라이브러리
- 도커를 이용하여 테스트할 때 컨테이너를 직접 관리해야 하는 번거로움을 해결해주며, 운영환경과 유사한 스펙으로 테스트 가능
- 테스트 코드가 실행될 때 자동으로 도커 컨테이너를 실행하여 테스트하고, 테스트가 끝나면 자동으로 종료 및 정리
- TestContainers는 다양한 모듈이 존재
2. 왜 TestContainers를 사용할까?
JPA를 이용하여 CRUD 테스트 코드를 작성할 때 어떠한 환경이 좋을까?
- 운영환경과 유사한 스펙의 DB(개발환경 DB) 사용하기
- 운영환경과 유사한 스펙의 DB를 로컬에 설치함으로써 실제와 유사하게 테스트를 진행할 수 있다.
- 멱등성 관리를 위해 테스트 전과 후의 DB 상태를 완전히 똑같이 유지해야한다.
- 다른 PC에서 테스트를 진행하기 위해서는 매번 유사한 스펙의 DB를 설치해야 한다.
- 인메모리 DB(h2 database) 사용하기
- 자체 메모리를 사용하기 때문에 성능이 좋다.
- 특정 DB에 종속된 기능을 테스트할 수 없다.
- 즉, DB의 설정이 운영환경과 다르기 때문에 호환성의 문제가 있을 수 있고, 실제와 다른 동작으로 데이터가 온전하지 않을 수 있다.
- Docker 사용하기
- 도커 이미지만 있다면 언제든지 누구든 똑같은 환경으로 테스트 환경을 구축할 수 있다.
- 그러나 docker-compose 파일을 추가로 관리해아하고, 로컬 포트와의 충돌 또한 신경을 써야하기 때문에 번거롭다.
- 이는 병렬테스트에 어려움이 있다.
- 사용하려는 DB의 Embedded Library 사용하기
- 인 메모리 DB와 거의 동일한 방식으로 구현이 가능하다.
- 하지만 지원하지 않는 DB가 있을 수 있다.
- TestContainers 사용하기
- 동작원리는 Docker Compose와 같지만 Dockerfile, Docker-compose 와 같은 외부 설정파일 없이 java 언어만으로 docker containers를 활용한 테스트 환경을 설정할 수 있다.
- 사용자가 테스트를 하기 위한 Docker를 관리할 필요 없이 자동으로 컨테이너의 life cycle을 관리해준다.
- 독립적인 테스트 환경이 많아질수록 시간이 오래 걸릴 수 있다.
3. TestContainers 사용법
1. build.gradle 의존성 추가하기
사용하려는 모듈의 이름과 버전을 찾아 추가[참고]
testImplementation 'org.testcontainers:spock:1.17.1'
testImplementation 'org.testcontainers:mariadb:1.17.1'
2. 테스트를 위한 test/resources/application.yml 파일 생성
spring:
datasource:
driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver
url: jdbc:tc:mariadb:10:///
# yml 파일에 spring.datasource.url: 에 jdbc: 이후tc:를 추가하면 host와 port, database name은 무시되며, testcontainers가 제공해주는 드라이버가 자동으로 처리
3. 테스트 컨테이너를 실행하기 위해서는 도커가 실행되어 있어야 한다.
'TIL' 카테고리의 다른 글
[TIL] 🌱 2023.05.09 - spock (0) | 2023.05.09 |
---|---|
[TIL] 🌱 2023.05.03 - Feign Client (0) | 2023.05.03 |
[TIL] 🌱 2023.04.26 - Async (0) | 2023.04.26 |
[TIL] 🌱 2023.04.25 - 상속과 컴포지션 (0) | 2023.04.25 |
[TIL] 🌱 2023.04.24 - 멀티 모듈 (0) | 2023.04.24 |