Skip to content

웨이팅 등록 시 Redis 카운터 누수 문제 해결 #352

@coderabbitai

Description

@coderabbitai

문제 설명

WaitingService.registerWaiting() 메서드에서 Redis 카운터(incrementAndCheckWaitingLimit, incrementDailySequence)가 데이터베이스 저장 전에 증가되는데, DB 저장이 실패할 경우 이미 증가된 Redis 값이 롤백되지 않아 데이터 불일치가 발생합니다.

현재 동작

  1. Redis 카운터 증가 (incrementAndCheckWaitingLimit, incrementDailySequence)
  2. Reservation 엔티티 생성 및 저장
  3. DB 저장 실패 시 Redis 변경사항이 롤백되지 않음

영향

  • 사용자별 일일 웨이팅 제한 카운터가 실제보다 높게 유지됨
  • 일일 시퀀스 번호가 누락되어 웨이팅 번호에 gaps 발생

권장 해결 방안

  • Lua 스크립트를 통한 원자적 작업 구현 (ReservationService의 WaitingPermitLuaRepository 참고)
  • 또는 try-catch로 실패 시 보상 트랜잭션(감소 로직) 추가
  • 또는 Redis 작업을 DB 저장 후로 이동하여 순서 변경 검토

관련 정보

참고

코드 내 주석(line 154)에도 "웨이팅 실패 시 카운터 롤백 처리 필요"로 명시되어 있습니다.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions