최근 개발하고 있는 사이드 프로젝트에서는 Login Token 관리를 위해 redis를 사용 중이다.
회사에서 하는 프로젝트에서도 전에 redis에 login 안걸고 있다가 데이터 홀랑 날려먹은 적이 있었다.
그때는 아마 악질 크롤링 그런거였던 것 같은데 redis 기본 포트가 6379니까 그냥 드롭시켜버리는 덕분에 비밀번호의 소중함을 알게 됐는지 어쨌는지.
아무튼, 그 덕에 redis라면 꼭 비밀번호를 설정한다는 마음으로 살고 있는데, 최근 작업 중이던 사이드에서도 redis 설정을 좀 잡아주려고 비밀번호를 설정하고, application.yml에도 잘 반영해줬다.
근데 우리집 REDIS가 무너진거에요
이상하게도 password 설정을 해주자 마자부터 서비스가 redis를 못잡기 시작했던 것임 몬가 몬가임
아니 회사에서 작업했을 때는 그냥 알잘딱하게 돌던데? yml에만 넣어주면 돌던데? 너 뭔데? 대체 왜그러는데?
하는 수많은 의문을 남기고 열심히 redis를 찾아보았다.
열심히 뒤져본 결과 차이를 발견할 수 있었는데,
기존에 작업했던 애는 StringRedisTemplate을 사용하고 있었고,
private final JwtTokenProvider jwtTokenProvider;
private final StringRedisTemplate redisTemplate;
@Override
public void configure(HttpSecurity http) throws Exception {
JwtAuthenticationFilter customFilter = new JwtAuthenticationFilter(jwtTokenProvider,redisTemplate);
http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class);
}
새로 작업하던 애는 lettuceConnectionFactory를 사용하고 있
었던 것! 두둥
private final RedisProperties redisProperties;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort());
}
곰곰히 읽다 보니까, 이전에는 개별적으로 설정을 주입해준 적이 없는 것 같은데, lettuceConnectionFactory를 선언하면서 redisproperties에서 정보를 가져다가 넣길래 얘다 싶었다. 아니 패스워드를 안넣잖아 그냥 싸가지업게 아주
그래서 아무튼 모시깽하게 이유를 파악한 후 redis 설정을 지금은 아예 통 크게 뜯어고쳤는데 나 말고 동료가
요새는 권장하지 않는 것 같던데, 아무튼 찾아온 사람이 있다면 패스워드를 설정하는 방법은 이렇다.
public RedisConnectionFactory redisConnectionFactory() {
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory();
lettuceConnectionFactory.setHostName(redisProperties.getHost());
lettuceConnectionFactory.setPort(redisProperties.getPort());
lettuceConnectionFactory.setPassword(redisProperties.getPassword());
return lettuceConnectionFactory;
}
짜잔 참 쉽죠? 그냥 만들고! 그냥 넣어!
아무튼 똑똑하신 양반들께서 요새는 이렇게 따로 세터 안쓰는 데는 이유가 있겠지... 나야 뭐 그런 거 까지는 잘 모르구...
그냥 주는거 잘 쓰면 되는거 아니겠냐구
지금은 RedisStandaloneConfiguration으로 잘 쓰고 있다.
근데 여기다가 그냥 세터 갈겨서 뭔 차이인 지는 잘 모르겠음
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(redisProperties.getHost());
redisStandaloneConfiguration.setPort(redisProperties.getPort());
redisStandaloneConfiguration.setPassword(redisProperties.getPassword());
return new LettuceConnectionFactory(redisStandaloneConfiguration);
}
그냥 좋아진 셈 치자 config 만들어서 넣으니까.
끗!