[TIL] Redis Cloud 사용해보기

·2023년 3월 20일
2

NerdNest

목록 보기
2/6
post-thumbnail

📝 토이 프로젝트를 시작했다.
Redis 관리를 위해 사용한 Aws ElasticCache에서 과금이 발생했던 경험이 있기 때문에 이번 프로젝트에서는 단 한푼도 과금을 만들지 않겠다는 생각을 했다.
이런저런 서칭을 하던 도중 Redis Labs에서 제공하는 Redis Cloud를 알게 되었다.

Redis Cloud

: Redis Labs에서 제공하는 Redis Dataset를 실행하기 위한 완전 관리형 Redis 호스팅 서비스

Redis Cloud의 특징

  1. 무한 확장성 : 데이터 셋의 사이즈와는 상관없이 모든 Redis 명령어를 지원하여, Redis의 확장성 한계 극복
  2. 자동 페일오버(시스템 대체 작동) : 데이터 셋을 지속적으로 복제하여, 노드에 장애가 발생할 경우 자동 전환 매커니즘을 통해 중단없이 데이터를 처리할 수 있다.
  3. 소규모 데이터 셋에도 최고의 성능을 제공
  4. 30MB의 무료 Database 1개를 제공

Redis Cloud를 선택한 이유

Redis를 관리하기 위해 Aws의 ElasticCache를 주로 사용하는 것이 사실이다. Redis Cloud에 대한 레퍼런스도 거의 없다시피 했다.

앞으로 어떤 프로젝트를 하더라도 Redis Cloud를 사용하기 보다는 ElasticCache를 사용할 것 같았다.

물론 Aws의 과금에 대한 두려움도 있었고, Redis Cloud에 대해 알게된 김에 한번 사용해보자라는 생각이 강하게 들어서 프로젝트에 적용하게 되었다.

Redis Cloud 적용

Redis Labs

Redis Labs에 가입하면 아래 화면이 뜬다.

cloud vender와 Region를 설정하고 Let's start free를 누르면 Free Database가 생성된다.

💡 Cloud vender는 aws로 선택했지만 Region은 서울이 없으므로 도쿄로 선택했다.

생성된 Database의 Name을 누르면 host, port, password를 확인할 수 있다

프로젝트에 적용

application.yml

spring:
  redis:
    host: ${REDIS_HOST}
    port: ${REDIS_PORT}
    password: ${REDIS_PASSWORD}

Redis Cloud에서 발급 받은 host, port, password를 yml 파일에 입력한다.

RedisConfig

@Configuration
public class RedisConfig {
    @Value("${REDIS_HOST}")
    private String host;

    @Value("${REDIS_PORT}")
    private int port;

    @Value("${REDIS_PASSWORD}")
    private String password;

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName(host);
        redisStandaloneConfiguration.setPort(port);
        redisStandaloneConfiguration.setPassword(password);
        LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration);
        return lettuceConnectionFactory;
    }

    @Bean
    public RedisTemplate<String, String> redisTemplate() {
        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();

        redisTemplate.setConnectionFactory(redisConnectionFactory());
        // spring-redis간 데이터 직렬화를 위해 설정, 설정하지 않아도 동작에 문제는 없음.
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());

        return redisTemplate;
    }
}

서버에 Redis를 사용하기 위해 기본 설정을 한다.

사용 후기

Redis Labs에서는 Redis Cloud의 장점 중 하나를 빠른 속도로 말하고 있는데 실제 사용해보니 빠른가? 하는 생각이 들었다. 지난번 ElasticCache를 사용할 때는 느끼지 못했던 버벅거림이 있었다.

  1. 로그인 시, 딜레이

로그인 요청에 대한 딜레이가 발생했고, 때에 따라 Redis cloud와 연결이 끊겼다는 경고가 발생하기도 했다.

🤔 이 문제는 Cloud의 문제보다는 인터넷 문제가 있는 것 같기도

암튼 대용량 트래픽이 발생하는 프로젝트도 아니었고, 특이사항이 있지 않아서 Redis Cloud의 장점을 크게 느낄 수 없어 아쉬움이 남았다.

그래도 한번 경험해봤으니 다음 프로젝트를 진행할 때 Redis에 대한 선택지가 2개 생겼다. 둘 중에 뭐가 더 나은 선택인지는 더 경험해봐야 알겠지만...

참고
Redis를 클라우드로 사용하자
Amazon ElastiCache vs Redis Cloud

profile
🧑‍💻백엔드 개발자, 조금씩 꾸준하게

1개의 댓글

comment-user-thumbnail
2023년 7월 26일

좋은 글이네요. 잘 보고 갑니다.

답글 달기