Skip to content

Latest commit

 

History

History
98 lines (77 loc) · 2.94 KB

003.Connecting_to_Redis_in_Spring.md

File metadata and controls

98 lines (77 loc) · 2.94 KB

003. Kotlin + Spring 프로젝트에 Redis 설정하기

Spring Webflux 프로젝트에 Spring Data Redis를 사용해서 Redis 연결을 해보겠습니다.

Gradle 설정

먼저 Spring Data Redis를 사용하기 위해 Dependency에 다음 내용을 추가합니다. 참고로 저는 Gradle이 kotlin으로 되어 있어요.

implementation("org.springframework.boot:spring-boot-starter-data-redis")

yaml 설정

그 다음 application.yaml을 생성합니다.

spring:
  application:
    name: fan-signal-api
  jackson:
    property-naming-strategy: SNAKE_CASE
  data:
    redis:
      host: localhost
      port: 6379
      password: master
      timeout: 60000

config 구성

그 다음 위 application.yaml 설정을 바탕으로 Redis Config를 작성해보겠습니다. reactiveRedisConnectionFactory@Primary 설정을 하지 않으면, Spring Boot에서 기본적으로 등록하는 redisConnectionFactory와 충돌이 발생하므로 반드시 기입해야 합니다.

@Configuration
class RedisConfig(private val redisProperties: RedisProperties) {

    @Bean
    @Primary
    fun reactiveRedisConnectionFactory(): ReactiveRedisConnectionFactory {
        val config = RedisStandaloneConfiguration()
        config.hostName = redisProperties.host
        config.port = redisProperties.port
        if (!redisProperties.password.isNullOrBlank()) {
            config.password = RedisPassword.of(redisProperties.password)
        }
        return LettuceConnectionFactory(config)
    }

    @Bean
    @Qualifier("reactiveStringRedisTemplate")
    fun reactiveStringRedisTemplate(factory: ReactiveRedisConnectionFactory): ReactiveStringRedisTemplate {
        return ReactiveStringRedisTemplate(factory)
    }

    @Bean
    @Qualifier("reactiveRedisTemplate")
    fun reactiveRedisTemplate(factory: ReactiveRedisConnectionFactory): ReactiveRedisTemplate<String, String> {
        val keySerializer = StringRedisSerializer()
        val valueSerializer = StringRedisSerializer()

        val serializationContext = RedisSerializationContext.newSerializationContext<String, String>(keySerializer)
            .value(valueSerializer)
            .build()

        return ReactiveRedisTemplate(factory, serializationContext)
    }
}

API 테스트

연결 테스트를 위해 다음과 같은 API를 생성합니다.

@RestController
class RedisTestController(@Autowired private val redisTemplate: ReactiveStringRedisTemplate) {

    @GetMapping("/redis-connect")
    fun testConnection(): String {
        return try {
            redisTemplate.opsForValue().set("testKey", "testValue")
            "Redis 연결 성공: ${redisTemplate.opsForValue().get("testKey")}"
        } catch (e: Exception) {
            "Redis 연결 실패: ${e.message}"
        }
    }
}

실제로 호출해보면 다음과 같은 정상 응답이 내려오는 것을 확인할 수 있습니다.

Redis 연결 성공: testValue