perf: 조회 API 성능 개선을 위한 캐싱 추가 적용 및 인덱스 추가#116
Merged
Merged
Conversation
✅ 테스트 결과 for PRBuild: success 🧪 테스트 실행 with Gradle |
Contributor
There was a problem hiding this comment.
Pull request overview
조회(Read) API의 p99 지연을 낮추기 위해 DB 인덱스 보강, Redis 캐싱(sync=true로 stampede 방지), 캐시 워밍업(배치 후/기동 시), 그리고 일부 정적성 높은 API에 HTTP Cache-Control을 추가한 PR입니다.
Changes:
- p99 타겟 조회 쿼리 패턴에 맞춘 인덱스 추가(Flyway + 일부 Entity 인덱스 반영)
- 랭킹/통계/메타데이터성 조회에
@Cacheable(sync=true)적용 및 기동/배치 후 캐시 워밍업 로직 추가 - 통계 조회 일부를 DTO 프로젝션으로 변경해 조회 비용(엔티티 로딩/매핑)을 절감하고, 일부 컨트롤러에 HTTP 캐시 헤더 추가
Reviewed changes
Copilot reviewed 175 out of 175 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/main/resources/db/migration/V28__add_p99_read_api_indexes.sql | p99 조회 API 최적화용 인덱스 추가 |
| src/main/resources/db/migration/V29__add_next_p99_read_api_indexes.sql | 추가 p99 조회 API 최적화용 인덱스 추가(조건부 생성) |
| src/main/resources/db/migration/V30__add_remaining_p99_read_api_indexes.sql | 잔여 p99 조회 API 최적화용 인덱스 추가(조건부 생성) |
| src/main/java/until/the/eternity/statistics/service/DailyStatisticsService.java | 통계 저장 후 조회 캐시 워밍업(비동기 + 커밋 후 실행) 추가 |
| src/main/java/until/the/eternity/statistics/repository/weekly/TopCategoryWeeklyStatisticsRepository.java | 주간 탑카테고리 조회 정렬 기준을 weekStartDate로 변경 |
| src/main/java/until/the/eternity/statistics/repository/weekly/SubcategoryWeeklyStatisticsRepository.java | import 정리 |
| src/main/java/until/the/eternity/statistics/repository/weekly/ItemWeeklyStatisticsRepository.java | 주간 아이템 통계 조회를 DTO 프로젝션으로 변경 + 정렬 최적화 |
| src/main/java/until/the/eternity/statistics/repository/daily/TopCategoryDailyStatisticsRepository.java | 일간 탑카테고리 통계 조회를 DTO 프로젝션으로 변경 |
| src/main/java/until/the/eternity/statistics/repository/daily/SubcategoryDailyStatisticsRepository.java | import 정리 |
| src/main/java/until/the/eternity/statistics/repository/daily/ItemDailyStatisticsRepository.java | 일간 아이템 통계 조회를 DTO 프로젝션으로 변경 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/TopCategoryWeeklyStatisticsResponse.java | import/format 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/TopCategoryDailyStatisticsResponse.java | import/format 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/SubcategoryWeeklyStatisticsResponse.java | import/format 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/SubcategoryDailyStatisticsResponse.java | import/format 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/ItemWeeklyStatisticsResponse.java | import/format 정리 |
| src/main/java/until/the/eternity/statistics/interfaces/rest/dto/response/ItemDailyStatisticsResponse.java | import/format 정리 |
| 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 | 인덱스 정의 보강(week_start_date 포함) + 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 | @Cacheable(sync=true) 적용 |
| src/main/java/until/the/eternity/statistics/application/service/TopCategoryDailyStatisticsService.java | @Cacheable(sync=true) 적용 + 매핑 제거(레포에서 DTO 반환) |
| src/main/java/until/the/eternity/statistics/application/service/SubcategoryWeeklyStatisticsService.java | @Cacheable(sync=true) 및 캐시 키 변경(탑카테고리 포함) |
| src/main/java/until/the/eternity/statistics/application/service/SubcategoryDailyStatisticsService.java | @Cacheable(sync=true) 및 캐시 키 변경(탑카테고리 포함) |
| src/main/java/until/the/eternity/statistics/application/service/ItemWeeklyStatisticsService.java | @Cacheable(sync=true) 적용 + 매핑 제거(레포에서 DTO 반환) |
| src/main/java/until/the/eternity/statistics/application/service/ItemDailyStatisticsService.java | @Cacheable(sync=true) 적용 + 매핑 제거(레포에서 DTO 반환) |
| src/main/java/until/the/eternity/ranking/repository/RankingRepository.java | 카테고리 랭킹 쿼리 분리(상위카테고리만 vs 상/하위) + tie-breaker 정렬 보강 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/VolumeRankingResponse.java | import/format 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/VolumeChangeRankingResponse.java | import/format 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/PriceRankingResponse.java | import/format 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/PriceChangeRankingResponse.java | import/format 정리 |
| src/main/java/until/the/eternity/ranking/interfaces/rest/dto/response/AllTimeRankingResponse.java | import/format 정리 |
| 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 | @Cacheable(sync=true) 적용 |
| src/main/java/until/the/eternity/ranking/application/service/PriceRankingService.java | import 정리 |
| src/main/java/until/the/eternity/ranking/application/service/PriceChangeRankingService.java | @Cacheable(sync=true) 적용 |
| src/main/java/until/the/eternity/ranking/application/service/CategoryRankingService.java | subCategory 유무에 따라 쿼리 분기 + @Cacheable(sync=true) 적용 |
| src/main/java/until/the/eternity/ranking/application/service/AllTimeRankingService.java | @Cacheable(sync=true) 적용 |
| 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 | HTTP Cache-Control(6h) 적용 + ResponseEntity로 변경 |
| src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoRepositoryPortImpl.java | import 정리 |
| src/main/java/until/the/eternity/metalwareinfo/infrastructure/persistence/MetalwareInfoJpaRepository.java | 조회 정렬 추가(ORDER BY) |
| src/main/java/until/the/eternity/metalwareinfo/application/service/MetalwareInfoService.java | @Cacheable(sync=true) 적용 |
| 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 | 카테고리 응답을 static 캐싱으로 변경(불필요한 매 요청 변환 제거) |
| src/main/java/until/the/eternity/iteminfo/interfaces/rest/controller/ItemInfoController.java | 카테고리 API에 HTTP Cache-Control(1d) 적용 |
| 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 | import 정리 |
| 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/format 정리 |
| src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryResponse.java | import/format 정리 |
| src/main/java/until/the/eternity/hornBugle/interfaces/external/dto/OpenApiHornBugleHistoryListResponse.java | import/format 정리 |
| 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 | 최근 목록 캐시(@Cacheable(sync=true)) + 저장 시 eviction 추가 |
| 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 정리 |
| 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 | 인덱스 추가(affix_position, id) |
| 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 | @Cacheable(sync=true) 적용 |
| src/main/java/until/the/eternity/config/RedisConfig.java | 캐시 TTL 조정(특정 도메인 6h, horn-bugle 2m) |
| src/main/java/until/the/eternity/config/RedisCacheErrorHandler.java | import 정리 |
| 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/CacheStartupWarmupRunner.java | 기동 시 캐시 워밍업 대상 확장(랭킹/통계/뿔피리 등) |
| src/main/java/until/the/eternity/config/CacheNames.java | horn-bugle 캐시 이름 추가 |
| src/main/java/until/the/eternity/common/util/SegongOptionParser.java | import 정리 |
| src/main/java/until/the/eternity/common/util/CacheKeyBuilder.java | subcategory 통계 캐시 키에 topCategory 포함 + horn-bugle 키 생성 추가 |
| src/main/java/until/the/eternity/common/response/PageResponseDto.java | import/format 정리 |
| 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/format 정리 |
| 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/format 정리 |
| 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/format 정리 |
| src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/dto/response/FieldMetadata.java | import/format 정리 |
| src/main/java/until/the/eternity/auctionsearchoption/interfaces/rest/AuctionSearchOptionController.java | HTTP Cache-Control(1d) 적용 |
| 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 | 인덱스 추가(is_active, display_order) |
| src/main/java/until/the/eternity/auctionsearchoption/application/service/AuctionSearchOptionService.java | @Cacheable(sync=true) 적용 |
| src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/response/AuctionRealtimeDetailResponse.java | import/format 정리 |
| src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/request/RealtimeSortField.java | import/format 정리 |
| src/main/java/until/the/eternity/auctionrealtime/interfaces/rest/dto/request/AuctionRealtimeSearchRequest.java | import 정리 |
| 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/format 정리 |
| src/main/java/until/the/eternity/auctionrealtime/infrastructure/persistence/AuctionRealtimeQueryDslRepository.java | import 정리 |
| 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 | import 정리 |
| 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/format 정리 |
| src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/request/AuctionHistorySearchRequest.java | import/format 정리 |
| src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/enums/SortDirection.java | import/format 정리 |
| src/main/java/until/the/eternity/auctionhistory/interfaces/rest/dto/enums/SearchStandard.java | import/format 정리 |
| 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/format 정리 |
| src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryRepositoryPortImpl.java | import 정리 |
| src/main/java/until/the/eternity/auctionhistory/infrastructure/persistence/AuctionHistoryQueryDslRepository.java | import 정리 |
| 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 | 경매 내역 조회 캐시에 sync=true 적용 |
| src/main/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryCacheWarmupService.java | 워밍업 대상에 all-time ranking 캐시 추가 |
| src/main/java/until/the/eternity/auctionhistory/application/scheduler/AuctionHistoryScheduler.java | import 정리 |
Comments suppressed due to low confidence (2)
src/main/java/until/the/eternity/statistics/application/service/SubcategoryDailyStatisticsService.java:41
SubcategoryDailyStatisticsService.search(...)now builds the cache key usingtopCategory, but the actual query only filters bysubCategory(and the underlyingSubcategoryDailyStatisticsentity/table doesn’t storetopCategory). This makes the API contract ambiguous and can also create duplicate cache entries for identical results. Either includetopCategoryin the persisted statistics/query filtering, or removetopCategoryfrom the cache key (and ideally from the request/validation) if it’s truly redundant.
src/main/java/until/the/eternity/statistics/application/service/SubcategoryWeeklyStatisticsService.java:41SubcategoryWeeklyStatisticsService.search(...)usestopCategoryas part of the cache key, but the repository method it calls only filters bysubCategory. IftopCategoryis meant to affect results (it’s required by the request DTO/controller), this will return incorrect data; if it’s redundant, including it in the cache key will fragment the cache. Align the query/model and the cache key so they reflect the same filtering dimensions.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📋 상세 설명
📊 체크리스트
이슈 미등록