본문 바로가기

프로젝트/고민

프로젝트에 테스트 컨테이너 적용하기

계기

Spring Batch 테스트나 동시성 테스트를 할 때 Mock 객체가 아닌 db연동을 하여 테스트를 해야하는 상황이 발생했다.

 

할 수 있는 선택은 다음과 같았다.

1. 실제 DB와 연동 후 데이터 삭제

2. 인메모리 DB 사용

3. 테스트용 DB 사용

4. 테스트 컨테이너 사용

 

1번을 선택할 경우 운영 중인 데이터베이스의 데이터를 삭제하게 되면, 중요한 데이터가 사라지거나 시스템의 오작동을 초래할 수 있다.

2번을 선택할 경우 인메모리 DB를 사용하면 용량 한계가 있고, 테스트 과정에서 발생한 문제점을 실제 DB에서는 발견하지 못할 가능성이 있다.

 

이러한 단점들을 고려하여 3번의 선택지를 고려하던 중 테스트 컨테이너에 대해서 알게 되었다. 테스트 컨테이너에서 제공하는 api들로 테스트 시작시 적은 비용으로 컨테이너를 실행하고 테스트 종료시 컨테이너를 종료할 수 있다는 장점이 있다.

 

적용과정

1. 먼저 다음의 의존성을 추가한다.

2. 이후 테스트용 yaml파일을 생성한다. 작성 방법은 다음의 링크에 자세히 나와있으므로 참고하자

https://www.testcontainers.org/quickstart/junit_5_quickstart/

3. 다음으로 컨테이너 설정을 해주면 끝이다.

해당 컨테이너를 재사용 하기 위해서 static으로 선언하였으며, test용 yaml 파일을 이용하기 위해 @ActiveProfiles 어노테이션을 사용했다. 자세한 사용법은 위의 링크를 참고하면 될 것이다.

 

느낀점

테스트에 대한 고민 중 테스트 컨테이너라는 것이 있어 적용해보았다. 확실히 테스트가 깔끔하다는 느낌을 받게 되었다. 이번 프로젝트를 진행하면서 처음 적용해보는 기술이 많이 있는데, 거듭된 성공으로 자신감이 붙고 앞으로도 새로운 기술을 적용하는데에 있어서 두려움 보다는 설레임이 크다는 마음이 든다.