Skip to content

Commit 66e28b4

Browse files
authored
Merge pull request #307 from CELEBIT/develop
Develop
2 parents c83814e + 45e39f8 commit 66e28b4

19 files changed

Lines changed: 390 additions & 350 deletions

File tree

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,18 @@
126126
<summary> 본문 확인 (👈 Click)</summary>
127127
<br />
128128

129-
<img width="700" alt="arch" src="https://github.com/user-attachments/assets/6435a6ff-3fa4-492d-a785-441af26d1074">
129+
### Service Architecture
130+
<br />
131+
<img width="700" alt="service-arch" src="https://github.com/user-attachments/assets/db2bf0c8-8c22-4439-9d6c-054fe638a159">
132+
133+
<br />
134+
135+
### CD Pipe-Line Architecture
136+
137+
<br />
138+
<img width="700" alt="cd-arch" src="https://github.com/user-attachments/assets/a49b8077-9b1e-4cbe-a180-c39f67940561">
139+
140+
130141

131142
</details>
132143

build.gradle

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,6 @@ subprojects {
1515
version = '0.0.1-SNAPSHOT'
1616
sourceCompatibility = '17'
1717

18-
// java {
19-
// toolchain {
20-
// languageVersion = JavaLanguageVersion.of(17)
21-
// }
22-
// }
23-
2418
apply plugin: 'java'
2519
apply plugin: 'java-library'
2620
apply plugin: 'org.springframework.boot'

sluv-api/src/main/java/com/sluv/api/auth/controller/AuthController.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import com.sluv.common.annotation.CurrentUserId;
1414
import com.sluv.domain.auth.enums.SnsType;
1515
import com.sluv.domain.user.entity.User;
16-
import com.sluv.infra.cache.CacheService;
16+
import com.sluv.infra.counter.visit.VisitCounter;
1717
import io.swagger.v3.oas.annotations.Operation;
1818
import lombok.RequiredArgsConstructor;
1919
import org.springframework.http.ResponseEntity;
@@ -29,7 +29,7 @@ public class AuthController {
2929
private final GoogleUserService googleUserService;
3030
private final AppleUserService appleUserService;
3131
private final AuthService authService;
32-
private final CacheService cacheService;
32+
private final VisitCounter visitCounter;
3333

3434

3535
@Operation(summary = "소셜 로그인", description = "KAKAO:[AccessToken], GOOGLE, APPLE: [IdToken]")
@@ -45,7 +45,7 @@ public ResponseEntity<SuccessDataResponse<AuthResponse>> socialLogin(@RequestBod
4545
case APPLE -> loginUser = appleUserService.appleLogin(request);
4646
}
4747

48-
cacheService.visitMember(loginUser.getId());
48+
visitCounter.countVisit(loginUser.getId());
4949

5050
AuthResponse response = authService.getAuthResDto(loginUser);
5151
return ResponseEntity.ok().body(SuccessDataResponse.create(response));
@@ -55,7 +55,7 @@ public ResponseEntity<SuccessDataResponse<AuthResponse>> socialLogin(@RequestBod
5555
@Operation(summary = "*자동 로그인", description = "토큰 만료 시 error code : 4002")
5656
@GetMapping("/auto-login")
5757
public ResponseEntity<SuccessDataResponse<AutoLoginResponse>> autoLogin(@CurrentUserId Long userId) {
58-
cacheService.visitMember(userId);
58+
visitCounter.countVisit(userId);
5959
User user = authService.findLogInUser(userId);
6060
// authService.checkFcm(user);
6161
AutoLoginResponse response = AutoLoginResponse.of(user);
@@ -66,7 +66,7 @@ public ResponseEntity<SuccessDataResponse<AutoLoginResponse>> autoLogin(@Current
6666
@PostMapping("/auto-login")
6767
public ResponseEntity<SuccessDataResponse<AutoLoginResponse>> autoLoginWithFcm(@CurrentUserId Long userId,
6868
@Nullable @RequestBody AutoLoginRequest request) {
69-
cacheService.visitMember(userId);
69+
visitCounter.countVisit(userId);
7070
if (request != null) {
7171
authService.changeFcm(userId, request.getFcm());
7272
}

sluv-api/src/main/java/com/sluv/api/item/service/ItemCacheService.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.sluv.api.item.service;
22

3+
import com.sluv.api.item.dto.ItemDetailFixData;
34
import com.sluv.domain.item.entity.Item;
45
import com.sluv.domain.item.service.ItemDomainService;
56
import com.sluv.infra.cache.CacheService;
@@ -14,7 +15,9 @@
1415
@RequiredArgsConstructor
1516
public class ItemCacheService {
1617
private final ItemDomainService itemDomainService;
17-
private final CacheService cacheService;
18+
private final CacheService<ItemDetailFixData> cacheService;
19+
20+
private final String ITEM_KEY_PREFIX = "item:";
1821

1922
@Transactional
2023
@Async(value = "asyncThreadPoolExecutor")
@@ -24,7 +27,7 @@ public void deleteAllItemCacheByUserId(Long userId) {
2427
.map(Item::getId)
2528
.toList();
2629

27-
userItemIds.forEach(cacheService::deleteItemDetailFixDataByItemId);
30+
userItemIds.forEach((userItemId) -> cacheService.deleteByKey(ITEM_KEY_PREFIX + userItemId));
2831
}
2932

3033
}

sluv-api/src/main/java/com/sluv/api/item/service/ItemService.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.sluv.infra.ai.AiModelService;
3636
import com.sluv.infra.alarm.service.ItemAlarmService;
3737
import com.sluv.infra.cache.CacheService;
38+
import com.sluv.infra.counter.view.ViewCounter;
3839
import lombok.RequiredArgsConstructor;
3940
import lombok.extern.slf4j.Slf4j;
4041
import org.springframework.data.domain.Page;
@@ -73,16 +74,19 @@ public class ItemService {
7374
private final ItemScrapDomainService itemScrapDomainService;
7475

7576
private final AiModelService aiModelService;
76-
private final CacheService cacheService;
77+
private final CacheService<ItemDetailFixData> cacheService;
78+
private final ViewCounter viewCounter;
7779
private final ItemAlarmService itemAlarmService;
7880
private final ItemHelper itemHelper;
7981

82+
private final String ITEM_KEY_PREFIX = "item:";
83+
8084
@Transactional
8185
public ItemPostResDto postItem(Long userId, ItemPostReqDto reqDto) {
8286
User user = userDomainService.findById(userId);
8387

8488
if (reqDto.getId() != null) {
85-
cacheService.deleteItemDetailFixDataByItemId(reqDto.getId());
89+
cacheService.deleteByKey(ITEM_KEY_PREFIX + reqDto.getId());
8690
}
8791

8892
// 추가될 Celeb 확인
@@ -184,10 +188,10 @@ public ItemDetailResDto getItemDetail(Long userId, Long itemId) {
184188
}
185189

186190
// 2. Item Detail 고정 데이터 조회 -> Cache Aside
187-
ItemDetailFixData fixData = (ItemDetailFixData) cacheService.findItemDetailFixDataByItemId(itemId);
191+
ItemDetailFixData fixData = cacheService.findByKey(ITEM_KEY_PREFIX + itemId);
188192
if (fixData == null) {
189193
fixData = getItemDetailFixData(item);
190-
cacheService.saveItemDetailFixData(itemId, fixData);
194+
cacheService.saveWithKey(ITEM_KEY_PREFIX + itemId, fixData);
191195
}
192196

193197
// 3. 좋아요 수
@@ -243,14 +247,13 @@ public ItemDetailResDto getItemDetail(Long userId, Long itemId) {
243247
}
244248

245249
private void increaseViewNum(Long userId, Item item) {
246-
boolean isExist = cacheService.existUserViewItemId(userId, item.getId());
250+
boolean isExist = viewCounter.existUserViewItemId(userId, item.getId());
247251
if (!isExist) {
248-
cacheService.saveUserViewItemId(userId, item.getId());
252+
viewCounter.saveUserViewItemId(userId, item.getId());
249253
item.increaseViewNum();
250254
}
251255
}
252256

253-
// @Cacheable(cacheNames = "item", key = "#itemId")
254257
@Transactional
255258
public ItemDetailFixData getItemDetailFixData(Item item) {
256259
Long itemId = item.getId();
@@ -314,7 +317,7 @@ public void deleteItem(Long itemId) {
314317

315318
item.changeStatus(ItemStatus.DELETED);
316319
itemDomainService.saveItem(item);
317-
cacheService.deleteItemDetailFixDataByItemId(itemId);
320+
cacheService.deleteByKey(ITEM_KEY_PREFIX + itemId);
318321
}
319322

320323
@Transactional(readOnly = true)

sluv-api/src/main/java/com/sluv/api/question/service/QuestionService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import com.sluv.domain.user.entity.User;
2727
import com.sluv.domain.user.service.UserDomainService;
2828
import com.sluv.infra.alarm.service.QuestionAlarmService;
29-
import com.sluv.infra.cache.CacheService;
29+
import com.sluv.infra.counter.view.ViewCounter;
3030
import lombok.RequiredArgsConstructor;
3131
import lombok.extern.slf4j.Slf4j;
3232
import org.springframework.data.domain.Page;
@@ -58,7 +58,7 @@ public class QuestionService {
5858
private final QuestionVoteDomainService questionVoteDomainService;
5959
private final UserDomainService userDomainService;
6060

61-
private final CacheService cacheService;
61+
private final ViewCounter viewCounter;
6262
private final QuestionAlarmService questionAlarmService;
6363

6464

@@ -405,9 +405,9 @@ public QuestionGetDetailResDto getQuestionDetail(Long nowUserId, Long questionId
405405
}
406406

407407
private void increaseQuestionViewNum(Long userId, Question question) {
408-
boolean isExist = cacheService.existUserViewQuestionId(userId, question.getId());
408+
boolean isExist = viewCounter.existUserViewQuestionId(userId, question.getId());
409409
if (!isExist) {
410-
cacheService.saveUserViewQuestionId(userId, question.getId());
410+
viewCounter.saveUserViewQuestionId(userId, question.getId());
411411
question.increaseSearchNum();
412412
}
413413
}

0 commit comments

Comments
 (0)