-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
🏷️ 상위 작업 (Ticket Number)
PRODUCT-119
🚀 구현 내용
문제 상황
- 응원 저장 서비스 로직에서 "가게을 조회해서 가게가 없는 경우 상점을 저장"함
- 같은 가게에 대해 응원 저장 요청이 거이 동시에 일어나게 된다면, 500 Server Error가 발생할 수 있음
해결 방안
- 여러 동시성 해결 방안 중, 적합한 해결 방안을 찾는다.
@Service
public class CheerService {
...
@Transactional
public CheerResponse registerCheer(CheerRegisterRequest request, MultipartFile image, long memberId) {
Member member = memberRepository.getById(memberId);
validateRegisterCheer(member, request.storeKakaoId());
List<StoreSearchResult> searchResults = mapClient.searchShops(request.storeName());
StoreSearchResult result = storeSearchFilter.filterStoreByKakaoId(searchResults, request.storeKakaoId());
String imageKey = imageService.upload(image, ImageDomain.CHEER);
Store store = storeRepository.findByKakaoId(result.kakaoId())
.orElseGet(() -> storeRepository.save(result.toStore())); // TODO 상점 조회/저장 동시성 이슈 해결
Cheer cheer = cheerRepository.save(new Cheer(member, store, request.description(), imageKey));
return new CheerResponse(cheer, imageService.getPresignedUrl(imageKey), store);
}
}📅 마감일
No response