e-커머스 상품 주문 서비스
고도화
4주차 (10/13 ~ 10/18) - 4.5MD <기본 기능 구현>
5주차 (10/20~ 10/26) - 4MD <고도화>
sequenceDiagram
actor User
participant Order_Server
participant Order_DB
participant Pay_Server
participant Pay_DB
participant External_Server
User->>+Order_Server: 상품 주문 (유저id, 상품id, 수량)
Order_Server->>+Order_DB: 상품 정보 조회
Order_DB-->>-Order_Server: 상품 정보 리턴(상품 id, 가격, 재고)
opt 존재하지 않는 상품
Order_Server-->>User: 오류 응답 반환 (존재하지 않는 상품)
end
opt 재고 부족
Order_Server->>User: 오류 응답 반환 (재고부족)
end
Order_Server-->> Order_Server: 결제 금액 계산
Order_Server->>+Pay_Server: 결제 요청(유저id, 결제금액)
Pay_Server->>+Pay_DB: 사용자 정보 조회(유저id)
Pay_DB-->>-Pay_Server: 사용자 정보 리턴(유저id, 계좌잔액)
Pay_Server-->>Pay_Server: 결제후 잔액 계산
opt 잔액부족
Pay_Server-->>Order_Server: 오류 응답 반환(잔액부족)
Order_Server-->>User: 오류 응답 반환(잔액부족)
end
Pay_Server->>+Pay_DB: 사용자 정보 업데이트(유저id, 계좌잔액)
Pay_DB-->>-Pay_Server: 업데이트 결과 반환(유저id, 계좌잔액)
opt 업데이트 실패
Pay_Server->>Order_Server: 오류 응답 반환(계좌 업데이트 실패)
Order_Server->>User: 오류 응답 반환(결제 실패)
end
Pay_Server->>+Pay_DB: 사용자 결제 히스토리 추가(유저id, 결제금액)
Pay_DB-->>-Pay_Server: 사용자 결제 히스토리 추가 결과 리턴
opt 히스토리 추가 실패
Pay_Server->>Order_Server: 오류 응답 반환 (히스토리 추가 실패)
Order_Server->>User: 오류 응답 반환(결제 실패)
end
Pay_Server-->>-Order_Server: 사용자 정보 리턴(유저 id, 잔액)
Order_Server->>Order_DB: 상품 업데이트(상품id, 상품재고)
Order_DB-->>Order_Server: 상품 업데이트 결과 반환
opt 상품 업데이트 실패
Order_Server-->User: 오류 응답 반환(주문 실패)
end
Order_Server->>Order_DB: 주문 히스토리 추가(유저id, 상품id, 주문개수)
Order_DB-->>Order_Server: 주문 히스토리 추가 결과 반환
opt 히스토리 추가 실패
Order_Server-->User: 오류 응답 반환(주문 실패)
end
Order_Server-->External_Server: 주문 완료 API 호출 (유저id, 상품id, 주문개수)
External_Server-->Order_Server: 응답 리턴(주문완료)
Order_Server-->-User: 응답 리턴(유저id, 상품id, 수량)
https://github.com/Sunmon/hh-plus-3-commerce/issues/12 에 업로드 해두었습니다.
도메인별로 묶는 형식을 사용한다.
레이어별로 나누는 형식은 (Controller, Service, Repository, Model) 파일을 찾아보기 어려웠다.
따라서 어떤 기능이 구현되었는지 직관적으로 알아볼 수 있도록 도메인별로 묶어 관리한다.
또한 추후 서비스를 분리하거나 확장이 필요할 때 도메인째로 분리하면 되기 때문에 유리할 것이다.
--- src
├── domain
│ ├── Account
│ │ ├── AccountController
│ │ ├── AccountService
│ │ ├── AccountRepository
│ │ ├── AccountEntity
│ │ └── dto
│ │ └── Account
│ └── Payment
│ ├── ...
Swagger
상품 정보 조회 (GET /api/v1/products/{id})
• 200 상품 정보 조회 성공
• 404 상품을 찾을 수 없음
• 500 상품 정보 조회 실패
상품 주문/결제 (POST /api/v1/products/{id}/orders)
• 200 주문 성공
• 400 잘못된 파라미터
• 422 잔액 부족
• 422 상품 재고 부족
• 500 주문 실패
상위 상품 조회 (GET /api/v1/products/top)
• 200 인기상품 조회 성공
• 500 인기상품 조회 실패
유저 잔액 조회 (GET /api/v1/users/{id}/balance)
• 200 잔액 조회 성공
• 404 잘못된 파라미터
• 500 잔액 조회 실패
유저 잔액 충전 (POST /api/v1/users/{id}/balance)
• 200 잔액 충전 성공
• 400 잘못된 파라미터
• 500 잔액 충전 실패