
사이드 프로젝트 수행 중, QueryDSL로 작성한 동적 쿼리에 대해 단위 테스트 코드를 작성하게 되었다. 로컬DB를 통해 단위 테스트를 정상 통과하는 것을 확인하고, CI/CD를 통한 배포 중 오류에 부딪혔다.

운영 서버에서는 RDS에 올라간 DB로 Repositort 계층 단위테스트를 수행하는데, 내부 데이터가 달라서 테스트를 통과하지 못하는 문제였다.
💡 테스트 환경을 독립적으로 구성하는 것을 고려하게 되었다.
In-Memory DB를 이용한 테스트 환경 구축
장점
단점
빠른 속도를 기반으로 테스트를 수행하는 것보다, 정확하게, 다양한 환경에서의 테스트가 더 중요하다고 생각했다.
⚡ 그럼에도 InMemoryDB를 적용하게 된 이유
dependencies 추가

properties 파일 작성


테스트 수행
InMemory DB를 사용하기 때문에, 테스트 수행 전 더미데이터를 삽입하고, 영속성 객체를 담아둔다.

테스트 수행 결과

로컬에서는 정상적으로 수행되었다! 😆
그렇다면, 이제 대망의 CI/CD 파이프라인을 통한 배포 서버를 확인해보자..

성공적으로 테스트를 통과했다.
추가 트러블 슈팅

위 이슈는 예약된 키워드를 식별자로 사용해서 발생하는 것이라고 한다.
H2 2.X.X버전에서 ‘user’라는 키워드가 h2의 예약어로 사용되는 것이다.
spring.datasource.url을 jdbc:h2:mem:testdb;NON_KEYWORDS=USER와 같이 NON_KEYWORDS=USER를 추가해서 h2에게 예약어가 아님을 명시해준다.