Skip to content

대여 신청 재고 차감 낙관적 락 적용 #93

Description

@tnals0924

어떤 기능인가요?

추가하려는 기능에 대해 간결하게 설명해주세요

대여 신청(POST /v1/app/billilge/histories)의 재고 차감에 낙관적 락을 적용한다.

508b16b에서 비관적 락을 뺀 뒤로는 재고 차감에 동시성 보호가 없어서, 같은 물품에 신청이 동시에 들어오면 재고가 음수가 되거나 차감 하나가 사라질 수 있다. 버전 컬럼 없는 낙관적 락(Hibernate OptimisticLockType.DIRTY)으로 충돌을 감지하고, core:common의 LockExecutor가 시도마다 새 트랜잭션을 열어 재시도한다.

feat/#74-billilge-rental-apply-return(PR #75) 위에서 이어간다.

📝 작업 상세 내용

  • core:common에 spring-context·spring-tx 의존 허용, LockExecutor 추가 (시도마다 새 트랜잭션, 낙관적 락 충돌만 최대 3회 재시도)
  • CommonErrorCode.OPTIMISTIC_LOCK_CONFLICT(409) 추가
  • ItemJpaEntity에 @DynamicUpdate + @OptimisticLocking(type = DIRTY) 적용
  • RentalApplyUseCase의 @Transactional을 떼고 LockExecutor로 감싸기
  • 테스트: LockExecutor 단위 테스트, 물품 낙관적 락 MySQL 통합 테스트(Testcontainers), 대여 신청 동시성 테스트
  • 컨벤션 문서 반영 (architecture.md, coding-style.md, 00-index.md)

📁 참고 자료 (선택)

  • 계획서: docs/plans/rental-stock-optimistic-lock.md (로컬, gitignore 대상)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    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