Skip to content

Commit 10c022f

Browse files
committed
Spring_Security_기본_설정 : feat : [redis모듈] Redis 관련 환경설정 및 Properties 추가 #3
1 parent 6ce26cd commit 10c022f

2 files changed

Lines changed: 99 additions & 0 deletions

File tree

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package com.chuseok22.ctredis.infrastructure.config
2+
3+
import com.chuseok22.ctredis.infrastructure.properties.RedisProperties
4+
import com.fasterxml.jackson.databind.ObjectMapper
5+
import com.fasterxml.jackson.databind.SerializationFeature
6+
import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator
7+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
8+
import com.fasterxml.jackson.module.kotlin.KotlinModule
9+
import org.springframework.boot.context.properties.EnableConfigurationProperties
10+
import org.springframework.context.annotation.Bean
11+
import org.springframework.context.annotation.Configuration
12+
import org.springframework.data.redis.connection.RedisConnectionFactory
13+
import org.springframework.data.redis.connection.RedisStandaloneConfiguration
14+
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory
15+
import org.springframework.data.redis.core.RedisTemplate
16+
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer
17+
import org.springframework.data.redis.serializer.StringRedisSerializer
18+
19+
@Configuration
20+
@EnableConfigurationProperties(RedisProperties::class)
21+
class RedisConfig(
22+
private val properties: RedisProperties
23+
) {
24+
25+
/**
26+
* Redis Factory
27+
*/
28+
@Bean
29+
fun redisConnectionFactory(redisProperties: RedisProperties): RedisConnectionFactory {
30+
31+
val config = RedisStandaloneConfiguration().apply {
32+
hostName = properties.host
33+
port = properties.port
34+
setPassword(redisProperties.password)
35+
}
36+
37+
return LettuceConnectionFactory(config)
38+
}
39+
40+
/**
41+
* RedisTemplate
42+
*/
43+
@Bean
44+
fun redisTemplate(
45+
connectionFactory: RedisConnectionFactory
46+
): RedisTemplate<String, Any> {
47+
val objectMapper = createObjectMapper()
48+
49+
return RedisTemplate<String, Any>().apply {
50+
this.connectionFactory = connectionFactory
51+
52+
// Key Serializer: String
53+
keySerializer = StringRedisSerializer()
54+
hashKeySerializer = StringRedisSerializer()
55+
56+
// Value Serializer: JSON
57+
val jsonSerializer = GenericJackson2JsonRedisSerializer(objectMapper)
58+
valueSerializer = jsonSerializer
59+
hashValueSerializer = jsonSerializer
60+
61+
afterPropertiesSet()
62+
}
63+
}
64+
65+
/**
66+
* ObjectMapper 생성
67+
*/
68+
private fun createObjectMapper(): ObjectMapper {
69+
return ObjectMapper().apply {
70+
// Kotlin 모듈
71+
registerModule(KotlinModule.Builder().build())
72+
73+
// Java 8 Time API (LocalDateTime 등)
74+
registerModule(JavaTimeModule())
75+
disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
76+
77+
// 다형성 지원
78+
activateDefaultTyping(
79+
BasicPolymorphicTypeValidator.builder()
80+
.allowIfBaseType(Any::class.java)
81+
.build(),
82+
ObjectMapper.DefaultTyping.NON_FINAL
83+
)
84+
}
85+
}
86+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.chuseok22.ctredis.infrastructure.properties
2+
3+
import org.springframework.boot.context.properties.ConfigurationProperties
4+
import org.springframework.validation.annotation.Validated
5+
6+
@Validated
7+
@ConfigurationProperties(prefix = "spring.data.redis")
8+
data class RedisProperties(
9+
val host: String,
10+
val port: Int,
11+
val password: String
12+
) {
13+
}

0 commit comments

Comments
 (0)