ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Paycis's