본문 바로가기
카테고리 없음

슬기로운 Concurrency-safety Lock - 실습 프로젝트

by Jordy-torvalds 2022. 11. 27.
반응형

요구사항 정의

Goals

상품의 재고를 concurrency-safety하게 관리하는 프로그램을 개발합니다.

Specs

Infrastructure

인프라는 도커로 구성합니다.

  • MySQL: 영속적으로 데이터를 관리합니다.
  • Redis: 분산 락으로 사용합니다.

Schema

  • 테이블은 다음과 같습니다.

product 테이블

name type
id bigint - pk
name varchar(100)
price bigint
description varchar(1000)
version bigint

stock 테이블

name type
id bigint
productId varchar(100)
total_stock bigint
remain_stock bigint
note varchar(1000)
created_at datatime
version bigint
  • 상품과 재고 테이블은 1:0..N 관계 입니다.
  • 모든 컬럼은 null 일 수 없습니다.

상품 Product

  • 상품 기능은 다음과 같습니다.
    • 새로운 상품이 추가 가능해야 합니다.
    • 상품 정보의 수정은 name, price, description만 가능합니다.
    • 삭제와 조회가 가능 해야 합니다.
  • 상품 정보의 수정, 삭제는 Concurrency-safety 해야 합니다.

재고 Stock

  • 재고 기능은 다음과 같습니다.
    • 특정 상품에 대해 여러 재고 데이터가 추가될 수 있습니다.
      • 남은 재고(remain_stock)은 총 재고(total_stock)을 초과할 수 없습니다.
      • 총 재고와 남은 재고는 0 미만 일 수 없습니다.
    • 남은 재고에 대해 재고 차감이 가능해야 합니다.
      • 특정 상품에 대해 재고가 여러 개일 때 가장 오래된 재고 데이터를 우선해서 차감합니다.
    • 삭제와 조회가 가능해야 합니다.
      • 재고 조회시 상품 정보와 aggregation해서 조회되어야 합니다.
  • 재고 정보의 수정, 삭제는 Concurrency-safety 해야 합니다.

결과물

진행 중..

반응형