-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
문제 설명
WaitingService.registerWaiting() 메서드에서 Redis 카운터(incrementAndCheckWaitingLimit, incrementDailySequence)가 데이터베이스 저장 전에 증가되는데, DB 저장이 실패할 경우 이미 증가된 Redis 값이 롤백되지 않아 데이터 불일치가 발생합니다.
현재 동작
- Redis 카운터 증가 (
incrementAndCheckWaitingLimit,incrementDailySequence) - Reservation 엔티티 생성 및 저장
- DB 저장 실패 시 Redis 변경사항이 롤백되지 않음
영향
- 사용자별 일일 웨이팅 제한 카운터가 실제보다 높게 유지됨
- 일일 시퀀스 번호가 누락되어 웨이팅 번호에 gaps 발생
권장 해결 방안
- Lua 스크립트를 통한 원자적 작업 구현 (ReservationService의 WaitingPermitLuaRepository 참고)
- 또는 try-catch로 실패 시 보상 트랜잭션(감소 로직) 추가
- 또는 Redis 작업을 DB 저장 후로 이동하여 순서 변경 검토
관련 정보
- PR: Refactor : User 웨이팅 등록 및 삭제 기능 리팩토링 #349
- 코드 리뷰 코멘트: Refactor : User 웨이팅 등록 및 삭제 기능 리팩토링 #349 (comment)
- 파일:
nowait-app-user-api/src/main/java/com/nowait/applicationuser/waiting/service/WaitingService.java(lines 81-96) - 요청자: @Jjiggu
참고
코드 내 주석(line 154)에도 "웨이팅 실패 시 카운터 롤백 처리 필요"로 명시되어 있습니다.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels