Skip to content

Latest commit

 

History

History
367 lines (287 loc) · 12.4 KB

File metadata and controls

367 lines (287 loc) · 12.4 KB

E-커머스 서비스 시퀀스 다이어그램

📚 문서 목록


잔고 (Balance)

잔액 조회

sequenceDiagram
    autonumber
    actor 클라이언트
    participant 잔고
    participant 사용자
    클라이언트 ->>+ 잔고: 잔액 조회 요청
    잔고 ->>+ 사용자: 사용자 조회

    opt 사용자 존재 ❌
        사용자 -->> 클라이언트: 사용자 미존재 예외 ⚡️
    end

    사용자 -->>- 잔고: 사용자 조회 완료
    잔고 ->>+ 잔고: 잔고 조회

    opt 잔고 없을 시
        잔고 -->>- 클라이언트: 잔액 조회 성공 - 0 반환 ✅
    end

    잔고 -->>- 클라이언트: 잔액 조회 성공 - 잔고 반환 ✅
Loading

설명 (Description)

  • (1) : 클라이언트가 잔액 조회를 요청한다.
  • (2)-(4) : 사용자 검증을 진행하며, 검증 실패시 예외가 발생한다.
  • (5)-(7) : 사용자 잔고를 조회하며, 잔고가 있으면 잔고의 금액을 잔고가 없으면 0을 클라이언트에게 반환한다.

잔액 충전

sequenceDiagram
    autonumber
    actor 클라이언트
    participant 잔고
    participant 잔고이력
    participant 사용자
    클라이언트 ->>+ 잔고: 잔액 충전 요청
    잔고 ->>+ 사용자: 사용자 조회

    opt 사용자 존재 ❌
        사용자 -->> 클라이언트: 사용자 미존재 예외 ⚡️
    end

    사용자 -->>- 잔고: 사용자 조회 완료
    잔고 ->> 잔고: 잔고 조회

    alt 잔고 없을 시
        잔고 ->>+ 잔고: 잔고 생성(요청 금액)
        opt 최대 잔액 초과 ❌
            잔고 -->>- 클라이언트: 최대 잔액 초과 예외 ⚡️
        end
    else 잔고 존재 시
        잔고 ->>+ 잔고: 잔액 충전(기존 잔액 + 요청 금액)
        opt 최대 잔액 초과 ❌
            잔고 -->>- 클라이언트: 최대 잔액 초과 예외 ⚡️
        end
    end

    잔고 ->> 잔고: 잔액 저장
    잔고 ->>+ 잔고이력: 잔액 충전 이력 저장
    잔고이력 -->>- 잔고: 잔액 충전 이력 저장 완료
    잔고 -->>- 클라이언트: 잔액 충전 성공 ✅ 
Loading

설명 (Description)

  • (1) : 클라이언트가 잔액 충전을 요청한다.
  • (2)-(4) : 사용자 검증을 진행하며, 검증 실패시 에러
  • (5) : 잔고를 조회한다.
  • (6)-(9) : 잔고가 있으면 기존 잔고에 충전 요청 금액을 더하고 없으면 요청 금액으로 잔고를 새로 생성한다
    • (7), (9) : 이때 잔고의 최대 금액을 넘으면 최대 잔액 초과 예외가 발생한다.
  • (10) : 충전한 잔액을 저장한다.
  • (11)-(12) : 잔액 충전이력에 저장한다.
  • (13) : 잔액 충전에 성공을 클라이언트에게 응답한다.

상품 (Product)

상품 조회

sequenceDiagram
    autonumber
    actor 클라이언트
    participant 상품
    participant 재고
    클라이언트 ->>+ 상품: 상품 조회 요청 (판매 가능)
    상품 ->>+ 재고: 조회 대상 상품의 재고 조회
    재고 -->>- 상품: 조회 대상 상품의 재고 조회 완료
    상품 -->>- 클라이언트: 상품 조회 성공 (판매 가능) ✅
Loading

설명 (Description)

  • (1) : 클라이언트가 판매 가능(SELLABLE)한 상품을 조회한다.
  • (2)-(3) : 조회 대상 상품의 재고를 조회한다.
  • (4) : 조회한 판매 가능 상품을 클라이언트에게 응답한다.

쿠폰

보유 쿠폰 목록 조회

sequenceDiagram
    autonumber
    actor 클라이언트
    participant 쿠폰
    participant 사용자
    클라이언트 ->>+ 쿠폰: 보유 쿠폰 목록 조회 요청
    쿠폰 ->>+ 사용자: 사용자 조회

    opt 사용자 존재 ❌
        사용자 -->> 클라이언트: 사용자 미존재 예외 ⚡️
    end

    사용자 -->>- 쿠폰: 사용자 조회 완료
    쿠폰 ->> 쿠폰: 보유 쿠폰 목록 조회 - 사용 가능
    쿠폰 -->>- 클라이언트: 보유 쿠폰 목록 반환 ✅ 
Loading
  • (1) : 클라이언트가 보유 쿠폰 목록을 조회 요청한다.
  • (2)-(4) : 사용자 검증을 진행하며, 검증 실패시 에러
  • (5) : 사용 가능한 보유 쿠폰 목록을 조회한다.
  • (6) : 조회한 쿠폰 목록을 클라이언트에게 반환한다.

쿠폰 발급

sequenceDiagram
    autonumber
    actor 클라이언트
    participant 쿠폰
    participant 사용자
    participant 사용자쿠폰
    클라이언트 ->>+ 쿠폰: 쿠폰 발급 요청
    쿠폰 ->>+ 사용자: 사용자 조회

    opt 사용자 존재 ❌
        사용자 -->> 클라이언트: 사용자 미존재 예외 ⚡️
    end

    사용자 -->>- 쿠폰: 사용자 조회 완료
    쿠폰 ->> 쿠폰: 쿠폰 조회

    opt 쿠폰 존재 ❌
        쿠폰 -->> 클라이언트: 쿠폰 미존재 예외 ⚡️
    end

    쿠폰 ->>+ 사용자쿠폰: 이미 발급 받은 쿠폰인지 조회

    opt 이미 발급 받은 쿠폰 ❌
        사용자쿠폰 -->> 클라이언트: 이미 발급 받은 쿠폰 예외 ⚡️
    end

    사용자쿠폰 -->>- 쿠폰: 발급 받은 이력 없는 쿠폰 확인

    opt 쿠폰 발급 가능 상태 ❌
        쿠폰 -->> 클라이언트: 쿠폰 발급 가능 상태 예외 ⚡️
    end    
    opt 쿠폰 발급 수량 부족 ❌
        쿠폰 -->> 클라이언트: 쿠폰 발급 수량 부족 예외 ⚡️
    end

    쿠폰 ->>+ 사용자쿠폰: 쿠폰 발급
    사용자쿠폰 -->>- 쿠폰: 쿠폰 발급 완료
    쿠폰 -->>- 클라이언트: 쿠폰 발급 성공 ✅ 
Loading
  • (1) : 클라이언트가 쿠폰 발급 조회 요청한다.
  • (2)-(4) : 사용자 검증을 진행하며, 검증 실패시 에러 응답 반환
  • (5)-(6) : 쿠폰 발급을 위한 쿠폰 식별자로 쿠폰을 조회한다. 존재하지 않으면, 예외 발생
  • (7)-(9) : 이미 발급 받은 쿠폰이 있는지 조회한다.
  • (10)-(11) : 쿠폰 발급 상태가 아니거나, 쿠폰 발급 수량이 존재하지 않으면 실패
  • (12)-(13) : 쿠폰을 발급한다.
  • (14) : 쿠폰 발급 성공을 클라이언트에게 반환한다.

주문 및 결제

주문 및 결제 완료

sequenceDiagram
    autonumber
    actor 클라이언트
    participant 주문
    participant 사용자
    participant 상품
    participant 쿠폰 AS 사용자쿠폰
    participant 주문상품
    participant 잔고
    participant 재고
    participant 외부 데이터플랫폼

    rect GRAY
        Note over 클라이언트, 주문상품: 주문 생성
        클라이언트 ->>+ 주문: 주문/결제 요청
        주문 ->>+ 사용자: 사용자 조회

        opt 사용자 존재 ❌
            사용자 -->> 클라이언트: 사용자 미존재 예외 ⚡️
        end

        사용자 -->>- 주문: 사용자 조회 완료

        loop 상품 목록 조회 🔁
            주문 ->>+ 상품: 상품 조회

            opt 상품 미존재 ❌
                상품 -->> 클라이언트: 상품 미존재 예외 ⚡️
            end

            상품 -->>- 주문: 상품 조회 완료
        end

        opt 쿠폰 ID 존재
            주문 ->>+ 쿠폰: 쿠폰 조회

            opt 쿠폰 사용할 수 ❌
                쿠폰 -->> 클라이언트: 쿠폰 사용할 수 없는 예외 ⚡️
            end

            쿠폰 -->>- 주문: 쿠폰 조회 완료
        end

        주문 ->> 주문: 주문 총 금액 계산
        주문 ->> 주문: 주문 생성
        주문 ->>+ 주문상품: 주문상품 생성
        주문상품 -->>- 주문: 주문상품 생성 완료
    end

    rect GRAY
    Note over 클라이언트, 재고: 결제 완료
    주문 ->>+ 잔고: 잔고 조회
    
    opt 잔액이 충분하지 ❌
    잔고 -->> 클라이언트: 잔액 부족 예외 ✨
    end
    
    잔고 -->>- 주문: 잔고 조회 완료
    
    주문 ->>+ 잔고: 잔고 차감
    잔고 -->>- 주문: 잔고 차감 완료
    
    opt 쿠폰 ID 존재
    주문 ->>+ 쿠폰: 쿠폰 조회

    opt 쿠폰 사용할 수 ❌
        쿠폰 -->> 클라이언트: 쿠폰 사용할 수 없는 예외 ⚡️
    end

    쿠폰 -->>- 주문: 쿠폰 조회 완료
    주문 ->>+ 쿠폰: 쿠폰 사용
    쿠폰 -->>- 주문: 쿠폰 사용 완료
    end
    
    주문 ->>+ 재고: 재고 조회
    
    opt 재고 부족 ❌
    재고 -->> 클라이언트: 재고 부족 예외 ⚡️
    end
    
    재고 -->>- 주문: 재고 조회 완료
    주문 ->>+ 재고: 재고 차감
    재고 -->>- 주문: 재고 차감 완료
    
    주문 ->> 주문: 결제 완료
    end
    
    주문 ->> 외부 데이터플랫폼: 주문 정보 전송

    opt 외부 플랫폼 전송 실패
      외부 데이터플랫폼 -->> 클라이언트: 전송 실패 로그 저장 또는 재시도 대기
    end
    
    주문 -->>- 클라이언트: 주문/결제 성공 응답 반환 ✅  
Loading

(1)-(14) : 주문 생성

  • (1) : 클라이언트가 주문 및 결제를 요청한다.
  • (2)-(4) : 사용자 검증을 진행하며, 검증 실패시 에러 응답 반환
  • (5)-(7) : 존재하는지 상품을 확인하며, 상품이 없으면 실패. 상품 목록의 크기 만큼 반복한다.
  • (8)-(10) : 쿠폰이 존재하면, 쿠폰을 검증하고 검증 에러시 실패한다.
  • (11)-(14) : 주문 총 금액을 계산하고, 주문 생성 그리고 주문 상품을 생성한다.

(15)-(30) : 결제 완료

  • (15)-(19) : 잔고를 조회 후 차감하며, 주문 금액보다 충분하지 않으면 예외가 발생한다.

  • (20)-(24) : 쿠폰 사용 가능하다면, 쿠폰을 사용한다. (쿠폰 상태가 결제 직전 다시 변경될 수 있으므로, 결제 단계에서 상태 재검증을 위한 재조회 수행)

  • (25)-(29) : 재고의 검증을 진행하며, 충분한 재고가 있다면 재고를 차감한다.

  • (30) : 주문의 상태를 결제 완료 상태로 변경한다.

  • (31) : 결제 완료까지 마치면, 외부 데이터플랫폼에 주문정보를 전송한다.

  • (32) : 클라이언트에게 주문 성공 응답을 반환한다.

상품 랭킹

상품 랭킹 배치 프로세스 및 조회

sequenceDiagram
    autonumber
    actor 클라이언트
    participant 스케줄러 AS Scheduler
    participant 주문상품
    participant 상품통계

    rect GRAY
    Note over 스케줄러, 상품통계: 상품 통계 배치
    loop 배치 폴링 🔁
        스케줄러 -->>+ 스케줄러: 배치 시간 확인

        opt 배치 시간 ⏱️
            스케줄러 ->>+ 주문상품: 배치 시작
            주문상품 ->> 주문상품: 하루 전, 주문 완료된 상품 조회 및 집계
            주문상품 ->>+ 상품통계: 집계 데이터 저장
            상품통계 -->>- 주문상품: 집계 데이터 저장 완료
            주문상품 -->>- 스케줄러: 배치 완료
        end
    end
    end

    클라이언트 ->>+ 상품통계: 상위 상품 조회 요청
    상품통계 -->>- 클라이언트 : 상위 상품 조회 응답 ✅
Loading

(1)-(6) : 통계 배치

  • (1) : 배치가 초 간격으로 시간을 확인한다.
  • (2) : 배치 시간이 되면, 배치 프로세스를 시작한다.
  • (3)-(5) : 하루 전의 결제 완료된 주문의 상품 개수를 집계하여 데이터를 저장한다.
  • (6) : 배치 프로세스를 완료한다.

(7)-(8) : 클라이언트 요청

  • (7) : 클라이언트가 상위 상품 조회를 요청한다.
  • (8) : 클라이언트 요청 시, 사전 집계된 랭킹 데이터를 반환한다. (캐싱 전략 포함 가능)