Skip to content

Commit 35ed852

Browse files
authored
Merge pull request #252 from FunD-StockProject/refactor/redis-serializer
Refactor: Redis 역직렬화 문제 수정
2 parents 49d0a42 + 6656983 commit 35ed852

1 file changed

Lines changed: 15 additions & 9 deletions

File tree

src/main/java/com/fund/stockProject/global/config/RedisConfig.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
1515
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
1616
import org.springframework.data.redis.serializer.RedisSerializationContext;
17-
import org.springframework.data.redis.serializer.RedisSerializer;
1817
import org.springframework.data.redis.serializer.StringRedisSerializer;
1918

2019
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -29,12 +28,12 @@ public class RedisConfig {
2928
public ObjectMapper redisCacheObjectMapper() {
3029
ObjectMapper mapper = new ObjectMapper();
3130
mapper.registerModule(new JavaTimeModule());
32-
// 타입 정보를 포함하지 않도록 설정 (클린한 JSON)
31+
// 명시 타입 serializer에서 사용할 ObjectMapper
3332
return mapper;
3433
}
3534

3635
@Bean
37-
public RedisCacheConfiguration defaultCacheConfiguration(ObjectMapper redisCacheObjectMapper) {
36+
public RedisCacheConfiguration defaultCacheConfiguration() {
3837
return RedisCacheConfiguration.defaultCacheConfig()
3938
.entryTtl(Duration.ofMinutes(10))
4039
.disableCachingNullValues()
@@ -45,7 +44,8 @@ public RedisCacheConfiguration defaultCacheConfiguration(ObjectMapper redisCache
4544
)
4645
.serializeValuesWith(
4746
RedisSerializationContext.SerializationPair.fromSerializer(
48-
new GenericJackson2JsonRedisSerializer(redisCacheObjectMapper)
47+
// 기본 캐시도 타입 정보를 유지해 역직렬화 시 Map으로 깨지지 않도록 설정
48+
new GenericJackson2JsonRedisSerializer()
4949
)
5050
);
5151
}
@@ -58,9 +58,9 @@ public CacheManager cacheManager(
5858

5959
Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<>();
6060

61-
Jackson2JsonRedisSerializer<Object> stockInfoSerializer =
62-
new Jackson2JsonRedisSerializer<>(redisCacheObjectMapper, Object.class);
63-
RedisSerializationContext.SerializationPair<Object> stockInfoSerializationPair =
61+
Jackson2JsonRedisSerializer<StockInfoResponse> stockInfoSerializer =
62+
new Jackson2JsonRedisSerializer<>(redisCacheObjectMapper, StockInfoResponse.class);
63+
RedisSerializationContext.SerializationPair<StockInfoResponse> stockInfoSerializationPair =
6464
RedisSerializationContext.SerializationPair.fromSerializer(stockInfoSerializer);
6565

6666
// 숏뷰 추천: 5분 캐시 (사용자별 추천 결과)
@@ -70,7 +70,7 @@ public CacheManager cacheManager(
7070
// 실시간 가격: 30초 캐시 (변동성 높음)
7171
cacheConfigurations.put("stockPrice",
7272
defaultCacheConfiguration.entryTtl(Duration.ofSeconds(30))
73-
.serializeValuesWith(stockInfoSerializationPair));
73+
.serializeValuesWith(castToObjectPair(stockInfoSerializationPair)));
7474

7575
// 주식 정보: 1시간 캐시 (기본 정보, 변동 적음)
7676
cacheConfigurations.put("stockInfo",
@@ -79,7 +79,7 @@ public CacheManager cacheManager(
7979
// 검색 결과: 30분 캐시
8080
cacheConfigurations.put("searchResult",
8181
defaultCacheConfiguration.entryTtl(Duration.ofMinutes(30))
82-
.serializeValuesWith(stockInfoSerializationPair));
82+
.serializeValuesWith(castToObjectPair(stockInfoSerializationPair)));
8383

8484
// 유효한 주식 목록: 1시간 캐시
8585
cacheConfigurations.put("validStocks",
@@ -90,4 +90,10 @@ public CacheManager cacheManager(
9090
.withInitialCacheConfigurations(cacheConfigurations)
9191
.build();
9292
}
93+
94+
@SuppressWarnings("unchecked")
95+
private RedisSerializationContext.SerializationPair<Object> castToObjectPair(
96+
RedisSerializationContext.SerializationPair<?> pair) {
97+
return (RedisSerializationContext.SerializationPair<Object>) pair;
98+
}
9399
}

0 commit comments

Comments
 (0)