로그인 기능을 구현하면서 재발급 토큰을 따로 관리하기 위하여 Redis를 Spring과 연동하였는데, 다음처럼 오류가 발생하였습니다.
구글링을 통하여 검색을 해보니, 로직의 문제는 아니였으며, Redis와 관련된 설정을 하는 부분에서 문제가 발생하였습니다.
@Configuration
@EnableRedisRepositories
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Bean
public RedisConnectionFactory
return new LettuceConnectionFactory(host, port);
}
@Bean
public RedisTemplate<String, String> redisTemplate() {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
일단 다음의 코드가 수정하기 전 코드입니다.
우리가 직면한 코드를 자세히 살펴보면,
"NOAUTH Authentication required."
라는 오류 메세지가 존재하는 것을 확인할 수 있습니다.
해당 오류는 Redis 서버에 비밀번호가 설정되어 있어서 발생하는 오류로, 비밀번호를 통하여 인증을 해주어야합니다.
따라서, 기존의 코드를 다음과 같이 수정하였습니다.
@Configuration
@EnableRedisRepositories
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.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.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
처음에 Redis 다운받고 이것저것 해보다가 비밀번호 설정을 해놨었는데, 이게 발목을 잡을 줄은 몰랐습니다 ㅋㅋ
그래도 잘 해결해서 다행입니다.