From c60eeb506e07faf0209ae9db644ad226cd8ae415 Mon Sep 17 00:00:00 2001 From: songhyeonpk Date: Thu, 10 Apr 2025 16:43:22 +0900 Subject: [PATCH 1/3] =?UTF-8?q?chore:=20caffeine=20cache=20=EC=9D=98?= =?UTF-8?q?=EC=A1=B4=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bef3d57..6933a01 100644 --- a/build.gradle +++ b/build.gradle @@ -60,6 +60,9 @@ dependencies { // Redis implementation 'org.springframework.boot:spring-boot-starter-data-redis' + // Caffeine Cache + implementation 'com.github.ben-manes.caffeine:caffeine' + // AWS SDK implementation 'software.amazon.awssdk:s3:2.20.140' // 최신 버전 확인 후 적용 implementation 'software.amazon.awssdk:auth:2.20.140' // IAM 인증 관련 @@ -77,7 +80,6 @@ dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - } jar.enabled = false From 1457cefc682b2f0972b018f4d5e292c83aa1fe1d Mon Sep 17 00:00:00 2001 From: songhyeonpk Date: Thu, 10 Apr 2025 16:43:55 +0900 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=20redis=20=EC=BA=90=EC=8B=9C=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=84=A4=EC=A0=95=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infrastructure/redis/RedisConfig.java | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/src/main/java/com/ftm/server/infrastructure/redis/RedisConfig.java b/src/main/java/com/ftm/server/infrastructure/redis/RedisConfig.java index 98e4cc9..20d3fb0 100644 --- a/src/main/java/com/ftm/server/infrastructure/redis/RedisConfig.java +++ b/src/main/java/com/ftm/server/infrastructure/redis/RedisConfig.java @@ -1,22 +1,16 @@ package com.ftm.server.infrastructure.redis; -import java.time.Duration; import lombok.RequiredArgsConstructor; -import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.cache.RedisCacheConfiguration; -import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; -import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; @EnableRedisHttpSession(redisNamespace = "ftm:session", maxInactiveIntervalInSeconds = 3600) -@EnableCaching @Configuration @RequiredArgsConstructor public class RedisConfig { @@ -46,20 +40,4 @@ public RedisTemplate redisTemplate(RedisConnectionFactory factor template.afterPropertiesSet(); return template; } - - // Redis Caching - @Bean - public RedisCacheManager redisCacheManager(RedisConnectionFactory factory) { - RedisCacheConfiguration cacheConfiguration = - RedisCacheConfiguration.defaultCacheConfig() - .entryTtl(Duration.ofMinutes(30)) // 기본 캐시 만료시간 30분 - .serializeKeysWith( - RedisSerializationContext.SerializationPair.fromSerializer( - new StringRedisSerializer())) - .serializeValuesWith( - RedisSerializationContext.SerializationPair.fromSerializer( - new GenericJackson2JsonRedisSerializer())); - - return RedisCacheManager.builder(factory).cacheDefaults(cacheConfiguration).build(); - } } From e9394b2e22f0b6725fadca8392902ce21c7bb45b Mon Sep 17 00:00:00 2001 From: songhyeonpk Date: Thu, 10 Apr 2025 16:44:13 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20caffeine=20cache=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cache/CaffeineCacheConfig.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/com/ftm/server/infrastructure/cache/CaffeineCacheConfig.java diff --git a/src/main/java/com/ftm/server/infrastructure/cache/CaffeineCacheConfig.java b/src/main/java/com/ftm/server/infrastructure/cache/CaffeineCacheConfig.java new file mode 100644 index 0000000..f6df7a6 --- /dev/null +++ b/src/main/java/com/ftm/server/infrastructure/cache/CaffeineCacheConfig.java @@ -0,0 +1,21 @@ +package com.ftm.server.infrastructure.cache; + +import com.github.benmanes.caffeine.cache.Caffeine; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.caffeine.CaffeineCacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@EnableCaching +@Configuration +public class CaffeineCacheConfig { + + @Bean + public CaffeineCacheManager cacheManager() { + CaffeineCacheManager manager = new CaffeineCacheManager(); + manager.setAllowNullValues(false); // null 값 저장하지 않음 + manager.setCaffeine(Caffeine.newBuilder().maximumSize(100).recordStats()); + + return manager; + } +}