π ν λ Έμ Β |Β π κ°λ° μν€ Β |Β π κ·ΈλΌμ΄λ λ£° Β |Β
λ΄λΉμ | μ£Όμ μμ |
---|---|
μ΄μ°¬ | - μ€μκ° μ±ν
λ‘λ© μ§μ° λ¬Έμ ν΄κ²° - λ°μ΄ν° μΊμ± κΈ°λ° μμ² μ΅μ ν - Presigned-URL κΈ°λ° μ΄λ―Έμ§ μ λ‘λ κΈ°λ₯ - ν μ€νΈλ¦/νΌλ/ν΅κ³ κΈ°λ₯ ꡬν λ° μΊλ¦°λ μ°λ - WebSocket μ€μκ° μ±ν κΈ°λ₯ - μ±λ¦°μ§, νΌλ, κ²°μ λ΄μ μ‘°ννλ λ§μ΄νμ΄μ§ ꡬν |
oneulμ μ¬μ©μκ° μ΄λ μΈμ¦μ ν΅ν΄ μ±λ¦°μ§μ μ°Έμ¬νκ³ ,
λͺ©ν λ¬μ± μ νκΈ λ¦¬μλλ₯Ό λ°μ μ μλ μ±λ¦°μ§ κΈ°λ° μΉ μλΉμ€μ
λλ€.
- μ¬μ©μλ μΈμ¦ νΌλλ₯Ό μ λ‘λνλ©° λμ νν©μ κΈ°λ‘ν μ μμ΄μ.
- μ°Έμ¬μ κ°μλ μ€μκ° μ±ν μΌλ‘ μν΅νλ©° λμ μ μ΄μ΄κ°λλ€.
μλΉμ€ νμ₯κ³Ό μ¬μ©μ κ²½ν κ°μ μ μν΄ μΈ κ°μ§ κΈ°μ μ μ μ©ν΄ κ³ λνλ₯Ό μ§ννμ΅λλ€.
-
μΈνΌλν° μ€ν¬λ‘€μ λμ ν΄ μ΅μ΄ 30κ° λ°μ΄ν°λ§ λ‘λ©νκ³ , μ΄ν μ€ν¬λ‘€ μ κ³Όκ±° λ°μ΄ν°λ₯Ό μμ°¨μ μΌλ‘ λΆλ¬μ€λλ‘ κ°μ νμ΅λλ€. μ΄ λ°©μμΌλ‘ μ΄κΈ° λ‘λ© μκ°μ μ½ 15% κ°λ μ€μκ³ , λ λλ§ μ±λ₯λ μμ νλμμ΅λλ€.
-
React Query μΊμ±μ ν΅ν΄ λμΌ μμ² λ°λ³΅μ λ°©μ§νμ΅λλ€. Stale Timeκ³Ό μΊμ μ λ΅ μ€μ μΌλ‘ API νΈμΆ μλ₯Ό μ½ 35% κ°μμμΌ μλ² λΆνλ₯Ό ν¨κ³Όμ μΌλ‘ μ€μμ΅λλ€.
-
μ λ ₯μ°½κ³Ό μ€ν¬λ‘€ μ΄λ²€νΈμ²λΌ λ°λ³΅ νΈμΆμ΄ μ¦μ ꡬκ°μ Debounceμ Throttleμ μ μ©νμ΅λλ€. κ·Έ κ²°κ³Ό μλμΉ μμ μ€λ³΅ μμ²μ λ§μ μ μμκ³ , μ¬μ©μ μΈν°λμ μ μΌκ΄μ±κ³Ό μλ² μμ μ±μ λμμ ν보ν μ μμμ΅λλ€.
μμ μ£Όλ¬Έμ μμ±μ κ²°μ κ²μ¦μ μν νμ κ³Όμ μ΄μ§λ§, μ΄ λ°μ΄ν°κ° μ μ ν μμ λμ§ μμΌλ©΄ κ³ μ λ°μ΄ν°λ‘ λμ λμ΄ μ€ν 리μ§Β·μΈλ±μ€ λΆν μ¦κ°, 쿼리 μλ΅ μ§μ° λ± μ±λ₯ μ νκ° λ°μν μ μμμ΅λλ€.
μ΄λ° μ μ¬μ 리μ€ν¬λ₯Ό μ€μ΄κΈ° μν΄ μμ RDBMS, μλ² μΈμ , Redis μΈ κ°μ§ μ΅μ μ λΉκ΅Β·λΆμνκ³ , Redisμ 15λΆ TTLμ μ μ©ν νμ΄λΈλ¦¬λ λ°©μμ μ ννμ΅λλ€.
κ²°μ μλ£ μ MySQLμ μꡬ μ μ₯ν¨μΌλ‘μ¨ λΉ λ₯Έ μλ΅ μλμ λ°μ΄ν° 무결μ±μ λμμ ν보νμ΅λλ€.
κ²°μ νλ‘μ°λ μΈλΆ Toss κ²°μ μλΉμ€μ λ΄λΆ MySQL μ μ₯μ΄λΌλ λ κ°μ λΆλ¦¬λ νΈλμμ μΌλ‘ ꡬμ±λκΈ° λλ¬Έμ, μΈλΆ κ²°μ λ μ μ 컀λ°λμ§λ§ λ΄λΆ DB νΈλμμ μ΄ λ‘€λ°±λλ©΄ μμμ±μ΄ κΉ¨μ§κ³ λ°μ΄ν° λΆμΌμΉκ° λ°μν μ μμμ΅λλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ Saga ν¨ν΄ κΈ°λ°μ 보μ νΈλμμ (compensation transaction) ꡬ쑰λ₯Ό λμ νμ΅λλ€. λ΄λΆ DB μ μ₯μ΄ μ€ν¨νλ©΄ κ³§λ°λ‘ Toss Cancel APIλ₯Ό νΈμΆν΄ μΈλΆ κ²°μ λ₯Ό μ·¨μνλ©°, μμ² IDλ₯Ό νμ©ν΄ λ©±λ±μ±μ 보μ₯ν©λλ€.
μ¬μλ μνμ νμ°¨λ Redisμ κΈ°λ‘νκ³ μ΅λ 3νκΉμ§ μλ μ¬μλνλ©°, μ΄νμλ DLQ(Dead Letter Queue)λ‘ μ΄κ΄ν΄ μ΄μμκ° μλμΌλ‘ νλΆνλλ‘ μ€κ³ν΄ μμ μ±κ³Ό μ΄μ ν¨μ¨μ λͺ¨λ ν보νμ΅λλ€.
"λͺ©ν λ¬μ±, κ·Έ μμ²΄κ° λ¦¬μλ!"
μ μ λ Toss κ²°μ APIλ₯Ό ν΅ν΄ μ±λ¦°μ§ μ°Έκ°λΉλ₯Ό κ²°μ νκ³ ,
λͺ©νλ₯Ό λ¬μ±νλ©΄ μλ²κ° μλμΌλ‘ νκΈ μ²λ¦¬λ₯Ό μνν©λλ€.
κ²°μ μνλ Redisμ μμ μ μ₯, MySQLμ μꡬ λ°μλ©λλ€.

"μ΄λ μΈμ¦ λ€μ, μμκ³Ό νΌλλ°±μ΄ λ°λ‘λ°λ‘!"
μ±ν
μ Netty-Socket.io κΈ°λ° WebSocket μλ²μ μ°κ²°λμ΄ μμΌλ©°,
λ©μμ§λ λ°©λ³λ‘ μ€μκ° λΈλ‘λμΊμ€ν
λ©λλ€.

"ν루 ν μ₯μΌλ‘ λΉμ μ λ³νκ° μμλ©λλ€."
μ¬μ©μκ° μ΄λ―Έμ§μ λ΄μ©μ μ
λ‘λνλ©΄,
S3λ‘ μ΄λ―Έμ§ μ
λ‘λ, λ©νλ°μ΄ν°λ MySQLμ μ μ₯λ©λλ€.

"μ§μ§ μΈμ¦λ§, μ§μ§λ‘ μΈμ λ°λλ€!"
λ°©μ₯μ κ° νΌλμ λν΄ μΉμΈ/λ°λ € μνλ₯Ό λ³κ²½ν μ μμΌλ©°,
λ³κ²½λ μνλ DBμ μ μ₯, 리μλ 쑰건μ λ°μλ©λλ€.

"λ΄ μ΄λ, λ΄ μ±λ¦°μ§, λ΄ λ¦¬μλκΉμ§ ν λμ!"
μ±λ¦°μ§, νΌλ, κ²°μ λ΄μ λ±μ νλμ λ³Ό μ μμ΅λλ€.


λΆλ₯ | κΈ°μ μ€ν |
---|---|
Frontend | |
Backend | |
DB / Infra | |
λ°°ν¬ | |
νμ |
μ΄μ°¬ | κ°μ€λ―Ό | μ μλ¦ |
---|---|---|
![]() |
![]() |
![]() |
Frontend / Backend | Backend | Frontend / Backend |
@today-is-first | @seolminkkang | @aoooec |