νν΄ νλ¬μ€ λ°±μλ κ³Όμ μ€ μ§νν 1μΈ λ°±μλ νλ‘μ νΈλ‘, μ μμκ±°λ μμ€ν
(e-commerce)μμ μμ£Ό μ¬μ©λλ κΈ°λ₯λ€μ ꡬνν νλ‘μ νΈμ
λλ€.
μ±λ₯ μ΅μ νμ λμμ± μ μ΄μ λν μμ μ± ν보λ₯Ό λͺ©νλ‘ μ€κ³ λ° κ°λ°νμΌλ©°, λ°±μλ μ λ°μ λν μ΄ν΄λ₯Ό κΉμ΄ μκ² λ€μ§λ λ° μ€μ μ λμμ΅λλ€.
- Redis κΈ°λ° μΊμ±κ³Ό λ½ λ©μ»€λμ¦μ νμ©ν΄ λμμ± λ¬Έμ ν΄κ²°.
- K6, Grafana, InfluxDBλ₯Ό μ¬μ©ν μ±λ₯ ν μ€νΈ λ° μ€μκ° λΆμ.
- Testcontainersλ₯Ό νμ©ν 컨ν μ΄λ κΈ°λ° ν μ€νΈ νκ²½ ꡬμΆ.
| Language & Framework | Database & Cache | Monitoring & Metrics | Testing | Build Tools | API Documentation |
|---|---|---|---|---|---|
-
Swaggerλ₯Ό μ¬μ©ν Mock API ꡬν
- Swagger UI κΈ°λ° API λ¬Έμνλ₯Ό μλννκ³ , Mock APIλ₯Ό μ 곡νμ¬ λΉ λ₯Έ κ°λ° λ° ν μ€νΈ μ§μ.
-
JUnitμ νμ©ν λ¨μ λ° ν΅ν© ν μ€νΈ
- JUnit 5λ₯Ό μ¬μ©ν΄ μ£Όμ λΉμ¦λμ€ λ‘μ§μ λ¨μ ν μ€νΈ(Unit Test)μ μμ€ν μ λ°μ ν΅ν© ν μ€νΈ(Integration Test)λ₯Ό ꡬν.
- Testcontainersλ‘ MySQLκ³Ό Redisμ μ€μ 컨ν μ΄λ νκ²½μ ꡬμ±νμ¬ λμ μ λ’°μ±μ 보μ₯.
-
Redisλ₯Ό νμ©ν μΊμ±κ³Ό λΆμ° λ½ μ μ©
- Redisλ₯Ό νμ©νμ¬ μ£Όλ¬Έ λ΄μκ³Ό μ₯λ°κ΅¬λ λ°μ΄ν°λ₯Ό μΊμ±ν΄ μ‘°ν μ±λ₯μ μ½ 50% μ΄μ κ°μ .
-
K6, Grafana, InfluxDBλ₯Ό νμ©ν μ±λ₯ μκ°ν
- APIμ λΆν ν μ€νΈλ₯Ό ν΅ν΄ μ²λ¦¬ μλμ νΈλν½ νκ³λ₯Ό νμ νκ³ , λ³λͺ© ꡬκ°μ ν΄κ²°.
- λΆν ν μ€νΈ κ²°κ³Όλ₯Ό Grafanaλ‘ μκ°ννμ¬ TPS, μλ΅ μκ°, μμ€ν μ μμ μ±μ μ§μμ μΌλ‘ λͺ¨λν°λ§.
μ΄κΈ°μλ ERDμ API λͺ μΈμλ₯Ό μ§μ μ€κ³νλ©° λΉμ¦λμ€ λ‘μ§μ ꡬ쑰ννλ €κ³ νμ΅λλ€.
λ°μ΄ν° κ° κ΄κ³μ API νΈμΆ ꡬ쑰λ₯Ό λͺ νν μ μν¨μΌλ‘μ¨ μ€μ νμ μν©μ κ°μ ν μ€κ³ μλμ ν€μ°λ λ° μ§μ€νκ³ μ νμ΅λλ€.
μ§ν κ³Όμ μμ λμμ± μ μ΄, λ½ λ©μ»€λμ¦ λ± λ―Έμν λΆλΆμ΄ λ§μκ³ , κ·Έλ‘ μΈν΄ μ΄κΈ°μ μ€κ³ν΄λ μνμ€ λ€μ΄μ΄κ·Έλ¨κ³Ό ERDλ₯Ό μμ ν΄μΌνλ κ²½μ°κ° λ§μμ§λ§, μ΄ κ²½νμ ν΅ν΄ μ΄κΈ° κΈ°νμ μ€μμ±κ³Ό κ°λ°μμ λλ©μΈ μ§μκ³Ό κΈ°μ μ μΈ μ§μμ΄ μΌλ§λ μ€μνμ§λ₯Ό κΉ¨λ¬μ μ μμμ΅λλ€.
π μ΄κΈ° μνμ€ λ€μ΄μ΄κ·Έλ¨ 보기
μν μ£Όλ¬Έ μ μ¬κ³ μ°¨κ°κ³Ό κ°μ΄ λμμ±μ΄ μ€μν μμμμ λ°μ΄ν° μ ν©μ±μ 보μ₯νκΈ° μν΄ λΉκ΄μ λ½(Pessimistic Lock)μ λμ νμ΅λλ€.
λκ΄μ λ½λ κ³ λ €νμ§λ§, μΆ©λ κ°λ₯μ±μ΄ λμ κΈ°λ₯μ΄λΌκ³ νλ¨νμ¬ λ μμ μ μΈ μ²λ¦¬λ₯Ό μν΄ λΉκ΄μ λ½μ μ ννμ΅λλ€. μ΄ κ³Όμ μμ λ½ μ’ λ₯μ λν μ΄ν΄λΏ μλλΌ, λ°λλ½ ν μ€νΈμ ν΄κ²° κ²½νμ ν΅ν΄ μ€λ¬΄μ μΈ λμμ± μ€κ³ μλμ ν₯μμν¬ μ μμμ΅λλ€.
π λμμ± μ μ΄ λ°©μ νμ΅
π λ°λλ½ ν μ€νΈ λ° λΆμ° λ½ κ΅¬ν
μ΄κΈ°μλ λ‘컬 νκ²½μ λ§μΆ° ν μ€νΈ μ½λλ₯Ό μμ±νκΈ° λλ¬Έμ,
κΉνλΈμμ μ½λλ₯Ό ν΄λ‘ ν λ€ ν μ€νΈλ₯Ό μ€ννλ©΄ νκ²½ μ°¨μ΄λ‘ μΈν΄ ν μ€νΈμ μ λ’°μ±μ ν보νκΈ° μ΄λ €μ΄ λ¬Έμ κ° λ°μνμ΅λλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄, λ€μν νκ²½μμλ μΌκ΄λ ν μ€νΈλ₯Ό μνν μ μλλ‘ Testcontainersλ₯Ό λμ νμμ΅λλ€.
JUnit κΈ°λ°μ λ¨μ ν μ€νΈ λ° ν΅ν© ν μ€νΈλ₯Ό μμ±νκ³ , MySQLκ³Ό Redisλ₯Ό Docker 컨ν μ΄λλ‘ κ΅¬μ±νμ¬ μ΄μ νκ²½κ³Ό μ μ¬ν 쑰건μμ ν μ€νΈλ₯Ό μνν μ μλλ‘ νμμ΅λλ€.κ·Έ κ²°κ³Ό,
- ν μ€νΈ κ° νκ²½ μμ‘΄μ±μ μ κ±°νκ³ ,
- μ€μ λλ½ λ° νκ²½ μ°¨μ΄λ‘ μΈν μ€λ₯λ₯Ό λ°©μ§ν μ μμμΌλ©°,
- κΈ°λ₯ λ¨μμ ν μ€νΈλ₯Ό ν΅ν΄ λ³κ²½ μ¬νμ΄ κΈ°μ‘΄ λ‘μ§μ λ―ΈμΉλ μν₯μ μ¦μ κ²μ¦ν μ μμμ΅λλ€.
μ΄λ¬ν ν μ€νΈ νκ²½μ κΈ°λ°μΌλ‘, λ³΄λ€ μ λ’°λ λμ ν μ€νΈ μνκ³Ό μμ μ μΈ κ°λ° νλ‘μΈμ€λ₯Ό μ μ§ν μ μλ νκ²½μ κ΅¬μΆ ν μ μμμ΅λλ€.
π ν μ€νΈ 컨ν μ΄λ μ€μ λ° νκ³
K6λ₯Ό νμ©νμ¬ μλλ¦¬μ€ κΈ°λ°μ API λΆν ν μ€νΈλ₯Ό μμ±νκ³ ,
InfluxDBμ Grafanaλ₯Ό μ°λνμ¬ μ€μκ° μ±λ₯ μ§νλ₯Ό μκ°ννμμ΅λλ€.
μ΄λ₯Ό ν΅ν΄ μ€μ μ¬μ©μκ° μλ μν©μμλ λλμ νΈλν½ μ μ μ κ°μ ν ν μ€νΈλ₯Ό μνν μ μμκ³ ,
API λ³λͺ© ꡬκ°μ μκ°μ μΌλ‘ νμ νκ³ , μ λμ μΈ μ§νλ₯Ό κΈ°λ°μΌλ‘ λΆμν μ μμμ΅λλ€.
λν, ν μ€νΈ κ²°κ³Όλ₯Ό μ€μκ°μΌλ‘ λͺ¨λν°λ§νλ©΄μ
μ μμ μΌλ‘ μ²λ¦¬λλ μμ²κ³Ό μ§μ°/μ€ν¨ ꡬκ°μ ꡬλΆνμ¬ λΆμν μ μλ νκ²½μ ꡬμΆνμκ³ ,
μ΄λ₯Ό ν΅ν΄ ν₯ν μ€ μλΉμ€μμλ λͺ¨λν°λ§ μμ€ν μ μ§μ ꡬμΆν μ μλ€λ μμ κ°μ μ»λ κ³κΈ°κ° λμμ΅λλ€.
π λΆν ν μ€νΈ μλ리μ€
π λΆν ν μ€νΈ μκ°ν
- μ€κ³ μ΄κΈ° λ¨κ³μ λ―Έν‘ν¨μ΄ μΌλ§λ λ§μ μμ λΉμ©μ λ°μμν€λμ§λ₯Ό 체κ°νκ³ , κΈ°νκ³Ό μ€κ³μ μ€μμ±μ λ€μ ν λ² νμΈν μ μμμ΅λλ€.
- λμμ±κ³Ό λ½ λ©μ»€λμ¦ λ± μ€λ¬΄μμ μμ£Ό λ§μ£ΌμΉ μ μλ μν©μ λν κ²½νκ³Ό νμ΅μ ν μ μμκ³ , Redis, μ±λ₯ ν μ€νΈ λͺ¨λν°λ§ λꡬλ€μ λν μ€μ κ°κ°λ ν€μΈ μ μμμ΅λλ€.
- λ¨μν μ½λλ₯Ό μμ±νλ μμ€μ λμ΄, μ 체 μμ€ν ꡬ쑰λ₯Ό μ΄ν΄νκ³ μ€κ³ν μ μλ μμΌλ₯Ό λνλ λ° ν° λμμ΄ λμμ΅λλ€.