springBoot+redis 간단 연동

22_gas·2024년 6월 21일

2023.7.19 작성

개요

새로운 회사에서 flask로 되어있는 redis 로직을 spring boot로 변환하는 작업을 진행했다.

일단 redis 접속을 먼저 해야된다.

개발

1. dependency 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

applitcation.properties

구축된 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

Redis config파일 생성

@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 테스트

@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 ssl로 접속해야할때

계속 redis에 접속하지 못하고 timeout error가 발생하게됐다. (ㅜ.ㅜ)

import redis

redis.Redis(
    ....
    ssl=True, 
    ....
)

flask의 경우위와 같이 호출하면 그냥 돼는데  결국 반나절을 사용하여 java에서도 사용할 수 있는 방법을 찾게 되었다.

처리방법 ssl로 접속하기위한 방법

핵심은 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);

}

이후에 테스트를 해보면

성공했다!

profile
전 아직 모르는게 많아요

0개의 댓글