diff --git a/src/main/java/com/wedit/weditapp/domain/invitation/service/InvitationService.java b/src/main/java/com/wedit/weditapp/domain/invitation/service/InvitationService.java index 354a50e..0e031b3 100644 --- a/src/main/java/com/wedit/weditapp/domain/invitation/service/InvitationService.java +++ b/src/main/java/com/wedit/weditapp/domain/invitation/service/InvitationService.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.stream.Collectors; +import org.springframework.cache.annotation.Cacheable; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -112,7 +113,9 @@ public InvitationResponseDto getInvitation(UserDetails userDetails, Long invitat } // 청첩장 목록 조회 (생성일 기준 오름차순) + @Cacheable(value = "memberInvitations", key = "#userDetails.username", unless = "#result == null") public List getMemberInvitations(UserDetails userDetails) { + log.info("DB에서 청첩장 목록 조회 실행"); // 캐시가 적용되지 않은 경우에만 로그 출력 Member member = getMember(userDetails); List invitations = invitationRepository.findByMemberIdOrderByCreatedAtAsc(member.getId()); diff --git a/src/main/java/com/wedit/weditapp/global/config/RedisCacheConfig.java b/src/main/java/com/wedit/weditapp/global/config/RedisCacheConfig.java new file mode 100644 index 0000000..a64459f --- /dev/null +++ b/src/main/java/com/wedit/weditapp/global/config/RedisCacheConfig.java @@ -0,0 +1,36 @@ +package com.wedit.weditapp.global.config; + +import org.springframework.boot.autoconfigure.cache.RedisCacheManagerBuilderCustomizer; +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 java.time.Duration; + +@Configuration +@EnableCaching +public class RedisCacheConfig { + + @Bean + public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory) { + // 기본 캐시 설정: 2주 + RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() + .entryTtl(Duration.ofSeconds(1209600)) + .disableCachingNullValues(); + + return RedisCacheManager.builder(redisConnectionFactory) + .cacheDefaults(cacheConfiguration) + .build(); + } + + // 추후 캐시 별 개별 TTL 지정 시 사용 예정 + @Bean + public RedisCacheManagerBuilderCustomizer redisCacheManagerBuilderCustomizer() { + return builder -> builder + .withCacheConfiguration("memberInvitations", + RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(1209600))); + } +}