diff --git a/build.gradle b/build.gradle index 14a2193..7d1f17d 100644 --- a/build.gradle +++ b/build.gradle @@ -70,6 +70,10 @@ dependencies { // Spring Security implementation 'org.springframework.boot:spring-boot-starter-security' + + // Caffeine Cache + implementation 'org.springframework.boot:spring-boot-starter-cache' + implementation 'com.github.ben-manes.caffeine:caffeine' } tasks.named('test') { diff --git a/src/main/java/com/acon/server/global/auth/CacheConfig.java b/src/main/java/com/acon/server/global/auth/CacheConfig.java new file mode 100644 index 0000000..ccfd336 --- /dev/null +++ b/src/main/java/com/acon/server/global/auth/CacheConfig.java @@ -0,0 +1,38 @@ +package com.acon.server.global.auth; + + +import com.github.benmanes.caffeine.cache.Caffeine; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.caffeine.CaffeineCache; +import org.springframework.cache.support.SimpleCacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Collections; +import java.util.concurrent.TimeUnit; + +@Configuration +@EnableCaching +public class CacheConfig { + @Value("${jwt.refresh-token-expire-time}") + private long REFRESH_TOKEN_EXPIRATION_TIME; + + @Bean + public CacheManager cacheManager() { + + // 최대 용량 설정을 따로 진행하지 않음. 메모리 부족 문제 주의 필요 + Caffeine caffeineBuilder = Caffeine.newBuilder() + .expireAfterWrite(REFRESH_TOKEN_EXPIRATION_TIME, TimeUnit.MILLISECONDS); + + CaffeineCache refreshTokenCache = new CaffeineCache( + "refreshTokenCache", + caffeineBuilder.build() + ); + + SimpleCacheManager cacheManager = new SimpleCacheManager(); + cacheManager.setCaches(Collections.singletonList(refreshTokenCache)); + return cacheManager; + } +}