네이버 쇼핑에 속해 있는 네이버 스마트 스토어를 구현한 것으로, 판매자는 자신이 갖고 있는 상품을 손쉽게 판매할 수 있고, 사용자는 상품을 자유롭게 구매할 수 있도록 하는 서비스입니다.
- 일상에서 빈번하게 접할 수 있는 도메인입니다.
- 단순한 CRUD가 아닌, 복잡한 정책과 기능을 분석하고 전반적인 흐름을 이해할 수 있습니다.
- 복잡하게 얽혀있는 도메인 간의 관계를 분석하고 설계할 수 있습니다.
- 연관된 도메인을 설계하고 통합하는 과정을 통한 협업 능력를 향상시킬 수 있습니다.
- 판매할 상품을 등록하고 관리할 수 있습니다.
- 원하는 상품을 쿠폰과 포인트를 적용해서 주문할 수 있습니다.
- 주문한 상품에 대한 쿠폰과 포인트 사용 이력을 통해 부분 환불할 수 있습니다.
- 자동으로 최대 할인 금액으로 쿠폰을 적용할 수 있습니다.
- 포인트를 적립하고 사용할 수 있습니다.
- 멤버십 구독 회원이면 추가 적립을 할 수 있습니다.
- 본인인증 후 로그인해서 사용자 정보를 조회할 수 있습니다.
- 원하는 상품을 찜할 수 있습니다.
- 리뷰를 작성하고 도움이 된 리뷰에 좋아요를 누를 수 있습니다.
- 장바구니에 상품을 담을 수 있습니다.
- 상품에 문의를 작성할 수 있습니다.
- 상품 문의에 답변을 작성할 수 있습니다.
- 쿠폰을 발급하고 사용자에게 지급할 수 있습니다.
공부하는 마음으로 꼼꼼한 코드 작성을 하자 🔥
- DDD를 적용하여 도메인을 설계하고 구현하자
- 6명의 코드리뷰를 통해 가독성 좋은 코드에 대해 알아가고 개선하자
- 6명이 한번에 코드를 작성하는 만큼 의존성을 최소화하고 유연한 코드를 작성하자
- 기술보다는 도메인에 집중하자
- 명분이 있는 코드를 작성하자
DDD 스터디를 통해 패키지 구조 스타일부터 객체의 역할과 책임에 대한 관점, 그리고 유효성 검증은 어디에 위치해야 할까 등등
차이가 있던 부분들을 조율할 수 있었습니다. 매 코드 리뷰를 통해 실제 프로젝트에 DDD 개념을 적용해보려는 노력을 기울였습니다.
-
주문서 유효성 검증
- 토큰유저와 주문서 유저가 같은지 확인
- 주문서의 배송 정보가 유효한지 확인
-
주문 상품 유효성 검증
- 상품의 재고 수량이 주문 수량보다 많은지 확인
- 상품의 판매 상태가 판매 중인지 확인
- client 넘어온 값이 유효한 값인지 확인
-
추가 정보 가공
- 예상 적립 포인트: 상품별 결제금액과 사용자의 멤버십 구독 여부에 따라 예상 적립 포인트 반환
- 사용자의 월별 쇼핑금액과 최대 적립 한도 등 포인트 정책을 토대로 예상 적립 포인트를 반환
- 적용 가능 포인트: 유저가 소유한 포인트 잔액
- 최대 할인 쿠폰 조합: 상품별 결제금액과 사용자의 보유 쿠폰을 토대로 최대 할인 쿠폰 조합 반환
- 적용 가능 쿠폰: 상품별 결제금액과 사용자의 보유 쿠폰을 토대로 적용 가능 쿠폰 반환
- 주문상품에 대한 쿠폰 적용 결과 리스트: 최대 할인 쿠폰 조합을 토대로 주문상품별 쿠폰 적용 결과 리스트 반환
- 주문 페이지 첫 접속시
- 쿠폰 중복 사용, 쿠폰의 최소 주문 금액, 쿠폰 최대 할인값 검증
- 유저가 보유한 쿠폰과 상품에 적용가능한 쿠폰을 최적의 알고리즘으로 계산된 최대 할인금액을 반환
- 주문 페이지 첫 접속시
- 예상 적립 포인트: 상품별 결제금액과 사용자의 멤버십 구독 여부에 따라 예상 적립 포인트 반환
-
주문서 쿠폰 변경 감지
- 예상 포인트는 쿠폰으로 할인 된 금액을 토대로 적립 포인트를 계산하기 때문에 쿠폰이 변경되면 예상 포인트도 변경되어야 한다.
- 주문상품에 대한 쿠폰 적용 결과 리스트: 최대 할인 쿠폰 조합을 토대로 주문상품별 쿠폰 적용 결과 리스트 반환
- 직접 쿠폰 선택시
- 쿠폰 중복 사용, 쿠폰의 최소 주문 금액, 쿠폰 최대 할인값 검증
- 선택된 쿠폰과 쿠폰이 적용되는 상품 금액을 계산하여 반환
- 직접 쿠폰 선택시
🤔 Order 와 주문서를 분리한 이유 : 주문서는 주문을 생성하기 위한 데이터를 담고 있고, Order는 결제를 한 이후에 주문에 대한 데이터를 담고 있기 때문에 분리하였다. 또한 주문서 페이지를 새로고침 했을때 재사용 할 수 있고, 유저가 결제를 한 이후만 유효한 Order로 남기고 싶어 분리하였다.
- 주문 전체 취소로 인한 쿠폰 사용 취소
- 쿠폰 사용 트랜잭션에 저장된 취소하는 주문 상품 전체에 대한 쿠폰 사용 취소 처리
- 주문 전체 취소로 인한 포인트 환불: 주문에서 사용된 모든 포인트 전액 환불
- 취소하는 주문에 대한 포인트 트랜잭션 이력을 토대로 사용한 포인트를 전체 환불
- 주문 부분 취소로 인한 쿠폰 부분 취소
- 쿠폰 사용 트랜잭션에 저장된 부분 취소하는 상품에 대한 일부 쿠폰만 취소 처리
- 최소 금액에 대한 쿠폰 사용 취소 처리는 환불 금액에서 제하고 돌려줌
- 주문 부분 취소로 인한 포인트 환불: 주문에서 취소하고자 하는 상품에 사용된 포인트 부분 환불
- 취소하는 주문에 대한 포인트 트랜잭션 이력에서 주문상품별 차감된 포인트를 가져와 부분 환불
Name | 소승수 | 김용상 | 김주환 | 이경민 | 임수진 | 홍지인 |
---|---|---|---|---|---|---|
Profile | ||||||
Role | #Dev |
#Dev |
#PO #Dev |
#SM #Dev |
#Dev |
#Dev |
Domain | infra keep qna review |
infra coupon |
infra order |
security cart review product |
security user |
security point |