Clean Architectureμ λμμΈ ν¨ν΄: μ§μ κ°λ₯ν μ½λ μ€κ³
νλ‘κ·Έλ¨μ λ§λλ κ²λ³΄λ€ μ μ§λ³΄μνλ κ²μ΄ ν¨μ¬ μ΄λ ΅μ΅λλ€. **ν΄λ¦° μν€ν μ²(Clean Architecture)**μ λμμΈ ν¨ν΄μ μκ°μ΄ μ§λλ μ½λκ° μ©μ§ μκ³ , μꡬμ¬ν λ³κ²½μ μ μ°νκ² λμ²ν μ μλ ꡬ쑰λ₯Ό μ μν©λλ€.
1. ν΄λ¦° μν€ν μ² (Clean Architecture)
λ‘λ²νΈ C. λ§ν΄μ΄ μ μν μ΄ μ€κ³μ ν΅μ¬μ **"κ΄μ¬μ¬μ λΆλ¦¬"**μ **"μμ‘΄μ±μ λ°©ν₯"**μ λλ€.
- μμ‘΄μ± κ·μΉ: μμ‘΄μ±μ λ°λμ μμͺ½(λΉμ¦λμ€ λ‘μ§)μΌλ‘λ§ ν₯ν΄μΌ ν©λλ€.
- Entities (ν΅μ¬ μ 무 κ·μΉ): κ°μ₯ μμͺ½ μ. λ°μ΄ν°λ² μ΄μ€λ νλ μμν¬κ° λ°λμ΄λ μ λ λ³νμ§ μλ ν΅μ¬ λΉμ¦λμ€ λͺ¨λΈμ λλ€.
- Use Cases (μ ν리μΌμ΄μ μ 무 κ·μΉ): μμ€ν μ λμμ μ μν©λλ€.
- Adapters & Frameworks: κ°μ₯ λ°κΉ₯μͺ½ μ. DB, μΉ νλ μμν¬, UI λ±μ μΈμ λ κ΅μ²΄ κ°λ₯ν μΈλΆ μ¬νμΌλ‘ μ·¨κΈν©λλ€.
2. μ€λ¬΄μμ μμ£Ό μ°μ΄λ λμμΈ ν¨ν΄
λμμΈ ν¨ν΄μ μ λ°° κ°λ°μλ€μ΄ λ§μ£Όνλ λ¬Έμ λ€μ λν κ²μ¦λ ν΄κ²°μ± μ λλ€.
β μ±κΈν€ ν¨ν΄ (Singleton)
ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό νλλ§ μμ±νμ¬ μ ν리μΌμ΄μ μ μμμ 곡μ ν©λλ€. μ€νλ§μ λΉ(Bean)μ΄ κΈ°λ³Έμ μΌλ‘ μ΄ λ°©μμΌλ‘ κ΄λ¦¬λ©λλ€.
β‘ μ λ΅ ν¨ν΄ (Strategy)
μκ³ λ¦¬μ¦μ ν΄λμ€ννμ¬ νμμ λ°λΌ λμ μΌλ‘ κ΅μ²΄ν©λλ€. μλ₯Ό λ€μ΄, κ²°μ μλ¨(μΉ΄λ, μΉ΄μΉ΄μ€νμ΄, ν μ€)μ λ°λΌ λ€λ₯Έ κ²°μ λ‘μ§μ μ€νν λ μ μ©ν©λλ€.
β’ λΉλ ν¨ν΄ (Builder)
볡μ‘ν κ°μ²΄ μμ± κ³Όμ μ μΊ‘μνν©λλ€. κ°λ
μ±μ΄ λκ³ νμν νλλ§ μ νμ μΌλ‘ μ€μ ν μ μμ΄ μλ° κ°λ°μμκ² νμμ μΈ ν¨ν΄μ
λλ€. (Lombokμ @Builder)
3. μ μ΄λ° ꡬ쑰λ₯Ό κ³ λ―Όν΄μΌ ν κΉ?
- ν μ€νΈ μ©μ΄μ±: λΉμ¦λμ€ λ‘μ§μ΄ μΈλΆ νλ μμν¬(DB λ±)μ λΆλ¦¬λμ΄ μμ΄ ν μ€νΈνκΈ° μ½μ΅λλ€.
- μ μ°μ±: MySQLμ μ°λ€κ° PostgreSQLλ‘ λ°κΏλ ν΅μ¬ λ‘μ§μ μμ ν νμκ° μμ΅λλ€.
- νμ ν¨μ¨: κ·μΉμ΄ λͺ ννλ―λ‘ μμ λͺ μ κ°λ°μκ° μμ ν΄λ μ½λμ μΌκ΄μ±μ΄ μ μ§λ©λλ€.
4. κ²°λ‘
μ²μλΆν° μλ²½ν ν΄λ¦° μν€ν μ²λ₯Ό μ μ©νλ κ²μ μ€λ²μμ§λμ΄λ§μ΄ λ μ μμ΅λλ€. νμ§λ§ **"λΉμ¦λμ€ λ‘μ§μ κΈ°μ μ μΈλΆμ¬νμ μμ‘΄νμ§ μλλ€"**λ μμΉμ κ°μ΄μ μκΈ°κ³ μ½λλ₯Ό μμ±νλ€λ©΄, ν¨μ¬ λ λμ νμ§μ μννΈμ¨μ΄λ₯Ό λ§λ€ μ μμ κ²μ λλ€.