μ μ΄ κΈμ μ°κ² λμμκΉ?
κ°λ°μ μ²μ λ°°μΈ λ 컨νΈλ‘€λ¬, μλΉμ€, 리ν¬μ§ν 리. λ± μΈ κ°μ λ μ΄μ΄λ‘ νλ‘μ νΈλ₯Ό λλ΄λ€. κ·Έλ¦¬κ³ λλΆλΆμ λ‘μ§μ μλΉμ€μ λͺ°μλ£μλ€. κ·Έλλ κ·Έκ²λ§μΌλ‘λ μ΄λ μ λλ μν μ΄ λΆλ¦¬ λλ€κ³ μκ°νλ€.
κ·Έλ°λ° μκ°μ΄ μ§λκ³ κ°λ°μ μ‘°κΈμ© λ νλ€ λ³΄λ, ‘μλΉμ€μ λ‘μ§μ λ£λλ€’λ λ§ μμ²΄κ° μ μ λͺ¨νΈνκ² λκ»΄μ‘λ€. ‘μλΉμ€’λΌλκ² λ¬΄μμΈμ§, ‘λΉμ¦λμ€ λ‘μ§’μ μ΄λκΉμ§κ³ , ‘λλ©μΈ λ‘μ§’μ μ΄λκΉμ§μΈμ§ κ³ λ―Όμ΄ λμλ€.
μ΄λ° κ³ λ―Όμ΄ κΉμ΄μ§ μ¦μ, νμ¬μμ νλ‘ νΈμλ μ 무λ κ°μ΄ νκ² λλ€. νλ‘ νΈμλλ λ°±μλλ³΄λ€ ν¨μ¬ μκ² μκ³ μμ§λ§, νλ‘ νΈ μμμ€κ³μμ ‘μμ‘΄μ±’μ κ΅μ₯ν μ€μν λ¬Έμ λΌλ κ²μ λκΌλ€.
μμ‘΄μ±μ΄ ν λ² κΌ¬μ΄κΈ° μμνλ©΄ μ μ§λ³΄μμ κΈ°λ₯ λ³κ²½μ΄ κ΅μ₯ν νλ€μ΄μ§λ€. κ·Έλμ μ΄λ² κΈμμλ μμ‘΄μ± μ€κ³κ° μ μ€μνμ§, κ·Έκ²μ λν μ΄λ€ κ²°λ‘ μ λ΄λ Έλμ§μ μκ°μ μ 리ν΄λ³΄λ € νλ€.
μμ‘΄μ±μ΄ κΌ¬μ΄λ©΄ μκΈ°λ μΌλ€
μμ‘΄μ± μ€κ³κ° μλͺ»λλ©΄ μ΄λ€ λ¬Έμ κ° μκΈΈκΉ? λ무 κ±°μ°½νκ² ‘μν€ν μ²’λΌλ λ¨μ΄λ₯Ό μ°μ§ μλλΌλ, λͺ κ°μ§ μν©λ§ λ μ¬λ €λ³΄λ©΄ κ°μ΄ μ¬ μ μλ€.
- A κΈ°λ₯μ λ°κΎΈλ €κ³ νλλ°, μ ν κ΄λ ¨ μμ΄ λ³΄μ΄λ B, C κΈ°λ₯λ κ°μ΄ κΉ¨μ‘λ€.
- μλ‘μ΄ κΈ°λ₯μ λ£μΌλ €κ³ νλλ μ΄λλΆν° λ£μ΄μΌ ν μ§ κ°μ΄ μ μ¨λ€.
- ν μ€νΈ μ½λ μ§λ κ² μ΄λ ΅λ€. μ΄λ€ ν΄λμ€μ μ΄λ€ μ± μμ΄ μλμ§ λͺ¨λ₯΄κ² λ€.
- νΉμ ꡬν체λ₯Ό λ°κΎΈκ³ μΆμλ°, μμ λ‘μ§μ΄ κ·Έ ꡬν체μ μ§μ μμ‘΄νκ³ μμ΄μ λ°κΎΈλ λ° λ무 λ§μ 리μ€ν¬κ° λ°λ₯Έλ€.
μ΄λ° λ¬Έμ λ€μ λλΆλΆ μμ‘΄μ±μ λ°©ν₯μ΄ μλͺ»λμκ±°λ, κ΄μ¬μ¬κ° λ€μμ¬ μμ λ λ°μνλ€.
κ·Έλμ μ€κ³μμ κ°μ₯ λ¨Όμ κ³ λ €ν΄μΌ ν 건 λ μ΄μ΄λ₯Ό λλλ κΈ°μ€λ³΄λ€λ 무μμ΄ λ¬΄μμ μμ‘΄ν΄μΌ νκ³ , 무μμ μ λ μμ‘΄νμ§ λ§μμΌ νλμ§μ λν μκ°μ΄λΌκ³ λκΌλ€.
λ΄κ° μκ°ν μμ‘΄μ±μ λ°©ν₯
μ΄λ²μ κ°μΈμ μΌλ‘ μκ°ν΄ λ³Έ ꡬμ±μ λ€μκ³Ό κ°λ€. νν λ§νλ 3-tier ꡬ쑰(Controller, Service, Repository)μμ ‘Service’λΌλ μ΄λ¦ μλ λλ±κ·Έλ €μ‘λ λΆλΆμ μ’ λ μν λ³λ‘ λΆλ¦¬νλ λ°©ν₯μ΄λ€.
μμ‘΄μ± λΆλ¦¬ κΈ°μ€
1. Application Layer (μ΅μμ λ‘μ§ μ‘°ν©)
- μ¬λ¬ λλ©μΈ λ‘μ§μ μ‘°ν©νκ±°λ, μΈλΆ μμ² νλ¦μ κ΄λ¦¬
- νλ μ ν μ΄μ κ³μΈ΅μ΄λ μΈλΆ νΈμΆκ³Ό κ°μ₯ κ°κΉμ
- Controller, Scheduler λ±μ΄ νΈμΆνλ μ£Όμ μ§μ μ
2. Domain Layer (ν΅μ¬ λΉμ¦λμ€ λ‘μ§)
- μ€μ λλ©μΈ λ‘μ§μ λ΄λΉνλ μμ
- κ°μ²΄ κ° νλ ₯, μ μ± νλ¨, ν΅μ¬ λλ©μΈ νμ ꡬν
3. Infrastructure Layer (μΈλΆ μμ‘΄ μΊ‘μν)
- μΈλΆ API νΈμΆ, DB μ°λ, λ©μμ§ λ±
- λλ©μΈ λ‘μ§μ μ§μ μν₯ μ£Όμ§ μλλ‘ μΈν°νμ΄μ€λ‘ λΆλ¦¬
4. Support Layer (보쑰 κΈ°λ₯ μ 곡)
- μ νΈμ± κΈ°λ₯ (λ μ§ ν¬λ§· λ³ν, λ¬Έμμ΄ κ³μ° λ±)
- λͺ¨λ λ μ΄μ΄μμ 곡ν΅μ μΌλ‘ μμ‘΄ κ°λ₯
μμ‘΄μ± νλ¦λ
ββββββββββββββββββββββββββ
β Application Layer β
βββββββββββββ¬βββββββββββββ
β
ββββββββββββββββββββββΌβββββββββββββββββββββββββ
↓ ↓ ↓
ββββββββββββββββββ βββββββββββββββββββββββ βββββββββββββββββββββ
β Domain Layer β βInfrastructure Layer β β Support Layer β
ββββββββββ¬ββββββββ ββββββββββββββ¬βββββββββ ββββββββββββββ¬βββββββ
β β β²
ββββββββββββββββββββββββ΄ββββββββββββββββββββββββ
- Application Layerλ Domain, Infra, Support λͺ¨λλ₯Ό μμ‘΄ κ°λ₯
- Domain Layerλ Supportλ§ μμ‘΄ κ°λ₯
- Infrastructure Layerλ Supportλ§ μμ‘΄ κ°λ₯
μ΄λ° ꡬ쑰λ₯Ό λ°λ₯΄κ² λλ©΄ μμ°μ€λ½κ² λλ©μΈ λ‘μ§μ μΈλΆ ꡬν체μ μν₯μ λ°μ§ μκ³ , Infraλ Interfaceλ₯Ό ν΅ν΄ κ΅μ²΄ κ°λ₯νλ©°, Applicationμ μ 체 νλ¦μ μ‘°μ¨νλ μν μ μ§μ€ν μ μλ€κ³ μκ°νλ€.
ν¨ν€μ§ ꡬ쑰 μμ
com.myproject
βββ application
β βββ OrderUseCase.kt
βββ domain
β βββ model
β β βββ Order.kt
β βββ service
β βββ OrderDomainService.kt
βββ infrastructure
β βββ persistence
β β βββ OrderRepositoryImpl.kt
β βββ external
β βββ ExternalPaymentClient.kt
βββ support
β βββ DateUtils.kt
βββ presentation
βββ OrderController.kt
μ μ΄λ κ² λλ΄μκΉ?
λλ©μΈκ³Ό μΈνλΌκ° μμ¬ μλ ꡬ쑰μμλ λ€μκ³Ό κ°μ λ¬Έμ λ€μ΄ λ°λ³΅λλ€.
- μΈλΆ API νμμ΄ λ°λλ©΄ λλ©μΈ λ‘μ§λ κ°μ΄ λ°λμλ€.
- λ μ§ κ³μ°μ²λΌ λ¨μν λ‘μ§μ΄ μ¬κΈ°μ κΈ° μ€λ³΅λμ΄ μμλ€.
- λλ©μΈ λ‘μ§μ λ©μμ§ νλ μΈλΆ λΌμ΄λΈλ¬λ¦¬ λ‘μ§μ΄ μμ¬ μμ΄ ν μ€νΈκ° λΆνΈνλ€.
λ°λ©΄ μ ꡬ쑰μ²λΌ λλλ©΄ μλμ κ°μ μ₯μ μ΄ μλ€.
- λλ©μΈ μμμ μμνκ² λ¨κΈ° λλ¬Έμ, ν μ€νΈ μμ±μ΄ μ¬μμ§κ³ λ³κ²½μ μ μ°νλ€.
- μΈλΆ API μμ²μ μΊ‘μνν μμμ mocking νκΈ°λ νΈνλ€.
- λΉμ¦λμ€ νλ¦μ΄ μλ¨μμλ§ μ‘°ν©λκΈ° λλ¬Έμ, μλ‘μ΄ μꡬμ¬νμ λ°μνκΈ° μ¬μμ§λ€.
κ·Έλμ κ²°λ‘ μ?
μ΄λ² κΈμμλ 볡μ‘ν μ΄λ‘ 보λ€λ μ€μ νλ‘μ νΈμμ λκΌλ 'μμ‘΄μ± μ€κ³'μ μ€μμ±μ λν΄ μ 리ν΄λ³΄μλ€.
μ°λ¦¬λ νν μν€ν μ²λ₯Ό μ΄μΌκΈ°ν λ κ³μΈ΅μ λλλ λ°μ μ§μ€νμ§λ§, μ μ μ€μν 건 λκ° λꡬλ₯Ό μμ‘΄ν μ μλκ°μ λν κ·μΉμ μΈμ°λ μΌλ κ΅μ₯ν μ€μνλ€κ³ μκ°νλ€.
λ΄κ° μκ°νλ ν΅μ¬μ μλ λ κ°μ§λ€:
- λλ©μΈ λ‘μ§μ μΈλΆ ꡬνμ μν₯μ λ°μ§ μλλ‘ μμνκ² μ μ§ν΄μΌ νλ€.
- μΈλΆ μμ€ν κ³Όμ μ°κ²°μ λͺ ννκ² λΆλ¦¬νκ³ μΊ‘μνν΄μΌ νλ€.
λ¬Όλ‘ νλ‘μ νΈμ μ±κ²©, κ·λͺ¨, ν λ¬Ένμ λ°λΌ λ λμ λμμ΄ μμ μλ μλ€. νμ§λ§ ν μμ μμ λ΄κ° λλ κ°μ₯ μ€μ©μ μΈ λ°©ν₯μ μ΄ μ λ μ μ΄μλ€.
λ§λΆμ΄μλ©΄, μ΄ κΈμ ν΄λ¦° μν€ν μ²λ ν₯μ¬κ³ λ μ€κ³ κ°μ νΉμ μν€ν μ² ν¨ν΄μ κΉμ΄ μκ² μ΄μΌκΈ°ν기보λ¨, κ·Έλ³΄λ€ λ¨Όμ κ³ λ―Όλμ΄μΌ ν μμ‘΄μ± μ€κ³μ μ°μ μμμ λν΄ κΈ°λ‘ν΄λκ³ μΆμ΄μ μμ±νλ€. ꡬ쑰μ μΈ μ ν μμ μ€μνμ§λ§ μ΄λ° μ λ€μ κ³ λ €νκ³ ν΄λ μ’λ€κ³ μκ°νλ€.
κ·Έλμ, μμΌλ‘ νλ‘μ νΈλ₯Ό μμν λλ 'κΈ°λ₯μ μ΄λ»κ² λλκΉ?'λ μ€μνμ§λ§ 'λκ° λꡬλ₯Ό μμ‘΄ν μ μμκΉ?'λ κΉκ² κ³ λ―Όνλ €κ³ νλ€.
'μν€ν μ²' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
π« μννΈμ¨μ΄ μν€ν μ² with λλ©μΈ (1) | 2024.02.12 |
---|