TIL(Today I Learned)

TIL - Redis Key값에 특수 문자(이상한 문자)가 같이 들어가는 경우

Happy._. 2024. 5. 31. 22:18

Spring Boot에서 Redis를 이용해 이메일 인증을 구현하던 중 key 값에 이상한 문자가 같이 들어가는 문제가 발생했다.

이메일 주소를 key 값으로 인증 번호를 value로 담아서 Redis에 저장했는데 저장된 값을 확인해 보니 메일주소 앞에 이상한 기호들이 포함되어 있었다.

DB에 직접 데이터를 입력했을 때는 특수 기호 없이 정상적으로 들어가는 것을 확인했다.

 

key 값에 특수 기호가 있어도 호출 할 수 있을까 시도해봤는데 value 값이 null이었다.

"(큰 따옴표)를 제거하면 ERR wrong number of arguments for 'get' command 에러 메시지가 출력된다.

-- value : <null>
GET "�� t kkk@kkk.com"

-- ERR wrong number of arguments for 'get' command
�� t kkk@kkk.com

 

해결방법은 구글링으로 찾았는데 다음과 같이 keySerializer를 StringRedisSerializer로 설정을 해주어야 이상한 기호 없이 정상적으로 데이터가 DB에 입력된다.

@Bean
fun redisTemplate(): RedisTemplate<String, String> {
    val redisTemplate = RedisTemplate<String, String>()
    redisTemplate.connectionFactory = redisConnectionFactory()
    redisTemplate.keySerializer = StringRedisSerializer()
    return redisTemplate
}

 

JdkSerializationRedisSerializer : keySerializer의 기본값

StringRedisSerializer : 설정한 문자열만 저장(위와 같이 설정하지 않은 문자열이 포함되는 것을 방지)

Jackson2JsonRedisSerializer, GenericJackson2JsonRedisSerializer : Json 형식으로 저장 

  • 저장 형식은 키, 값, 해시에 사용할 수 있다.

 

참고자료