hayu's 개발 일지

[TIL]240513 코드에 명시되어 있는 status 값이 DB에 저장이 되지 않는 문제 본문

트러블슈팅

[TIL]240513 코드에 명시되어 있는 status 값이 DB에 저장이 되지 않는 문제

hayu00 2024. 5. 13. 21:56
  • 문제

코드에 명시되어 있는 status 값이 DB에 저장이 되지 않는 문제

        /* 인원이 다 찼는지 확인 */
        if (registeredCount >= totalCount) {
            log.info("모임이 가득 찼습니다: {}", meetingId);
            meeting.updateStatus();
            meetingRepository.save(meeting);
            log.info("ID가 {}인 모임의 상태를 FULL로 업데이트했습니다", meetingId);
            throw new CustomException(ErrorCode.MEETING_FULL);
        }
  • 원인

예외 처리 블록 안에 상태 변경 코드를 함께 썼기 때문에 영속성 컨택스트에는 저장이 되었지만 트랜잭션 끝나지 않아서 커밋이 되지 않고 롤백이 된 것 같다.(DB 커밋 저장과 영속성 컨택스트 저장 시점 차이)

  • 해결방안

예외 처리와 status 변경 코드를 따로 나누었다.

        if (registeredCount >= totalCount) {
            throw new CustomException(ErrorCode.MEETING_FULL);
        }

        /*모임 엔티티의 등록된 참가자 수 업데이트*/
        registeredCount = meeting.incrementRegisteredCount(); // 모임 참가자 수 증가

        /* 인원이 다 찼는지 확인 */
        if (Objects.equals(registeredCount, totalCount)) {
            meeting.updateStatus();
        }