
이번 주차는 시나리오에서 요구하는 기능들이 동작하기 위한 설계를 하는 과정이었습니다. 시나리오의 분석 결과를 바탕으로 Sequence Diagram, Class Diagram, Entity Relationship Diagram(ERD), (+ Flow chart) 산출물을 작성하였습니다.
이를 통해 유지보수 및 확장이 가능한 코드, 테스트 가능한 코드, 견고하지만 유연한 서버를 설계할 수 있는 기본기를 학습했습니다.
- 주문과 관련된 로직이 주요 포인트이다.
- 모든 기능과 기획은 주문이 수월하게 진행되도록 하는 것을 목표한다.
- 주문이 이뤄지기 위한 다른 정보들을 정의해야한다.
- 상품 주문 시 다중 선택을 고려해야한다.
- 상품 목록 조회
- 주문 시 배열 요청
- 주문 내역 기반으로 조회한다.
- 수량 또는 판매액의 상품을 정렬해야한다.
- Product(또는 ProductOption)에 stock 재고량에 대한 정의가 있어야 한다.
- 주문 시점, 혹은 결제 시점에서 재고가 차감되거나, 원복되는 로직이 있어야 한다.
- 잔액의 충전 또는 사용이 순차적으로 처리되어야 한다.
- 경쟁조건, 중복 처리, 외부 연동과 같은 상황을 염두해야한다.
- 단순 DB락 만으로는 부족하며, 분산락, 멱등성, 상태 전이 모델, 큐 기반 아키텍처 등으로 보완해야한다.
1️⃣ 주요 잔액 충전 / 조회 API
userId,amount값을 받아POST방식으로 충전
userId를 통해GET요청 시balance반환
2️⃣ 기본 상품 조회 API
/products,/products/${productId}로GET요청 시 상품 또는 상품 배열 반환
- 상품 또는 상품 옵션 별 재고 수량 포함
3️⃣ 주요 선착순 쿠폰 기능
POST/coupons
- 발급된 수량과 남은 수량을 쿠폰 정책에 포함해야한다.
- 주문 시 유효하지 않은 쿠폰에 대한 예외처리
- 정률(또는 정액) 할인 금액에 대한 잔액 차감 전 결제액 차감
4️⃣ 주요 주문 / 결제 API
userId와productId(oroptionCode),quantity를 배열로 받는POST요청을 구현한다.
- 상품 재고에 대한 예외 처리
- 잔액 부족에 대한 예외 처리
외부 라는 가정만 지켜 작업해 주시면 됩니다 )
- 외부로도 전송되어 데이터의 일관성이 훼손되지 않도록 유의해야한다.
- 전송 실패 시 재시도에 대한 상황도 고려해야한다.
- 외부 전송 실패가 주문 과정에 영향을 주지 않도록 해야한다.
- 고유한 정보를 바탕으로 멱등 처리가 되어야 한다.
데이터 플랫폼으로의 전송 기능은 Mock API, Fake Module 등 다양한 방법으로 접근해 봅니다.
5️⃣ 기본 상위 상품 조회 API
- 주문 기반으로 데이터를 조회하여 3일 간 상위 5개라는 조건에 맞는 상품을 반환한다.
- 다만, 추후 3일과 5개라는 조건에 대한 내용을 DB 로 고정해버리면 확장성이 떨어진다.
- 통계 기록용 테이블(1회 조회후 캐싱)을 고려한다.
- Client의 KPI가 어떤 것인 지 파악을 하고, 그에 맞는 통계를 제공하는 것이 필요하다.
- 통계를 주기적으로 생성하되, Order와 같은 테이블을 직접 참조하지 않고, 로그 테이블을 사용하는 것을 고려한다.
Actor), 메시지(호출), 수명선(Lifeline), 응답UML에서 시스템의 구조를 시각화하는 데 사용되며, 클래스 간의 관계, 속성, 메서드를 표현합니다.클래스 이름, 필드, 메서드, 연관(association), 상속(generalization), 집합(aggregation), 포함(composition) 관계 등Entity, Attribute, RelationshipJava(Spring)에서 REST API 명세를 자동 문서화하기 위한 도구입니다.@Operation, @Parameter, @Schema 등을 이용해 API 설명, 파라미터, 응답 모델을 명시할 수 있습니다.Swagger UI를 통해 브라우저에서 API를 테스트를 제공하여, 팀원, FE개발자에게 공유할 수 있습니다.