Redis와 Spring boot를 도커 컨테이너에서 각각 실행 시켜서 yml 파일에 해당 정보를 작성하고 배포해봤는데 인증이 되질 않았다.
그래서 도커 네트워크 문제인가 아니면 패스워드를 인식을 못하나 디펜던시 문제인가 고민을 많이 해봤다.
그런데 Redis는 Password를 설정하는 방식이 따로 존재하는 듯 했다.
물론 기본으로 쓰면 알아서 가져다 주겠지만 Configure를 통해 Redis를 설정하면 방식이 달라지나보다.
@PropertySource("classpath:/env.properties")
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.password}")
private String password;
/**
* RedisConnectionFactory는 스프링 어플리케이션과 레디스를 연결하기 위해 사용된다.
* 커넥션의 종류로는 Jedis와 Lettuce가 있는데, Lettuce의 성능이 더 좋은 것으로 알려져있다.
*/
@Bean
public RedisConnectionFactory redisConnectionFactory() {
// redis 연결 정보(host, port, password)를 지정한다.
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(
host, port);
redisStandaloneConfiguration.setPassword(password);
// redis 연결 정보를 토대로 LettuceConnectionFactory 객체를 생성하여 빈으로 등록한다.
return new LettuceConnectionFactory(redisStandaloneConfiguration);
}
/**
* RedisTemplate는 RedisConnection에서 넘겨준 byte 값을 직렬화 하기 위해 사용된다.
*/
@Bean
public RedisTemplate<?, ?> redisTemplate() {
RedisTemplate<?, ?> redisTemplate = new RedisTemplate<>();
// 데이터를 받아 올 RedisConnection 설정
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
스프링 어플리케이션에서 레디스를 사용하는 방법 중 하나는 RedisTemplate을 이용하는 것이다.
RedisTemplate은 다양한 opsFor***()를 통해 다양한 자료구조를 직렬화/역직렬화할 수 있도록 지원한다.
스프링 어플리케이션에서 레디스를 사용할 수 있는 또 하나의 방법은 RedisRepository를 이용하는 것이다.
RedisRepository는 Spring Data Jpa처럼 객체를 기반으로 레디스에 데이터를 저장할 수 있다.
RedisConfig
RedisRepository를 사용하기 위해서는 @EnableRedisRepositories를 적용하여 RedisRepository 기능을 활성화 해야한다.