Skip to content

[REFACTOR] Redis 를 이용한 재고 차감 #29

@oownahcohc

Description

@oownahcohc

관련 PR

PR 내용 요약

주요 변경 지점

1. 루아 스크립트

  • 음수 재고 막기
    • DECR 명령어를 쓰면 재고가 0일 때 요청이 들어오면 -1, -2로 계속 내려감 → 애플리케이션에서 재고 관련 예외("재고는 0보다 작을 수 없다")를 던져도 이미 Redis 데이터는 음수가 됨
    • 재고 의 1차 저장소로 Redis 를 사용중인 만큼, 0보다 작은 상태를 갖도록 하는 것은 재고 정합성에 맞지 않다고 생각함
    • 또한, 재고가 음수가 되어 -100 이 된 이후에 주문 취소로 인한 재고 복구 요청이 들어오면, 재고 정합성에 맞지 않게됨
    • Lua Script를 사용하면 **'현재 재고가 요청 수량보다 클 때만 차감한다'**는 If 문을 Redis 안에서 수행할 수 있어, 데이터가 음수로 떨어지는 것을 물리적으로 막을 수 있음
      → Lua Script 를 사용하지 않으면 decr 수행 이후 결과가 0 미만이면 다시 incr 을 해줘야 하는데, 선착순 주문이라는 트래픽이 몰리는 환경에서 쓸데없는 연산이 추가되는 것이므로, Lua Script 를 사용하는 것이 좋을 것으로 판단

2. StockQuantity VO 클래스

  • Stock 도메인 엔티티가, id 식별자가 null 인 상태로 생성되는 문제가 있었음
  • Integer quantity 필드를 StockQuantity VO 클래스로 매핑하여, 재고 수량에 대한 도메인 규칙을 관리하도록 함

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions