Skip to content

Commit e89e5c4

Browse files
committed
refactor: 랭킹 코드 불필요한 주석 정리
1 parent ee508d0 commit e89e5c4

3 files changed

Lines changed: 10 additions & 94 deletions

File tree

apps/commerce-api/src/main/java/com/loopers/application/ranking/RankingFacade.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,7 @@ public class RankingFacade {
3434
private final ProductRepository productRepository;
3535
private final BrandRepository brandRepository;
3636

37-
/**
38-
* 랭킹 페이지 조회
39-
* @param date 날짜 (yyyyMMdd), null이면 오늘
40-
* @param page 페이지 번호 (0-based)
41-
* @param size 페이지 크기
42-
* @return 랭킹 페이지 정보
43-
*/
37+
/** @param page 0-based */
4438
public RankingPageInfo getRankings(String date, int page, int size) {
4539
// 날짜 검증 및 기본값 처리
4640
String targetDate = validateAndNormalizeDate(date);
@@ -101,12 +95,7 @@ public RankingPageInfo getRankings(String date, int page, int size) {
10195
return RankingPageInfo.of(rankings, targetDate, page, size, totalCount);
10296
}
10397

104-
/**
105-
* 날짜 파라미터 검증 및 정규화
106-
* @param date 날짜 문자열 (yyyyMMdd 형식) 또는 null
107-
* @return 검증된 날짜 문자열 (null이면 오늘 날짜)
108-
* @throws IllegalArgumentException 유효하지 않은 날짜 형식
109-
*/
98+
/** @throws IllegalArgumentException 유효하지 않은 날짜 형식 */
11099
private String validateAndNormalizeDate(String date) {
111100
if (date == null || date.isBlank()) {
112101
return productRankingCache.getTodayDate();

apps/commerce-api/src/main/java/com/loopers/infrastructure/cache/ProductRankingCache.java

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,12 @@ public class ProductRankingCache {
2929

3030
private final RedisTemplate<String, Object> cacheRedisTemplate;
3131

32-
/**
33-
* 상품의 오늘 날짜 기준 순위 조회
34-
* @param productId 상품 ID
35-
* @return 순위 (1-based), 순위권 밖이면 null
36-
*/
32+
/** @return 순위 (1-based), 순위권 밖이면 null */
3733
public Integer getRank(Long productId) {
3834
return getRank(productId, getTodayDate());
3935
}
4036

41-
/**
42-
* 상품의 특정 날짜 순위 조회
43-
* @param productId 상품 ID
44-
* @param date 날짜 (yyyyMMdd 형식)
45-
* @return 순위 (1-based), 순위권 밖이면 null
46-
*/
37+
/** @return 순위 (1-based), 순위권 밖이면 null */
4738
public Integer getRank(Long productId, String date) {
4839
try {
4940
String key = CacheKeyGenerator.dailyRankingKey(date);
@@ -65,18 +56,10 @@ public Integer getRank(Long productId, String date) {
6556
}
6657
}
6758

68-
/**
69-
* 상품의 점수 조회
70-
* @param productId 상품 ID
71-
* @return 점수, 없으면 null
72-
*/
7359
public Double getScore(Long productId) {
7460
return getScore(productId, getTodayDate());
7561
}
7662

77-
/**
78-
* 상품의 특정 날짜 점수 조회
79-
*/
8063
public Double getScore(Long productId, String date) {
8164
try {
8265
String key = CacheKeyGenerator.dailyRankingKey(date);
@@ -88,20 +71,11 @@ public Double getScore(Long productId, String date) {
8871
}
8972
}
9073

91-
/**
92-
* 오늘 날짜 문자열 반환 (Asia/Seoul 기준)
93-
*/
9474
public String getTodayDate() {
9575
return LocalDate.now(ZONE_ID).format(DATE_FORMATTER);
9676
}
9777

98-
/**
99-
* 랭킹 상위 목록 조회 (페이지네이션)
100-
* @param date 날짜 (yyyyMMdd 형식)
101-
* @param page 페이지 번호 (0-based)
102-
* @param size 페이지 크기
103-
* @return 상품 ID와 점수 목록 (순위 높은 순)
104-
*/
78+
/** @param page 0-based */
10579
public List<RankingEntry> getTopRankings(String date, int page, int size) {
10680
try {
10781
String key = CacheKeyGenerator.dailyRankingKey(date);
@@ -134,9 +108,6 @@ public List<RankingEntry> getTopRankings(String date, int page, int size) {
134108
}
135109
}
136110

137-
/**
138-
* 전체 랭킹 수 조회
139-
*/
140111
public long getTotalCount(String date) {
141112
try {
142113
String key = CacheKeyGenerator.dailyRankingKey(date);
@@ -148,8 +119,5 @@ public long getTotalCount(String date) {
148119
}
149120
}
150121

151-
/**
152-
* 랭킹 엔트리 (순위, 상품ID, 점수)
153-
*/
154122
public record RankingEntry(int rank, Long productId, Double score) {}
155123
}

apps/commerce-streamer/src/main/java/com/loopers/infrastructure/cache/ProductRankingCache.java

Lines changed: 5 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -45,44 +45,26 @@ public ProductRankingCache(RedisTemplate<String, Object> cacheRedisTemplate, Ran
4545
this.rankingConfig = rankingConfig;
4646
}
4747

48-
/**
49-
* 조회 이벤트 점수 추가
50-
*/
5148
public void addViewScore(Long productId) {
5249
double score = rankingConfig.getWeight().getView();
5350
incrementScore(productId, score);
5451
log.debug("[Ranking] View score added - productId: {}, score: {}", productId, score);
5552
}
5653

57-
/**
58-
* 좋아요 이벤트 점수 추가
59-
*/
6054
public void addLikeScore(Long productId) {
6155
double score = rankingConfig.getWeight().getLike();
6256
incrementScore(productId, score);
6357
log.debug("[Ranking] Like score added - productId: {}, score: {}", productId, score);
6458
}
6559

66-
/**
67-
* 좋아요 취소 이벤트 점수 감소
68-
* - 좋아요 추가와 동일한 가중치만큼 감소
69-
* - 점수가 0 이하가 되어도 ZSET에서 자동 제거되지 않음 (일관성 유지)
70-
*/
60+
/** 점수가 0 이하가 되어도 ZSET에서 자동 제거되지 않음 (일관성 유지) */
7161
public void subtractLikeScore(Long productId) {
7262
double score = rankingConfig.getWeight().getLike();
7363
decrementScore(productId, score);
7464
log.debug("[Ranking] Like score subtracted - productId: {}, score: -{}", productId, score);
7565
}
7666

77-
/**
78-
* 주문 이벤트 점수 추가
79-
* - log 정규화를 적용하여 고가 상품의 과도한 점수 편중 방지
80-
* - Math.log1p(x) = ln(1 + x)로 안전하게 계산
81-
*
82-
* @param productId 상품 ID
83-
* @param price 상품 단가
84-
* @param quantity 주문 수량
85-
*/
67+
/** log 정규화로 고가 상품의 과도한 점수 편중 방지: log1p(price * qty) */
8668
public void addOrderScore(Long productId, long price, int quantity) {
8769
double weight = rankingConfig.getWeight().getOrder();
8870
long orderAmount = price * quantity;
@@ -94,12 +76,7 @@ public void addOrderScore(Long productId, long price, int quantity) {
9476
productId, price, quantity, orderAmount, score);
9577
}
9678

97-
/**
98-
* 주문 아이템 배치 점수 추가 (Pipeline 사용)
99-
* - 여러 아이템을 한 번의 Redis 요청으로 처리하여 네트워크 오버헤드 감소
100-
*
101-
* @param orderItems 주문 아이템 목록 (productId -> OrderItemScore)
102-
*/
79+
/** Pipeline으로 여러 아이템을 한 번의 Redis 요청으로 처리 */
10380
public void addOrderScoresBatch(List<OrderItemScore> orderItems) {
10481
if (orderItems == null || orderItems.isEmpty()) {
10582
return;
@@ -136,14 +113,8 @@ public Object execute(RedisOperations operations) throws DataAccessException {
136113
}
137114
}
138115

139-
/**
140-
* 주문 아이템 점수 정보
141-
*/
142116
public record OrderItemScore(Long productId, long price, int quantity) {}
143117

144-
/**
145-
* ZSET 점수 증가 (ZINCRBY)
146-
*/
147118
private void incrementScore(Long productId, double score) {
148119
try {
149120
String key = getTodayKey();
@@ -155,9 +126,6 @@ private void incrementScore(Long productId, double score) {
155126
}
156127
}
157128

158-
/**
159-
* ZSET 점수 감소 (ZINCRBY with negative value)
160-
*/
161129
private void decrementScore(Long productId, double score) {
162130
try {
163131
String key = getTodayKey();
@@ -170,10 +138,7 @@ private void decrementScore(Long productId, double score) {
170138
}
171139
}
172140

173-
/**
174-
* TTL 설정 (원자적 처리)
175-
* getAndSet으로 키 변경 시에만 TTL 설정 (날짜가 바뀌는 경우)
176-
*/
141+
/** getAndSet으로 키 변경 시에만 TTL 설정 (날짜가 바뀌는 시점) */
177142
private void ensureTtl(String key) {
178143
String oldKey = ttlInitializedKey.getAndSet(key);
179144
if (!key.equals(oldKey)) {
@@ -182,18 +147,12 @@ private void ensureTtl(String key) {
182147
}
183148
}
184149

185-
/**
186-
* 오늘 날짜 키 생성 (Asia/Seoul 기준)
187-
* CacheKeyGenerator를 사용하여 commerce-api와 동일한 키 형식 보장
188-
*/
150+
/** Asia/Seoul 기준, commerce-api와 동일한 키 형식 */
189151
private String getTodayKey() {
190152
String date = LocalDate.now(ZONE_ID).format(DATE_FORMATTER);
191153
return CacheKeyGenerator.dailyRankingKey(date);
192154
}
193155

194-
/**
195-
* 특정 날짜 키 생성
196-
*/
197156
public static String getKeyForDate(String date) {
198157
return CacheKeyGenerator.dailyRankingKey(date);
199158
}

0 commit comments

Comments
 (0)