특화 프로젝트를 진행하면서 로그인에 Redis를 적용하였다. 당시에는 Redis를 혼자 사용해서 큰 문제가 없었다. 하지만 자율 프로젝트로 넘어오면서 Redis를 3곳에서 사용하게 됐다. login, 채팅 내용, 실시간 좌표를 저장해야 했다. 나아가 Redis config에서 template setValueSerializer를 기능마다 다르게 설정해주어야 했다.
Key값을 다르게 설정해주기
아래와 같은 방법으로 RedisTemplate 다르게 설정해주기
// 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값을 다르게 설정해주어야 했다.
우리가 선택한 방법은 확실한 Key값이 되는 경우를 제외하고 1번의 방법으로 진행했다. 각 요청이 다르기 때문에 prefix를 붙여도 큰 지장이 없었기 때문이다.
기능마다 Serializer를 다르게 설정해주어야 했다.
같은 직렬화를 사용해서 하나의 RedisTemplate를 사용하는 방법
Bean name을 다르게 등록해서 RedisTemplate를 원하는 조건에 맞게 설정하는 방법
String과 Dto 등 data type이 다른 상황에서 Redis Template를 어떻게 설정해주어야 할지 고민하였고 Bean name을 기능에 맞게 등록하여 config 설정을 해주었다.
Redis를 혼자 사용했을 때는 config 설정을 깊게 생각하지 않고 사용했었는데 다양한 경우를 생각해보고 적용해봄으로써 Redis에 대해 조금이라도 더 찾아보는 경험을 할 수 있었다.
참고
redis-docs