From 8e1586af4318f650b208bacc189e778b34e63f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dean=5B=EB=B0=B1=EB=B3=91=EB=82=A8=5D?= Date: Tue, 2 Dec 2025 14:59:01 +0900 Subject: [PATCH] feat: add redis --- .../service/ChangeDetectionService.java | 2 -- .../cd/kamcoback/config/RedisConfig.java | 24 ++++++++++++++++++- .../service/InferenceResultService.java | 6 ----- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/changedetection/service/ChangeDetectionService.java b/src/main/java/com/kamco/cd/kamcoback/changedetection/service/ChangeDetectionService.java index f037f038..ba3450bb 100644 --- a/src/main/java/com/kamco/cd/kamcoback/changedetection/service/ChangeDetectionService.java +++ b/src/main/java/com/kamco/cd/kamcoback/changedetection/service/ChangeDetectionService.java @@ -5,7 +5,6 @@ import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; import com.kamco.cd.kamcoback.postgres.core.ChangeDetectionCoreService; import java.util.List; import lombok.RequiredArgsConstructor; -import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @Service @@ -35,7 +34,6 @@ public class ChangeDetectionService { return changeDetectionCoreService.getChangeDetectionYearList(); } - @Cacheable(value = "changeDetectionPolygon", key = "#analUid + '_' + #mapSheetNum") public ChangeDetectionDto.PolygonFeatureList getChangeDetectionPolygonList( Long analUid, String mapSheetNum) { diff --git a/src/main/java/com/kamco/cd/kamcoback/config/RedisConfig.java b/src/main/java/com/kamco/cd/kamcoback/config/RedisConfig.java index 897891ca..4f03f569 100644 --- a/src/main/java/com/kamco/cd/kamcoback/config/RedisConfig.java +++ b/src/main/java/com/kamco/cd/kamcoback/config/RedisConfig.java @@ -1,7 +1,10 @@ package com.kamco.cd.kamcoback.config; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator; +import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import java.time.Duration; import org.springframework.beans.factory.annotation.Value; @@ -46,6 +49,9 @@ public class RedisConfig { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + objectMapper.findAndRegisterModules(); + return objectMapper; } @@ -71,8 +77,24 @@ public class RedisConfig { // 기본 레디스 캐시 세팅 @Bean public CacheManager cacheManager(RedisConnectionFactory connectionFactory) { + ObjectMapper cacheObjectMapper = new ObjectMapper(); + cacheObjectMapper.registerModule(new JavaTimeModule()); + cacheObjectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + cacheObjectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + cacheObjectMapper.findAndRegisterModules(); + + // 타입 정보 포함 - JAVA_LANG_OBJECT로 제한적으로 적용 + PolymorphicTypeValidator ptv = + BasicPolymorphicTypeValidator.builder() + .allowIfSubType("com.kamco.cd.kamcoback") + .allowIfSubType("org.springframework.data.domain") + .allowIfSubType("java.util") + .allowIfSubType("java.time") + .build(); + cacheObjectMapper.activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT); + GenericJackson2JsonRedisSerializer serializer = - new GenericJackson2JsonRedisSerializer(redisObjectMapper()); + new GenericJackson2JsonRedisSerializer(cacheObjectMapper); RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java index 18917c4f..9a46072a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java @@ -7,7 +7,6 @@ import com.kamco.cd.kamcoback.postgres.core.InferenceResultCoreService; import jakarta.validation.constraints.NotNull; import java.util.List; import lombok.RequiredArgsConstructor; -import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -67,11 +66,6 @@ public class InferenceResultService { * @param searchReq * @return */ - @Cacheable( - value = "inferenceResultWithGeom", - key = - "#id + '_' + #searchReq.page + '_' + #searchReq.size + '_' + (#searchReq.sort != null ? #searchReq.sort : 'none') + '_' + (#searchReq.targetClass != null ? #searchReq.targetClass : 'none') + '_' + (#searchReq.compareClass != null ? #searchReq.compareClass : 'none') + '_' + (#searchReq.mapSheetNum != null ? #searchReq.mapSheetNum.toString() : 'none')", - unless = "#result == null || #result.isEmpty()") public Page listInferenceResultWithGeom( @NotNull Long id, InferenceResultDto.SearchGeoReq searchReq) {