Chapter 3. UML(Unified Modeling Language)
I. Flow Chart
flowchart TD
A1["κ³΅μ° μ ν"] --> B1["μμ½ κ°λ₯ λ μ§ μ‘°ν"]
B1 --> C1{"λ μ§ μ ν κ°λ₯ μ¬λΆ"}
C1 -- "κ°λ₯" --> D1["νΉμ λ μ§ μ ν"]
C1 -- "λΆκ°λ₯" --> B1
D1 --> E1["λκΈ°μ΄ ν ν° μμ±"]
E1 --> F1["λκΈ° μν νμΈ (ν΄λ§ μμ)"]
F1 --> G1{"μ°¨λ‘μΈκ°?"}
G1 -- "μλμ€" --> F1
G1 -- "μ" --> H1["μμ½ κ°λ₯ μ’μ μ‘°ν"]
H1 --> I1["μ’μ μ ν"]
I1 --> J1["μ’μ μμ½ μμ²"]
J1 --> K1["κ²°μ (ν¬μΈνΈ μ°¨κ°)"]
K1 --> L1{"κ²°μ μ±κ³΅?"}
L1 -- "μ" --> M1["μμ½ μλ£"]
L1 -- "μλμ€" --> N1["κ²°μ μ€ν¨ μ²λ¦¬"]
%% λΆκ°μ μΈ μ΄λ²€νΈ
N1 --> O1["ν¬μΈνΈ μΆ©μ λλ μ’μ μ¬μ ν"]
O1 --> H1
%% μ€λͺ
μ μν λ
ΈνΈ
style A1 fill:#f9f,stroke:#333,stroke-width:2px
style M1 fill:#0f0,stroke:#333,stroke-width:2px
style N1 fill:#f66,stroke:#333,stroke-width:2px
II. API λ³ Sequence Diagram
1. μμ½ κ°λ₯ λ μ§ μ‘°ν API
sequenceDiagram
participant User as μ¬μ©μ
participant DatePage as "μμ½ κ°λ₯ λ μ§ μ‘°ν νμ΄μ§"
participant SeatAPI as "μ§μ λ μ§ μμ½ κ°λ₯ μ’μ μ‘°ν API"
participant ScheduleDB as "곡μ°μΌμ ν
μ΄λΈ(DB)"
User->>DatePage: κ³΅μ° μ ν ν μμ½ κ°λ₯ λ μ§ μ‘°ν μμ²
DatePage->>SeatAPI: μ§μ λ μ§ μμ½ κ°λ₯ μ’μ μ‘°ν API νΈμΆ
SeatAPI->>ScheduleDB: κ³΅μ° μΌμ νμΈ (κ³΅μ° ID)
ScheduleDB-->>SeatAPI: μμ½ κ°λ₯ λ μ§ λͺ©λ‘ λ°ν
SeatAPI-->>DatePage: μμ½ κ°λ₯ λ μ§ λͺ©λ‘ μλ΅
DatePage-->>User: μμ½ κ°λ₯ λ μ§ νμ
2.λκΈ° μν νμΈ API : λκΈ°μ΄ μ΅μ΄ μ§μ
μμ
sequenceDiagram
participant User as μ¬μ©μ
participant WaitAPI as "λκΈ° μν νμΈ API"
participant TokenCreate as "ν ν° μμ± λͺ¨λ"
participant WaitTokenDB as "λκΈ° μν ν ν° ν
μ΄λΈ(DB)"
participant Queue as "λκΈ°μ΄ λͺ¨λ"
User->>WaitAPI: λκΈ° μν νμΈ μμ² (μ ν λ μ§)
alt μΏ ν€μ ν ν°μ΄ μμ
WaitAPI->>TokenCreate: ν ν° μμ± μμ² (μ¬μ©μ ID, κ³΅μ° ID, λ μ§)
TokenCreate->>WaitTokenDB: μλ‘μ΄ ν ν° μ μ₯
WaitTokenDB-->>TokenCreate: ν ν° μμ± μλ£
TokenCreate-->>WaitAPI: ν ν° ID λ°ν
WaitAPI->>User: μΏ ν€μ ν ν° ID μ€μ + λκΈ° μν μλ΅
else μΏ ν€μ ν ν°μ΄ μμ
WaitAPI->>Queue: λκΈ° μλ² νμΈ (ν ν° ID)
Queue-->>WaitAPI: νμ¬ λκΈ° μλ² λ° μν
WaitAPI-->>User: λκΈ° μλ² λ° μν μλ΅
end
3. λκΈ° μν νμΈ API : ν΄λ§ λ° ν ν° μ ν¨μ± κ²μ¦
sequenceDiagram
participant User as μ¬μ©μ
participant WaitAPI as "λκΈ° μν νμΈ API"
participant Queue as "λκΈ°μ΄ λͺ¨λ"
participant TokenVerify as "ν ν° κ²μ¦ λͺ¨λ"
participant ActiveTokenDB as "νμ±ν μν ν ν° ν
μ΄λΈ(DB)"
participant SeatPage as "μ§μ λ μ§ μμ½ κ°λ₯ μ’μ μ‘°ν νμ΄μ§"
%% ν΄λ§ μ£ΌκΈ° μ€μ (1λΆ)
Note over User, WaitAPI: μ¬μ©μλ 1λΆ κ°κ²©μΌλ‘ λκΈ° μνλ₯Ό νμΈν©λλ€.
loop λ§€ 1λΆλ§λ€ ν΄λ§
User->>WaitAPI: λκΈ° μν μ¬νμΈ μμ² (ν ν° ID)
WaitAPI->>Queue: νμ¬ μλ² νμΈ (ν ν° ID)
Queue-->>WaitAPI: μλ² λ° μν λ°ν
alt μ°¨λ‘μΈ κ²½μ°
WaitAPI->>TokenVerify: ν ν° μ ν¨μ± κ²μ¦ (ν ν° ID)
TokenVerify->>ActiveTokenDB: ν ν° μν νμΈ
ActiveTokenDB-->>TokenVerify: νμ±ν μν λ°ν
TokenVerify-->>WaitAPI: μ ν¨μ± κ²°κ³Ό
WaitAPI->>SeatPage: μ’μ μ‘°ν νμ΄μ§λ‘ Redirect (ν ν° ID)
Note right of SeatPage: ν΄λ§ μ’
λ£
else μ°¨λ‘κ° μλ κ²½μ°
WaitAPI-->>User: λ¨μ λκΈ° μΈμ μ 보 μλ΅
end
Note right of WaitAPI: 1λΆ ν λ€μ ν΄λ§ μμ
end
4. μ§μ λ μ§ μμ½ κ°λ₯ μ’μ μ‘°ν API
sequenceDiagram
participant User as μ¬μ©μ
participant SeatPage as "μ§μ λ μ§ μμ½ κ°λ₯ μ’μ μ‘°ν νμ΄μ§"
participant SeatAPI as "μ§μ λ μ§ μμ½ κ°λ₯ μ’μ μ‘°ν API"
participant TokenVerify as "ν ν° κ²μ¦ λͺ¨λ"
participant ActiveTokenDB as "νμ±ν μν ν ν° ν
μ΄λΈ(DB)"
participant SeatDB as "μ’μ ν
μ΄λΈ(DB)"
User->>SeatPage: μ’μ μ‘°ν νμ΄μ§ μ μ (ν ν° ID)
SeatPage->>SeatAPI: μ§μ λ μ§ μμ½ κ°λ₯ μ’μ μ‘°ν API νΈμΆ (ν ν° ID, λ μ§)
SeatAPI->>TokenVerify: ν ν° μ ν¨μ± κ²μ¦ (ν ν° ID)
TokenVerify->>ActiveTokenDB: ν ν° μν νμΈ
ActiveTokenDB-->>TokenVerify: νμ±ν μν λ°ν
TokenVerify-->>SeatAPI: μ ν¨μ± κ²°κ³Ό
alt ν ν° μ ν¨ν κ²½μ°
SeatAPI->>SeatDB: μμ½ κ°λ₯ μ’μ λͺ©λ‘ μ‘°ν (λ μ§)
SeatDB-->>SeatAPI: μμ½ κ°λ₯ μ’μ λͺ©λ‘ λ°ν
SeatAPI-->>SeatPage: μμ½ κ°λ₯ μ’μ λͺ©λ‘ μλ΅
SeatPage-->>User: μμ½ κ°λ₯ μ’μ νμ
else ν ν° λ¬΄ν¨ν κ²½μ°
SeatAPI-->>SeatPage: ν ν° λ¬΄ν¨ μλ΅
SeatPage-->>User: λ μ§ μ‘°ν νμ΄μ§λ‘ Redirect
end
5.μ’μ μμ½ μμ² API
sequenceDiagram
participant User as μ¬μ©μ
participant ReserveAPI as "μ’μ μμ½ μμ² API"
participant TokenVerify as "ν ν° κ²μ¦ λͺ¨λ"
participant ActiveTokenDB as "νμ±ν μν ν ν° ν
μ΄λΈ(DB)"
participant TentativeDB as "κ°μμ½ μ’μ ν
μ΄λΈ(DB)"
participant PaymentAPI as "κ²°μ (ν¬μΈνΈ μ°¨κ°) API"
User->>ReserveAPI: μ’μ μμ½ μμ² (ν ν° ID, μ¬μ©μ ID, κ³΅μ° ID, μ’μ ID)
ReserveAPI->>TokenVerify: ν ν° μ ν¨μ± κ²μ¦ (ν ν° ID)
TokenVerify->>ActiveTokenDB: ν ν° μν νμΈ
ActiveTokenDB-->>TokenVerify: νμ±ν μν λ°ν
TokenVerify-->>ReserveAPI: μ ν¨μ± κ²°κ³Ό
alt ν ν° μ ν¨ν κ²½μ°
ReserveAPI->>TentativeDB: κ°μμ½ μ’μ λ±λ‘ (μ’μ ID, 5λΆ νμ΄λ¨Έ μ€μ )
TentativeDB-->>ReserveAPI: κ°μμ½ μλ£
ReserveAPI-->>User: κ²°μ νμ΄μ§λ‘ Redirect
else ν ν° λ¬΄ν¨ν κ²½μ°
ReserveAPI-->>User: μμ½ λΆκ° μλ΅
end
6. κ²°μ (ν¬μΈνΈ μ°¨κ°) API
sequenceDiagram
participant User as μ¬μ©μ
participant PaymentAPI as "κ²°μ (ν¬μΈνΈ μ°¨κ°) API"
participant UserDB as "μ¬μ©μ ν
μ΄λΈ(DB)"
participant SeatDB as "μ’μ ν
μ΄λΈ(DB)"
participant TentativeDB as "κ°μμ½ μ’μ ν
μ΄λΈ(DB)"
User->>PaymentAPI: κ²°μ μμ² (μ¬μ©μ ID, κ³΅μ° ID, κ³΅μ° λ μ§, μ’μ ID)
PaymentAPI->>UserDB: μ¬μ©μ ν¬μΈνΈ μμ‘ νμΈ (μ¬μ©μ ID)
alt μμ‘ >= μ’μ κ°κ²©
PaymentAPI->>UserDB: ν¬μΈνΈ μ°¨κ° (μ¬μ©μ ID, κΈμ‘)
PaymentAPI->>SeatDB: μ’μ μν λ³κ²½ (μ’μ ID, μμ½ μλ£)
PaymentAPI->>TentativeDB: κ°μμ½ ν΄μ (μ’μ ID)
PaymentAPI-->>User: μμ½ μλ£ μλ΅
else μμ‘ < μ’μ κ°κ²©
PaymentAPI-->>User: κ²°μ μ€ν¨ μλ΅
end
7. ν¬μΈνΈ μΆ©μ API
sequenceDiagram
participant User as μ¬μ©μ
participant RechargeAPI as "ν¬μΈνΈ μΆ©μ API"
participant UserDB as "μ¬μ©μ ν
μ΄λΈ(DB)"
User->>RechargeAPI: ν¬μΈνΈ μΆ©μ μμ² (μ¬μ©μ ID, μΆ©μ κΈμ‘)
RechargeAPI->>UserDB: μ¬μ©μ μ‘΄μ¬ μ¬λΆ νμΈ (μ¬μ©μ ID)
alt μ¬μ©μ μ‘΄μ¬νλ κ²½μ°
RechargeAPI->>UserDB: νμ¬ ν¬μΈνΈ μ‘°ν (μ¬μ©μ ID)
alt νμ¬ ν¬μΈνΈ + μΆ©μ κΈμ‘ <= 1,000,000
RechargeAPI->>UserDB: ν¬μΈνΈ μ
λ°μ΄νΈ (μ¬μ©μ ID, μΆ©μ κΈμ‘)
UserDB-->>RechargeAPI: μ
λ°μ΄νΈ μλ£
RechargeAPI-->>User: μΆ©μ μ±κ³΅ μλ΅ (νμ¬ μμ‘)
else μ΅λ νλ μ΄κ³Ό
RechargeAPI-->>User: μΆ©μ μ€ν¨ μλ΅ (νμ¬ μμ‘ + μ€λ₯ λ©μμ§)
end
else μ¬μ©μ μ‘΄μ¬νμ§ μλ κ²½μ°
RechargeAPI-->>User: μΆ©μ μ€ν¨ μλ΅ (μ€λ₯ λ©μμ§)
end
8. ν¬μΈνΈ μμ‘ μ‘°ν API
sequenceDiagram
participant User as μ¬μ©μ
participant BalanceAPI as "ν¬μΈνΈ μμ‘ μ‘°ν API"
participant UserDB as "μ¬μ©μ ν
μ΄λΈ(DB)"
User->>BalanceAPI: ν¬μΈνΈ μμ‘ μ‘°ν μμ² (μ¬μ©μ ID)
BalanceAPI->>UserDB: μ¬μ©μ μ‘΄μ¬ μ¬λΆ νμΈ (μ¬μ©μ ID)
alt μ¬μ©μ μ‘΄μ¬νλ κ²½μ°
BalanceAPI->>UserDB: ν¬μΈνΈ μμ‘ μ‘°ν (μ¬μ©μ ID)
UserDB-->>BalanceAPI: ν¬μΈνΈ μμ‘ λ°ν
BalanceAPI-->>User: ν¬μΈνΈ μμ‘ μλ΅
else μ¬μ©μ μ‘΄μ¬νμ§ μλ κ²½μ°
BalanceAPI-->>User: μ‘°ν μ€ν¨ μλ΅ (μ€λ₯ λ©μμ§)
end