Redis 구현 후 local 에서 실행시키는 여러가지 방법이 있습니다. 하나씩 실험삼아 기록해두려고합니다.
첫번째는 아주 쉽고 베이직한 접근방법입니다. application.yaml 세팅없이 실행시 localRedisConfig 로 세팅할 수 있습니다.
다음은 그냥 redis 서버 포트를 yaml 에 세팅해둘 수 있는 방법입니다.
둘 중 어느 방법을 선택하던지 아래 테스트 코드를 통해 결과를 확인해볼 수 있습니다.
메인 코드는 아래를 참조해보실 수 있습니다.
org.springframework.boot.autoconfigure.data.redis 의 RedisAutoConfiguration 을 디버깅을 해보았습니다.
RedisTemplate 생성시, yaml 에 설정해놓은대로 127.0.0.1 들어갔습니다.
다음은 testContainers 를 이용하는 방법을 소개해보겠습니다. 대신 스프링 3.1.0 버전 이상이여야한다는 제한이 있습니다. 저도 로컬에서 갖고 놀던 프로젝트를 2.7 대에서 3.1.0 으로 업그레이드하였습니다.
추가로 testcontainers 를 dependencies 해야합니다.
바로 테스트 코드를 돌려보겠습니다.
테스트가 성공합니다. redis debug 레벨 로그도 확인됩니다.
이 방법은 첫 테스트 코드과 동일하지만, 다른 한 가지가 있습니다. (숨은 그림 찾기.. 위로 올려서 찾아보세요) AbstractTestcontainers 를 상속한다는 점입니다. AbstractTestcontainers 를 살펴보겠습니다.
TestContainers 는 뭘까요. 우선 TestContainers 는 다음과 같은 고민의 해답이 될 수 있습니다.
- JPA 이용하여 CRUD 테스트 코드를 작성할 때 어떤 DB 환경이 좋을까?
- 어떻게 Kafka 메시징 produce, consume 테스트를 할 수 있을까?
- redisTemplate 을 이용하여 작성한 코드를 어떻게 테스트할 수 있을까?
일반적으로 JPA CRUD 테스트시에는 운영환경과 유사한 스펙의 DB(개발 환경 DB) 사용하거나 인 메모리 DB(ex H2) 사용합니다. 독립적인 공간에서 테스트를 실행하지만, 실제 운영환경 DB 와 다릅니다. 어떤 엣지 케이스가 발생할지 테스트에서 확인할 수 없습니다. (격리레벨 or 전파레벨 등의 테스트). Docker 사용하는 방법도 있습니다. 근데 docker compose 에 대한 스크립트를 작성해야합니다.
그리고 마지막 방법으로 TestContainers 가 있습니다, 위에 나열한 도구들의 한계를 극복할 수 있는 도구가 TestContainers 입니다. 도커 컨테이너를 직접 관리하지 않고도 테스트 코드가 실행될 때 자동으로 도커 컨테이너를 실행합니다. 테스트가 끝나면 자동으로 컨테이너를 종료 하고 정리까지 합니다. 다양한 모듈 및 테스트 라이브러리를 지원하고 있습니다. S3, kafka 도 역시 가능합니다.
JDBC 테스트 경우 spring.datasource.url 을 jdbc:tc:... 로 하면 port, database name 을 testContainerDriver 가 알아서 지정을 해줍니다. port 같은 경우, 충돌되지 않을 random port 로 설정됩니다.
제가 실험해보았던 redis 의 경우, Docker image 를 TestContainer 와 연동하는 방식으로 사용해본 사례입니다. new GenericContainer() 키워드와 관련있습니다. 관심있다면 더 찾아보세요 ㅎ 참고로 키고 끌 때 시간이 오래 걸리므로 싱글톤으로 관리하는 게 좋습니다. 공식 문서에 관련 내용이 있습니다.
단적으로 redis 를 테스트하는 두 가지 방법을 소개해보았습니다. 근데 사실 testContainer 를 이용한다면 카프카든, S3 든 쉽게 테스트 해볼 수 있을 것 같습니다.
'테스트 쉽게하기' 카테고리의 다른 글
Embedded Redis vs. macOS Sonoma (0) | 2024.12.06 |
---|---|
Airflow 로컬에서 동작시켜보기 튜토리얼 1 (0) | 2024.12.04 |
Unleash 로컬에서 동작시켜보기 튜토리얼 2 (0) | 2024.12.03 |
Unleash 로컬에서 동작시켜보기 튜토리얼 1 (3) | 2024.12.03 |