Skip to content

[PRODUCT-194] [Refactor] 상점 조회/저장 동시성 이슈 해결 #95

@leegwichan

Description

@leegwichan

🏷️ 상위 작업 (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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions