Redis Template 동시 사용

jm·2023년 5월 15일
1

🕛 발단

특화 프로젝트를 진행하면서 로그인에 Redis를 적용하였다. 당시에는 Redis를 혼자 사용해서 큰 문제가 없었다. 하지만 자율 프로젝트로 넘어오면서 Redis를 3곳에서 사용하게 됐다. login, 채팅 내용, 실시간 좌표를 저장해야 했다. 나아가 Redis config에서 template setValueSerializer를 기능마다 다르게 설정해주어야 했다.

🕒 결론

  1. Key값을 다르게 설정해주기

  2. 아래와 같은 방법으로 RedisTemplate 다르게 설정해주기

    • Redis Bean name을 등록해서 @Qualifer로 등록하는 redisTemplate을 다르게 설정해주는 방법으로 해결하였다. 단, 원하는 Template를 사용하기 위해서는 Qualifer로 설정된 변수명과 같은 이름으로 생성해주어야 한다.
      이 때 설정된 name으로 변수명을 만들어 주어야 한다.
        // config
        @Bean(name = "redisTemplateForToken")
        public RedisTemplate<String, Object> redisTemplateForToken() {
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            redisTemplate.setValueSerializer(new StringRedisSerializer());
            redisTemplate.setConnectionFactory(redisConnectionFactory());
            return redisTemplate;
        }
        // 등록
        @Qualifier("redisTemplateForToken")
        private final RedisTemplate redisTemplateForToken;

🕕 생각해본 방법

첫번째 고민

각 기능마다 저장 되는 내용이 다르기 때문에 기능따라 key값을 다르게 설정해주어야 했다.

  1. 필요한 작업에 맞는 prefix를 id에 붙여준다.
    • 이 방법은 각 작업에 맞게 분류 해준 후 prefix를 붙여줘야 해서 한번의 작업이 더 추가 된다고 생각했다.
  2. Redis에서 제공하는 데이터베이스를 다르게 설정하는 방법
    • Redis를 처음 접한 팀원이 있었고, 한정된 시간동안 RedisTemplate 구조와 기능을 공부하기에는 힘들다고 판단하였다.

우리가 선택한 방법은 확실한 Key값이 되는 경우를 제외하고 1번의 방법으로 진행했다. 각 요청이 다르기 때문에 prefix를 붙여도 큰 지장이 없었기 때문이다.

두번째 고민

기능마다 Serializer를 다르게 설정해주어야 했다.

  1. 같은 직렬화를 사용해서 하나의 RedisTemplate를 사용하는 방법

    • Dto를 저장할 경우 역직렬화에 문제가 발생
  2. Bean name을 다르게 등록해서 RedisTemplate를 원하는 조건에 맞게 설정하는 방법

String과 Dto 등 data type이 다른 상황에서 Redis Template를 어떻게 설정해주어야 할지 고민하였고 Bean name을 기능에 맞게 등록하여 config 설정을 해주었다.

🔹마무리

Redis를 혼자 사용했을 때는 config 설정을 깊게 생각하지 않고 사용했었는데 다양한 경우를 생각해보고 적용해봄으로써 Redis에 대해 조금이라도 더 찾아보는 경험을 할 수 있었다.


참고
redis-docs

profile
ㅎㅎ

0개의 댓글

관련 채용 정보