카테고리 없음
슬기로운 Concurrency-safety Lock - 실습 프로젝트
Jordy-torvalds
2022. 11. 27. 20:57
반응형
요구사항 정의
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 해야 합니다.
결과물
진행 중..
반응형