2023.7.19 작성
새로운 회사에서 flask로 되어있는 redis 로직을 spring boot로 변환하는 작업을 진행했다.
일단 redis 접속을 먼저 해야된다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
구축된 redis의 경우 host와 port 뿐만이 아니고 password도 필요 하고 몇번째 database도 추가로 필요 하다.
spring.redis.lettuce.pool.max-active=10
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=2
spring.redis.password={비밀번호}
spring.redis.port=3398
spring.redis.host=aws.domain.com
spring.redis.database=0
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.port}")
private String redisPort;
@Value("${spring.redis.password}")
private String redisPassword;
@Value("${spring.redis.database}")
private String redisDatabase;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(redisHost);
redisStandaloneConfiguration.setPort(Integer.parseInt(redisPort));
redisStandaloneConfiguration.setPassword(redisPassword);
redisStandaloneConfiguration.setDatabase(Integer.parseInt(redisDatabase));
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration);
return lettuceConnectionFactory;
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
return redisTemplate;
}
}
@Controller
@RequestMapping("/redis")
public class RedisController {
@Autowired
private RedisTemplate<String, String> redisTemplate;
@GetMapping("/test/{_key}")
public ResponseEntity<?> test(@PathVariable String _key) {
ValueOperations<String, String> vop = redisTemplate.opsForValue();
String value = vop.get(_key);
return new ResponseEntity<>(value, HttpStatus.OK);
}
}
여기까지 한다면 그냥 redis접근이 가능할것이고 redis활용은 찾아서 진행 할수 있을것이다.
계속 redis에 접속하지 못하고 timeout error가 발생하게됐다. (ㅜ.ㅜ)

import redis
redis.Redis(
....
ssl=True,
....
)
flask의 경우위와 같이 호출하면 그냥 돼는데 결국 반나절을 사용하여 java에서도 사용할 수 있는 방법을 찾게 되었다.
핵심은 LettureClientConfiguration을 만들고 useSsl()과 disablePeerVerification() 을 사용하여
만들어진 client를 활용하여 connectionFactory를 생성한다.
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(redisHost);
redisStandaloneConfiguration.setPort(Integer.parseInt(redisPort));
redisStandaloneConfiguration.setPassword(redisPassword);
redisStandaloneConfiguration.setDatabase(Integer.parseInt(redisDatabase));
//원래 코드를 주석으로 막아주고
//LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration);
//return lettuceConnectionFactory;
//이 부분을 추가한다.
LettuceClientConfiguration lettuceClientConfiguration = LettuceClientConfiguration.builder().useSsl().disablePeerVerification().build();
return new LettuceConnectionFactory(redisStandaloneConfiguration, lettuceClientConfiguration);
}
이후에 테스트를 해보면

성공했다!