π₯ first come, first served.
REDIS, SQS, NoSQLμ μ¬μ©ν΄λ³΄κΈ° μν΄ λ³Έ νλ‘μ νΈλ₯Ό κΈ°ννμ΅λλ€.
λΆμ‘±ν μ μ΄ λ§μλ° κ°κ΄μ μΈ μ§μ , μ‘°μΈ ν΄μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.π
μλμ΄ μ νλ μ΄λ ν λμμ΄ μκ³ μ¬μ©μλ€μ λμμ μ¬μ© κΆνμ μ»κΈ° μν΄ νλ μμ²μ νλ€.
λ§μ μ¬μ©μλ€μ΄ μ νλ λμ μ¬μ© κΆνμ κ°κΈ° μν΄ λ°μνλ λ€μμ μμ²μ 견λ μ μλ μλ²λ₯Ό ꡬμΆν΄λ³΄λ €κ³ νλ€.
API μλ² λ¨μμ νΈλν½μ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ μ²λ¦¬νκΈ° μν΄ Redisλ₯Ό μ¬μ©νκΈ°λ‘ κ²°μ νλ€.
λ©λͺ¨λ¦¬ κΈ°λ°λ‘ λΉ λ₯΄κ² λ°μ΄ν°λ₯Ό μ½μ¬ μ μλ Key-Value Store DBμΈ Redisλ₯Ό κ²½νν΄λ³Έλ€.
API μλ²μ λΆνλ₯Ό μ€μ΄κ³ μμ²λ μμλ₯Ό 보μ₯λ°κΈ° μν΄ AWS SQSλ₯Ό μ¬μ©νκΈ°λ‘ κ²°μ νλ€.
Serverless, Fully managed νκ²½μΈ NoSQL DBλ₯Ό νμ΅ν΄λ³΄κΈ° μν΄ AWS DynamoDBλ₯Ό μ¬μ©νκΈ°λ‘ κ²°μ νλ€.
νμ μλμ Ticketμ μ€μ νκΈ° μν΄ λμ(SUBJECT)λ₯Ό λ±λ‘ν΄μΌ νλ€.
μ ν리μΌμ΄μ
μ΄ AWS DynamoDB
μ Writeνλ μμ
μ SUBJECTλ₯Ό λ±λ‘νλ μΌμ΄μ€λ§ νμ©νλ€.
μ΄λ² νλ‘μ νΈμ λͺ©νλ μκ°μ μΈ νΈλν½μ λμν μ μλ μ ν리μΌμ΄μ
μ ꡬμΆνλ κ²μ΄λ€.
ν°μΌ(TICKET) νλ μμ²μμ μκ°μ μΈ νΈλν½μ λ°μνλ€λ κ²μ κ°μ νκ³ μ ν리μΌμ΄μ
μ ꡬμΆνλ€.
λλμ μμ²μ 1μ°¨λ‘ Redisμμ νν°λ§μ νλ€. Redisμμ μ νλ μλμ μ΄κ³Όνλ μμ²μΈ κ²½μ°λ₯Ό λ°λ‘ νμ
νκ³ Responseλ₯Ό νλ€.
μ μμ μΈ μμ²μ Redis β SQS β Worker νλ¦μΌλ‘ μμ²μ΄ νλ₯Έλ€.
Ticket λ°μ΄ν°λ AWS DynamoDB
μμ Read μμ
λ§ νλ€. Write μμ
μ Consumer Workerμμ μ§ννλ€.
μμ½ν λμμ μλ―Ένλ Subject
μμ½νλ 주체λ₯Ό μλ―Ένλ Client
λμμ μ£Όμ²΄κ° μμ½νμμ μλ―Ένλ Ticket
μ΅λν μ¬νν μ λ³΄λ§ κ°λλ€.
μμΈν μ 보λ νΈμΆνλ μΈλΆ μμ€ν
μμ κ΄λ¦¬νλλ‘ μ λνλ€.
μμ€ν
μ λ±λ‘λ μ£Όμ μ 보λ DBλ‘ κ΄λ¦¬νλ€.
μμ±(μμ΄) | μμ±(νκΈ) | μ€λͺ |
---|---|---|
ID | μλ³ κ° | μ΄λ€ μ£Όμ λ₯Ό νΉμ νλ μλ³ κ° |
OPEN_DATE | μ€νλ μ§ | μμ½ μ€ν λ μ§ |
DEADLINE_DATE | λ§κ°λ μ§ | μμ½ λ§κ° λ μ§ |
LIMITED_QUANTITY_OF | νμ μλ | νμ μλ μ 보 |
STATUS | λ°μ΄ν° μν | [μ§νμ , μ§νμ€, μ·¨μ, μ’ λ£] |
β SYSTEM_ID | β λ±λ‘ν μμ€ν μ 보 | β * κ³ λ €νμ§ μμ * |
μμ½νλ 주체μ λν μ 보λ λ³΄ν΅ μ¬μ©μ μ λ³΄μΌ κ²μ΄λ€.
μ¬μ©μ μ 보 μμ μΈλΆ μμ€ν
μμ κ΄λ¦¬νλλ‘ μ λνλ€.
λ°λΌμ λ³Έ μμ€ν
μμλ 주체μ λν μ 보λ DBλ‘ κ΄λ¦¬νμ§ μλλ€.
주체(Client)κ° νΉμ λμ(Subject)μ λν΄ μμ κΆμ κ°κ² λλ κ²½μ° μ
μ₯κΆμ κ°λλ€λΌλ μλ―Έλ‘ TicketμΌλ‘ λͺ
λͺ
νλ€.
μ
μ₯κΆμ λν μ 보λ μμ€ν
μμ DBμ μ μ₯ κ΄λ¦¬νλ€.
μμ±(μμ΄) | μμ±(νκΈ) | μ€λͺ |
---|---|---|
CLIENT_ID | μμ κΆμ | μ μ₯κΆμ μμ ν λμ |
SUBJECT_ID | μ£Όμ | μ΄λ(μ£Όμ ) μ μ₯κΆ |
CREATED_AT | μμ ν λ μ§ | μμ κΆμ μ»μ λ μ§ |
π 주체(Client)λ νΉμ μ£Όμ (Subject)μ λν μ
μ₯κΆ(Ticket)μ νλλ§ μμ ν μ μλ€.
π λ±λ‘ν μ£Όμ (Subject) μ 보λ μμ ν μ μλ€. νμνλ€λ©΄ μλ‘ λ±λ‘ν΄μ μ¬μ©νλλ‘ νλ€.
Primary Key | Attributes | ||||||
---|---|---|---|---|---|---|---|
PK(Partition Key) | SK(Sort Key) | openDate | deadlineDate | limitedQuantityOf | status | createdAt | updatedAt |
subject#{subjectId1} | info | 2023-12-31T12:24 | 2024-01-31T12:24 | 100 | ONGOING | 2023-11-18T22:30:45.292739 | 2023-11-18T22:30:45.292739 |
Primary Key | Attributes | |
---|---|---|
PK(Partition Key) | SK(Sort Key) | createdAt |
subject#{subjectId1}#ticket | client#{clientId1} | 2023-12-31T12:24 |
π μλ리μ€λ₯Ό μ 리νλ€.
π REST API λ¬Έμ
π€ κΉμ§ν© λ
Redis&Kafkaλ₯Ό νμ©ν μ μ°©μ μΏ ν° μ΄λ²€νΈ κ°λ°κΈ° (feat. λ€κ³ μ)
μ μ°©μ μμ€ν
μ€κ³λ₯Ό κ³ λ―Όνλ€ κΉμ§ν© λμ΄ μ°μ μμ κΈμ λ³΄κ² λμκ³ κΆκΈν λΆλΆμ΄ λ©μΌμ 보λλλ° μλ
μ μ΄ κΈμ΄μμμλ λΆκ΅¬νκ³ μ§λ¬Έμ λν΄ μμΈνκ² νΌλλ°±μ ν΄μ£Όμ
μ νλ‘μ νΈλ₯Ό μ§ννλ λ°μ λ§μ λμμ΄ λμμ΅λλ€.