최대 1 분 소요

문제 상황

서버 api 를 클리이언트와 연동하며 문제가 발생했다.
혼자 테스트 할 때에는 잘 실행되던 api가 query did not return a unique result를 뿜었다.

문제 원인

이 글을 참고했다.

내가 진행하는 프로젝트에서는 동물 보호가 종료되면, 다시보기 컨텐츠(Record)를 생성한다.
이때 보호 종료 api를 두 번 이상 호출하지 못하도록 막았어야 했는데,
해당 예외 처리를 안하는 바람에 Record가 여러번 생성되어 충돌한 것이었다.

해결 방법

record를 여러번 생성할 수 없도록 예외 처리를 했다.

@Service
@RequiredArgsConstructor
public class ProtectionServiceImpl implements ProtectionService {
    // 보호 종료
    public void saveEndStatus(ProtectionEndReqDto protectionEndReqDto) { 
        ...
        Pet pet = findPet(protectionEndReqDto.getPet(), user);
        if (pet.getProtectionEndedAt() != null) {
            throw new CustomException(PET_PROTECTION_ALREADY_ENDED); // 👉 이미 보호가 종료된 동물은 다시보기 record를 또 생성할 수 없도록 예외 처리 로직 추가
        }
        ...

        // 다시보기 record 생성
        recordRepository.save(record);
        ...
    }
}


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기