코드에 명시되어 있는 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();
}