-
spring-data-redis 테스트 (local, remote 테스트)Spring 2019. 10. 28. 00:00
이 포스트에서 다룬 내용들입니다.
- Embedded Redis Server 를 사용한 테스트 / SpringBoot + spring-data-redis (lettuce) + embedded redis
- Remote Redis Server를 사용한 테스트 / SpringBoot + Redis Server (CentOS 7)
redis서버와 spring-data-redis api 사용법에 대해 학습한 내용을 정리한 것입니다.
소스는 깃헙에 있습니다.
# Embedded Redis를 활용한 로컬 테스트
로컬테스트는 이동욱님의 SpringBoot Data Redis 로컬/통합 테스트 환경 구축하기를 보고 진행했습니다.
그렇기때문에 기본적인 소스와 구조는 이동욱님의 예제와 동일하게 구성되어 있습니다.
다른점이 있다면 JUnit5를 사용하여 테스트를 진행했습니다. 기본적인 사용방법은 여기를 참고 부탁드립니다.
# Redis CentOS7 에 설치 (version 5.0.5)
기본 설치는 redisGate Korea 사이트와 Redis 공식 홈페이지를 참고해서 진행했습니다.
설치 자체는 특별한 세팅이 필요없어서 tar파일 down -> 압축해제 -> 설치 과정만 거치면 redis를 사용할 수 있습니다.
단, redis를 기동하면 로그에 경고들이 나오는데, 그런 부분에 있어 리눅스 설정 변경이 필요할 수 있습니다.
redis서버 시작 시 경고 메시지 없애는 방법
# 로컬테스트 -> remote server에 있는 redis로 변경
redis서버와 클라이언트(SpringBootTest) 에 대한 설정들이 필요합니다.
참고로, redis서버는 한 대 (standalone) 만 기동하여 테스트를 진행했습니다.
## Server
-
redis.conf 설정
redis.tar 파일 압축을 푼 디렉토리에 가보면 'redis.conf' 파일이 있습니다. 여기서 반드시 수정해야할 내용들은 'bind', 'protected-mode' 부분 입니다.
conf 디렉토리를 만들고 그 안에 'redis.conf' 을 복사해서 사용합니다. ( 저는 root 경로에 /conf/redis 라는 디렉토리를 만들어서 사용했습니다.)-
bind
bind는 클라이언트가 접속할 redis 서버의 IP를 나타냅니다. ( Client의 IP가 아님 )
그래서 가장 단순한 방법으로 bind 부분을 주석으로 비활성화 하겠습니다.
( ifconfig를 통해 redis를 설치한 서버IP를 확인하고 bind 192.10.10.3 127.0.0.1 과 같이 설정도 가능합니다. ) -
protected-mode yes -> no
yes는 말 그대로 보호모드를 의미하고, password 를 통해 인증을 해야 사용가능합니다.
no로 변경합니다.
만약 protected-mode 를 yes로 사용하고 싶다면, requirepass 부분에 비밀번호를 등록해서 사용할 수 있습니다.
-
+ daemonize 설정
background 로 실행할지를 결정하는 옵션입니다. 기본적으로 no로 되어있고, 만약 yes로 설정할 경우에는 'logfile'과 'dir' 에 대한 설정을 해서 redis 서버 기동상태를 로그파일을 통해 확인해야합니다.
-
그 외 redis.conf 설정 파일 정보는 redis gate 사이트에 자세하게 나와있으니 참고 부탁드립니다.
-
-
client가 접속할 port 방화벽 허용
centOS 7 부터는 firewall-cmd 를 통해 방화벽 관리가 가능해졌습니다.
-
redis.conf 파일에 설정된 port 등록
> firewall-cmd --zone=public --permanent --add-port=6379/tcp
> firewall-cmd --reload
permanent 옵션이 없는경우 reload 하면 등록한 port가 없어집니다. (필수)
-
-
redis server 실행 (참고 : redis서버 실행)
그럼 이제 redis 서버를 실행합니다. redis 서버 디렉토리를 보면 'src' 라는 디렉토리가 있습니다. 그 하위에 'redis-server' 라는 서버 실행파일이 있습니다. 이 파일을 실행합니다.
> ${redis-server path}/src/redis-server ${config file path}/redis.conf
서버 실행명령어를 보면 알겠지만 config 파일을 지정할 수 있습니다.
start shell과 stop shell을 아래와 같이 만들어서 사용하면 편리합니다.
- run.shell # !/bin/bash /app/redis-5.0.5/src/redis-server /conf/redis/redis.conf - stop.shell # !/bin/bash /app/redis-5.0.5/src/redis-cli -p 6379 shutdown
## Client
-
application.yml 설정
기존에 있던 'application.yml' 을 'applicaition-local.yml' 로 변경하고, remote 서버 접속을 위한 'application-dev.yml' 파일을 추가합니다.
그리고 property 파일에 redis서버 host와 port를 작성합니다.
-
SpringBootTest 실행
실행하려고 보니 application 파일이 2개인데 어떤 파일이 적용될지 모르겠습니다. 이 부분을 컨트롤할 수 있는 방법이 2가지가 있습니다.
-
TestClass에서 사용할 application properties를 선택하기
'@ActiveProfiles("local")' annotation을 등록해서 지정할 수 있습니다. -
VM argument 설정하기 '-Dspring.profiles.active=local'
이 설정을 하려면 우선 한번 실행해서 Run 목록에 Test가 보여야 한다.
인텔리제이 기준 Run > Edit Configurations 에 들어가면 VM options 라고 되어있는 부분이 있다. 이 부분을 수정합니다.
-
properties를 지정한 뒤 실행하면 아래와 같이 어떤 properties가 선택됐는지 알 수 있습니다.
-
'Spring' 카테고리의 다른 글
ChainedTransactionManager (0) 2021.03.09 REST, REST API (0) 2019.11.04