포스트

[order] 주문 시스템 (2)

[order] 주문 시스템 (2)

5. ERD 설계

order-system ERD

처음에는 주문과 결제를 식별관계로 설정하려고 하였다. 주문과 결제는 1:1 관계이며 결제는 주문이 존재해야만 생성될 수 있기 때문에 식별관계로 모델링하는 것이 자연스럽다고 생각하였다.

하지만 실무에서는 유지보수성과 확장성을 고려하여 비식별관계를 사용하는 경우가 많다. 그리고 식별관계로 설정하면 주문 ID가 결제 테이블에서 PK와 FK의 역할을 동시에 수행하게 되는데, 실무에서는 하나의 컬럼이 여러 역할을 가지는 구조를 지양하는 경향이 있다.

그래서 향후 부분 결제, 재결제, 환불 이력 관리 등 요구사항이 추가될 경우 결제가 주문과 독립적인 식별자를 가지는 것이 확장에 유리하다고 판단하여 비식별관계로 설계하였다.

6. 트랜잭션 설계

상품 등록, 상품 수정, 상품 삭제 상품 주문, 주문 취소, 주문 조회, 결제 취소

상품 주문

주문 생성 (INSERT) -> 주문 상품 생성 (INSERT) -> 재고 감소 (UPDATE) -> 결제 생성 (INSERT)

주문 취소

결제 상태 변경 CANCELED (UPDATE) -> 상품 재고 증가 (UPDATE) -> 주문 상품 상태 변경 CANCELED (UPDATE) -> 주문 상태 변경 CANCELED (UPDATE)

7. 이벤트 설계

이벤트 이름발행 서비스관련 서비스트리거 조건비즈니스 의미
OrderCreated주문결제, 재고고객이 주문을 확정새 주문이 접수됨
OrderCancelled주문결제, 재고고객이 주문 취소 요청주문 프로세스가 중단됨
PaymentCompleted결제재고, 주문결제 승인 완료대금 수령이 확인됨
InventoryReserved재고배송, 주문재고 차감 성공상품 출고 준비 완료
PackageReady배송주문포장 작업 완료상품이 출고 대기 중
ShipmentDispatched배송주문택배사 인수 완료배송이 시작됨
OrderDelivered배송주문고객 수령 확인거래가 완료됨
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.