Conversation
✅ 테스트 결과 for PRBuild: success 🧪 테스트 실행 with Gradle |
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
Pull request overview
캐시 키 생성 규칙을 중앙화(CacheKeyBuilder)하고, 여러 @Cacheable 지점에 적용해 캐시 키 일관성을 높이며, 애플리케이션 시작 시 캐시 워밍업/Redis 오류 로깅 개선/검색 조건 보강(경매 날짜 조건 등)을 함께 반영하는 PR입니다.
Changes:
CacheKeyBuilder도입 및 통계/랭킹/마스터데이터/경매 검색 캐시 키 SpEL을 빌더 기반으로 통일- 애플리케이션 시작 시 캐시 워밍업 러너 추가 및 Redis cache error handler 로깅 정교화
- 경매 히스토리 기본 기간 설정(최근 1개월) 및 실시간 경매 만료일 범위 검색 조건 추가
Reviewed changes
Copilot reviewed 184 out of 184 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| src/test/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoServiceTest.java | 테스트 import 정리 |
| src/test/java/until/the/eternity/iteminfo/application/service/ItemInfoServiceTest.java | 테스트 import 정리 |
| src/test/java/until/the/eternity/common/util/SegongOptionParserTest.java | 테스트 import 정리 |
| src/test/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionServiceTest.java | 테스트 import 정리 |
| src/test/java/until/the/eternity/auctionrealtime/application/service/fetcher/AuctionRealtimeFetcherTest.java | 테스트 import 정리 |
| src/test/java/until/the/eternity/auctionrealtime/application/service/AuctionRealtimeServiceTest.java | AuctionRealtimeService 단위 테스트 추가 |
| src/test/java/until/the/eternity/auctionhistory/domain/service/AuctionHistoryDuplicateCheckerTest.java | 테스트 import 정리 |
| src/test/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersisterTest.java | 테스트 import 정리 |
| src/test/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcherTest.java | 테스트 import 정리 |
| src/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java | 테스트 import 정리 |
| src/main/resources/application.yml | Redis health 설정/로그 레벨/캐시 warmup 설정 및 p6spy 로깅 변경 |
| src/main/java/until/the/eternity/statistics/repository/weekly/TopCategoryWeeklyStatisticsRepository.java | import 정리 |
| src/main/java/until/the/eternity/statistics/repository/weekly/SubcategoryWeeklyStatisticsRepository.java | import 정리 |
| src/main/java/until/the/eternity/statistics/repository/weekly/ItemWeeklyStatisticsRepository.java | import 정리 |
| src/main/java/until/the/eternity/statistics/repository/daily/TopCategoryDailyStatisticsRepository.java | import 정리 |
| src/main/java/until/the/eternity/statistics/repository/daily/SubcategoryDailyStatisticsRepository.java | import 정리 |
| src/main/java/until/the/eternity/statistics/repository/daily/ItemDailyStatisticsRepository.java | import 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/TopCategoryWeeklyStatisticsResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/TopCategoryDailyStatisticsResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/SubcategoryWeeklyStatisticsResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/SubcategoryDailyStatisticsResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/ItemWeeklyStatisticsResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/ItemDailyStatisticsResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/TopCategoryWeeklyStatisticsSearchRequest.java | import 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/TopCategoryDailyStatisticsSearchRequest.java | import 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/SubcategoryWeeklyStatisticsSearchRequest.java | import 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/SubcategoryDailyStatisticsSearchRequest.java | import 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/ItemWeeklyStatisticsSearchRequest.java | import 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/ItemDailyStatisticsSearchRequest.java | import 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/request/DailyStatisticsSearchRequest.java | import 정리 |
| src/main/java/until/the/eternity/statistics/domain/entity/weekly/TopCategoryWeeklyStatistics.java | import 순서 정리 |
| src/main/java/until/the/eternity/statistics/domain/entity/weekly/SubcategoryWeeklyStatistics.java | import 순서 정리 |
| src/main/java/until/the/eternity/statistics/domain/entity/weekly/ItemWeeklyStatistics.java | import 순서 정리 |
| src/main/java/until/the/eternity/statistics/domain/entity/daily/TopCategoryDailyStatistics.java | import 순서 정리 |
| src/main/java/until/the/eternity/statistics/domain/entity/daily/SubcategoryDailyStatistics.java | import 순서 정리 |
| src/main/java/until/the/eternity/statistics/domain/entity/daily/ItemDailyStatistics.java | import 순서 정리 |
| src/main/java/until/the/eternity/statistics/application/service/TopCategoryWeeklyStatisticsService.java | 캐시 키를 CacheKeyBuilder로 통일 |
| src/main/java/until/the/eternity/statistics/application/service/TopCategoryDailyStatisticsService.java | 캐시 키를 CacheKeyBuilder로 통일 |
| src/main/java/until/the/eternity/statistics/application/service/SubcategoryWeeklyStatisticsService.java | 캐시 키를 CacheKeyBuilder로 통일 |
| src/main/java/until/the/eternity/statistics/application/service/SubcategoryDailyStatisticsService.java | 캐시 키를 CacheKeyBuilder로 통일 |
| src/main/java/until/the/eternity/statistics/application/service/ItemWeeklyStatisticsService.java | 캐시 키를 CacheKeyBuilder로 통일 |
| src/main/java/until/the/eternity/statistics/application/service/ItemDailyStatisticsService.java | 캐시 키를 CacheKeyBuilder로 통일 |
| src/main/java/until/the/eternity/ranking/repository/RankingRepository.java | import 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/VolumeRankingResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/VolumeChangeRankingResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/PriceRankingResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/PriceChangeRankingResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/AllTimeRankingResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/controller/VolumeRankingController.java | import 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/controller/PriceRankingController.java | import 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/controller/PriceChangeRankingController.java | import 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/controller/CategoryRankingController.java | import 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/controller/AllTimeRankingController.java | import 정리 |
| src/main/java/until/the/eternity/ranking/domain/mapper/RankingMapper.java | import 순서 정리 |
| src/main/java/until/the/eternity/ranking/application/service/VolumeRankingService.java | 캐시 키를 CacheKeyBuilder(byLimit)로 통일 |
| src/main/java/until/the/eternity/ranking/application/service/PriceRankingService.java | 캐시 키를 CacheKeyBuilder(byLimit)로 통일 |
| src/main/java/until/the/eternity/ranking/application/service/PriceChangeRankingService.java | 캐시 키를 CacheKeyBuilder(byLimit)로 통일 |
| src/main/java/until/the/eternity/ranking/application/service/CategoryRankingService.java | 카테고리 랭킹 캐시 키를 CacheKeyBuilder로 통일 |
| src/main/java/until/the/eternity/ranking/application/service/AllTimeRankingService.java | 캐시 키를 CacheKeyBuilder(byLimit)로 통일 |
| src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/dto/response/MetalwareInfoResponse.java | import 순서 정리 |
| src/main/java/until/the/eternity/metalwareinfo/interfaces/rest/controller/MetalwareInfoController.java | import 정리 |
| src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoRepositoryPortImpl.java | import 정리 |
| src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoJpaRepository.java | import 정리 |
| src/main/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoService.java | 캐시 키를 CacheKeyBuilder(all)로 통일 |
| src/main/java/until/the/eternity/metalwareinfo/application/service/MetalwareAttributeInfoService.java | 캐시 키를 CacheKeyBuilder로 통일 |
| src/main/java/until/the/eternity/itemoptioninfo/interfaces/rest/controller/ItemOptionInfoController.java | import 정리 |
| src/main/java/until/the/eternity/itemoptioninfo/infrastructure/persistence/ItemOptionInfoRepositoryPortImpl.java | import 정리 |
| src/main/java/until/the/eternity/itemoptioninfo/domain/repository/ItemOptionInfoRepositoryPort.java | import 정리 |
| src/main/java/until/the/eternity/itemoptioninfo/domain/entity/ItemOptionInfoId.java | import 정리 |
| src/main/java/until/the/eternity/itemoptioninfo/application/service/ItemOptionInfoService.java | import 정리 |
| src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoSyncResponse.java | import 정리 |
| src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoSummaryResponse.java | import 정리 |
| src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemInfoResponse.java | import 정리 |
| src/main/java/until/the/eternity/iteminfo/interfaces/rest/dto/response/ItemCategoryResponse.java | import 정리 |
| src/main/java/until/the/eternity/iteminfo/interfaces/rest/controller/ItemInfoController.java | import 정리 |
| src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoRepositoryPortImpl.java | import 정리 |
| src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoQueryDslRepository.java | import 정리 |
| src/main/java/until/the/eternity/iteminfo/infrastructure/persistence/ItemInfoJpaRepository.java | import 정리 |
| src/main/java/until/the/eternity/iteminfo/domain/repository/ItemInfoRepositoryPort.java | import 정리 |
| src/main/java/until/the/eternity/iteminfo/domain/exception/ItemInfoExceptionCode.java | static import 정리 |
| src/main/java/until/the/eternity/iteminfo/domain/entity/ItemInfoId.java | import 정리 |
| src/main/java/until/the/eternity/iteminfo/application/service/ItemInfoService.java | 캐시 키를 CacheKeyBuilder로 통일(ALL/byText/detail/summary) |
| src/main/java/until/the/eternity/hornBugle/kafka/application/HornBugleKafkaProducerService.java | import 정리 |
| src/main/java/until/the/eternity/hornBugle/interfaces/rest/dto/response/HornBugleHistoryResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryListResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleRepositoryPortImpl.java | import 정리 |
| src/main/java/until/the/eternity/hornBugle/infrastructure/persistence/HornBugleJpaRepository.java | import 정리 |
| src/main/java/until/the/eternity/hornBugle/infrastructure/elasticsearch/HornBugleIndexService.java | import 정리 |
| src/main/java/until/the/eternity/hornBugle/infrastructure/elasticsearch/HornBugleDocument.java | import 정리 |
| src/main/java/until/the/eternity/hornBugle/domain/service/HornBugleDuplicateChecker.java | import 정리 |
| src/main/java/until/the/eternity/hornBugle/domain/repository/HornBugleRepositoryPort.java | import 정리 |
| src/main/java/until/the/eternity/hornBugle/domain/mapper/HornBugleMapper.java | import 정리 |
| src/main/java/until/the/eternity/hornBugle/domain/enums/HornBugleServer.java | import 순서 정리 |
| src/main/java/until/the/eternity/hornBugle/domain/entity/HornBugleWorldHistory.java | import 정리 |
| src/main/java/until/the/eternity/hornBugle/application/service/HornBugleService.java | import 정리 |
| src/main/java/until/the/eternity/hornBugle/application/scheduler/HornBugleScheduler.java | import 정리 |
| src/main/java/until/the/eternity/hornBugle/application/runner/HornBugleIndexRunner.java | import 정리 |
| src/main/java/until/the/eternity/enchantinfo/interfaces/rest/controller/EnchantInfoController.java | import 정리 및 wildcard import 적용 |
| src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoRepositoryPortImpl.java | import 정리 |
| src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoJpaRepository.java | import 정리 |
| src/main/java/until/the/eternity/enchantinfo/infrastructure/persistence/EnchantInfoEntity.java | JPA import wildcard로 정리 |
| src/main/java/until/the/eternity/enchantinfo/domain/repository/EnchantInfoRepositoryPort.java | import 정리 |
| src/main/java/until/the/eternity/enchantinfo/domain/exception/EnchantInfoExceptionCode.java | static import 정리 |
| src/main/java/until/the/eternity/enchantinfo/application/service/EnchantInfoService.java | 캐시 키를 CacheKeyBuilder로 통일 |
| src/main/java/until/the/eternity/config/openapi/OpenApiWebClientProperties.java | import 정리 |
| src/main/java/until/the/eternity/config/openapi/OpenApiRetryPolicy.java | import 정리 |
| src/main/java/until/the/eternity/config/openapi/OpenApiFilters.java | import 정리 |
| src/main/java/until/the/eternity/config/RedisConfig.java | import 정리 |
| src/main/java/until/the/eternity/config/RedisCacheErrorHandler.java | Redis cache 오류 로깅/분류 로직 개선 |
| src/main/java/until/the/eternity/config/CacheStartupWarmupRunner.java | 앱 시작 시 캐시 warmup 추가 |
| src/main/java/until/the/eternity/common/util/SegongOptionParser.java | import 정리 |
| src/main/java/until/the/eternity/common/util/CacheKeyBuilder.java | 캐시 키 생성 유틸 추가(핵심 변경) |
| src/main/java/until/the/eternity/common/response/PageResponseDto.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/common/response/ApiResponse.java | import 정리 |
| src/main/java/until/the/eternity/common/filter/GatewayAuthFilter.java | import 정리 |
| src/main/java/until/the/eternity/common/exception/GlobalExceptionHandler.java | static import 정리 |
| src/main/java/until/the/eternity/common/exception/GlobalExceptionCode.java | static import 정리 |
| src/main/java/until/the/eternity/common/enums/UserRole.java | import 순서 정리 |
| src/main/java/until/the/eternity/common/enums/SortField.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/common/enums/SortDirection.java | import 정리 |
| src/main/java/until/the/eternity/common/enums/ItemCategory.java | import 순서 정리 |
| src/main/java/until/the/eternity/common/aspect/BatchExecutionLoggingAspect.java | import 정리 |
| src/main/java/until/the/eternity/common/annotation/MetalwareParameters.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/common/annotation/BatchLog.java | import 정리 |
| src/main/java/until/the/eternity/batchlog/interfaces/rest/dto/response/BatchExecutionLogResponse.java | import 정리 |
| src/main/java/until/the/eternity/batchlog/interfaces/rest/controller/BatchExecutionLogController.java | import 정리 |
| src/main/java/until/the/eternity/batchlog/infrastructure/persistence/BatchExecutionLogRepositoryPortImpl.java | import 정리 |
| src/main/java/until/the/eternity/batchlog/infrastructure/persistence/BatchExecutionLogJpaRepository.java | import 정리 |
| src/main/java/until/the/eternity/batchlog/domain/repository/BatchExecutionLogRepositoryPort.java | import 정리 |
| src/main/java/until/the/eternity/batchlog/domain/entity/BatchExecutionLog.java | import 정리 |
| src/main/java/until/the/eternity/batchlog/application/service/BatchExecutionLogService.java | import 정리 |
| src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/dto/response/SearchOptionMetadataResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/dto/response/FieldMetadata.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/AuctionSearchOptionController.java | import 정리 |
| src/main/java/until/the/eternity/auctionsearchoption/infrastructure/persistence/AuctionSearchOptionRepositoryPortImpl.java | import 정리 |
| src/main/java/until/the/eternity/auctionsearchoption/infrastructure/persistence/AuctionSearchOptionJpaRepository.java | import 정리 |
| src/main/java/until/the/eternity/auctionsearchoption/domain/repository/AuctionSearchOptionRepositoryPort.java | import 정리 |
| src/main/java/until/the/eternity/auctionsearchoption/domain/entity/AuctionSearchOptionMetadata.java | import 정리 |
| src/main/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionService.java | 캐시 키를 CacheKeyBuilder(all)로 통일 |
| src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/response/AuctionRealtimeDetailResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/request/RealtimeSortField.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/request/DateAuctionExpireRequest.java | 만료일 범위 요청 DTO 추가 |
| src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/request/AuctionRealtimeSearchRequest.java | 만료일 조건 필드 추가 |
| src/main/java/until/the/eternity/auctionrealtime/interfaces/external/dto/OpenApiAuctionRealtimeResponse.java | import 정리 |
| src/main/java/until/the/eternity/auctionrealtime/interfaces/external/dto/OpenApiAuctionRealtimeListResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeQueryDslRepository.java | 기본/고급 필터 분리 및 만료일 범위 조건 반영 |
| src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeItemRepositoryPortImpl.java | import 정리 |
| src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeItemRepository.java | import 정리 |
| src/main/java/until/the/eternity/auctionrealtime/domain/service/persister/AuctionRealtimePersisterPort.java | import 정리 |
| src/main/java/until/the/eternity/auctionrealtime/domain/service/fetcher/AuctionRealtimeFetcherPort.java | import 정리 |
| src/main/java/until/the/eternity/auctionrealtime/domain/repository/AuctionRealtimeItemRepositoryPort.java | import 정리 |
| src/main/java/until/the/eternity/auctionrealtime/domain/mapper/OpenApiAuctionRealtimeMapper.java | import 정리 |
| src/main/java/until/the/eternity/auctionrealtime/domain/mapper/AuctionRealtimeMapper.java | import 정리 |
| src/main/java/until/the/eternity/auctionrealtime/application/service/persister/AuctionRealtimePersister.java | import 정리 |
| src/main/java/until/the/eternity/auctionrealtime/application/service/fetcher/AuctionRealtimeFetcher.java | import 정리 |
| src/main/java/until/the/eternity/auctionrealtime/application/service/AuctionRealtimeService.java | 캐시 키 통일 및 cache condition 보강 |
| src/main/java/until/the/eternity/auctionrealtime/application/scheduler/AuctionRealtimeScheduler.java | import 정리 |
| src/main/java/until/the/eternity/auctionitemoption/domain/entity/AuctionHistoryItemOption.java | import 정리 |
| src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionRealtimeItemOption.java | import 정리 |
| src/main/java/until/the/eternity/auctionitem/domain/entity/AuctionRealtimeItem.java | import 순서 정리 |
| src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/response/AuctionHistoryDetailResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/request/AuctionHistorySearchRequest.java | 기본 날짜 범위 디폴트 부여(최근 1개월) |
| src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/enums/SortDirection.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/enums/SearchStandard.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/auctionhistory/interfaces/external/dto/OpenApiAuctionHistoryResponse.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/interfaces/external/dto/OpenApiAuctionHistoryListResponse.java | import 구분(개행) 정리 |
| src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryRepositoryPortImpl.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryQueryDslRepository.java | 기본/고급 필터 분리(옵션/인챈트/세공) |
| src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryJpaRepository.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/domain/service/persister/AuctionHistoryPersisterPort.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/domain/service/fetcher/AuctionHistoryFetcherPort.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/domain/service/AuctionHistoryDuplicateChecker.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/domain/repository/AuctionHistoryRepositoryPort.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/domain/mapper/OpenApiAuctionHistoryMapper.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/domain/mapper/AuctionHistoryMapper.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/domain/event/AuctionHistorySavedEvent.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/domain/entity/AuctionHistory.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersister.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcher.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryService.java | 캐시 키를 CacheKeyBuilder로 통일 |
| src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryCacheWarmupService.java | warmup 메서드 보강 및 startup warmup 메서드 추가(충돌 마커 포함) |
| src/main/java/until/the/eternity/auctionhistory/application/scheduler/AuctionHistoryScheduler.java | import 정리 |
| docker-compose-prod.yml | Redis 환경변수 전달 추가 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @ConditionalOnProperty( | ||
| name = "app.cache.warmup.enabled", | ||
| havingValue = "true", | ||
| matchIfMissing = true) |
There was a problem hiding this comment.
Startup warmup이 matchIfMissing = true로 기본 활성화되어 있습니다. 여러 인스턴스/환경에서 예기치 않게 부팅 시 대량 쿼리를 유발할 수 있으니 기본값은 비활성화(matchIfMissing=false)로 두고, 필요한 환경에서만 명시적으로 켜는 설정으로 바꾸는 것을 권장합니다.
| tryWarm("auction-history", auctionHistoryCacheWarmupService::evictAndWarm); | ||
| tryWarm("auction-realtime", this::warmAuctionRealtime); |
There was a problem hiding this comment.
Startup warmup에서 auctionHistoryCacheWarmupService::evictAndWarm를 호출하면 Redis가 공유 캐시인 환경에서(멀티 인스턴스/롤링 배포) 한 인스턴스 재기동만으로도 전체 캐시를 비우는 부작용이 생길 수 있습니다. 부팅 시에는 eviction 없이 warmup만 수행하도록 warmupForStartup()(또는 별도 non-evict warmup)을 호출하거나, 리더 인스턴스에서만 eviction이 수행되도록 락/리더선출을 추가하는 쪽이 안전합니다.
| decorator: | ||
| datasource: | ||
| p6spy: | ||
| enable-logging: false | ||
| enable-logging: true |
There was a problem hiding this comment.
decorator.datasource.p6spy.enable-logging이 true로 고정되어 있어 SQL 로그가 항상 출력됩니다. application-sample.yml에서는 false로 되어 있고, 운영에서 활성화되면 성능 저하/로그 노이즈/민감정보 노출 위험이 커지므로 기본값을 false로 두고 필요 시 환경변수로만 켜도록 변경하는 것이 안전합니다.
| public final class CacheKeyBuilder { | ||
|
|
||
| private CacheKeyBuilder() {} | ||
|
|
||
| public static String all() { | ||
| return "all"; | ||
| } | ||
|
|
||
| public static String byText(String value) { | ||
| return normalize(value); | ||
| } | ||
|
|
||
| public static String byLimit(int limit) { | ||
| return String.valueOf(limit); | ||
| } | ||
|
|
||
| public static String pageable(Pageable pageable) { | ||
| return pageable.getPageNumber() + ":" + pageable.getPageSize() + ":" + pageable.getSort(); | ||
| } | ||
|
|
||
| public static String buildItemInfoDetailKey(ItemInfoSearchRequest request, Pageable pageable) { | ||
| return normalize(request.name()) | ||
| + ":" | ||
| + normalize(request.topCategory()) | ||
| + ":" | ||
| + normalize(request.subCategory()) | ||
| + ":" | ||
| + pageable.getPageNumber() | ||
| + ":" | ||
| + pageable.getPageSize() | ||
| + ":" | ||
| + pageable.getSort(); | ||
| } |
There was a problem hiding this comment.
CacheKeyBuilder가 여러 @Cacheable key 생성의 단일 진실 소스가 되었는데, 현재는 출력 포맷/정규화 규칙을 검증하는 테스트가 없습니다. 키 포맷 변경은 캐시 miss 폭증이나 충돌로 이어질 수 있으니, 주요 메서드들(all/byText/pageable/각 build*Key)에 대한 단위 테스트를 추가해 출력이 고정됨을 보장해 주세요.
…ker 제거 Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
📋 상세 설명
📊 체크리스트
테스트 코드 미작성이슈 미등록