κ²½λ ₯ μ¬νμ μ¬κΈ°μμ νμΈ νμ€ μ μμ΅λλ€.
λ³Έ λ ν¬μ§ν 리μ μΈκΈλ λ΄μ©μ ν΄λΉ λ ν¬μ§ν 리μ κΉμ μν₯μ λ°μμ΅λλ€. ν΄λΉ λ΄μ©μ μ€μ λ‘ μ΄ν νλ κ°λ°μλ‘μ μ΄ν΄ νκ³ λκΌλ μ μ μ΅λν μ 리νμ¬ μμ± νκ³ μ ν©λλ€.
μ€ννΈμ μ μ΄κΈ° κ°λ°μλ‘ ν©λ₯ν΄ transactional script λ°©μμΌλ‘ μ½λλ₯Ό μμ±νλ μ λ μ΄ν νμ κ·λͺ¨ 컀μ§κ³ , λΉμ§λμ€κ° 볡μ‘ν΄ μ§μ λ°λΌ μ½λλ₯Ό λ§₯λ½μ λ°λΌ λΆλ¦¬νκ³ , μν κ³Ό μ± μμ λ°λ₯Έ μ½λ λΆλ¦¬κ° νμνλ€ λκΌκ³ κ·Έκ° μ¬λ¬ λ Όμμ λ°°μμ ν λλ‘ μ§ν₯νκ³ μ νλ μν€ν μ³μ μ¬μ© κ°λ₯ν κΈ°λ²λ€μ μ 리 νμμ΅λλ€.
μ΄λ¬ν κΈ°λ²μ μ‘°μ§μ κ·λͺ¨μ λ§μ£Όνκ³ μλ λΉμ§λμ€ λ³΅μ‘λμ λ°λΌμ μ ν© ν μλ, μ ν©νμ§ μμ μ μμ΅λλ€.
μ¬νκΉμ§μ κ²½νμ ν λλ‘ ν λ μ΄λ¬ν κΈ°λ²μ λ¨μΌ μ€μΏΌλ ν κ·λͺ¨(μ νν μ 체 10μΈ λ―Έλ§)μλ μ ν©νμ§ μμ μ μμ΅λλ€. μ΅μ 2κ°μ μ€μΏΌλκ° λμ μ΄μ λ λ μ ν© ν μ μμ΅λλ€.
μλ² μ ν리μΌμ΄μ κ³ μμ€ μν€ν μ³λ λ€μκ³Ό κ°μ λͺ¨λλ‘ κ΅¬μ± λ©λλ€.
- domain-models
- gateways
- foundation
μμ€ν μ λλ©μΈ λͺ¨λΈμ΄ ν¬ν¨ λ©λλ€. κ° λͺ¨λΈμ λ¨μΌ νΈμ€ν μ λ΅μ μ±ννκ±°λ 곡μ νΈμ€ν μ λ΅μ μ±ν ν μ μμ΅λλ€.
λλ©μΈ λͺ¨λΈ
λλ©μΈ λͺ¨λΈμ μΈλΆ λͺ¨λλ‘ κ΅¬μ± λ©λλ€.
| λͺ¨λ | μ€λͺ |
|---|---|
| application | μΈν°νμ΄μ€λ₯Ό νλ‘μΈμ€μ μ¬λ¦΄ μ μλ μ½λκ° μμΉ ν©λλ€. SpringBootApplicationμ λ©μΈν¨μ, HttpServer, GrpcServer λ±μ΄ μμΉ ν©λλ€. |
| api | λλ©μΈ λͺ¨λΈμ μΈλΆ νλ‘μΈμ€μμ νΈμΆνκΈ° μν μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€. RestController λ±μ ν¬ν¨ ν©λλ€. |
| models | λλ©μΈμ μΆμν ν λͺ¨λΈμ ν¬ν¨ ν©λλ€. ν΄λΉ λͺ¨λμ ν¬ν¨λ λͺ¨λΈμ μΈλΆλ‘ μ§μ λ ΈμΆ λμ§ μμ΅λλ€. μΈλΆ λ ΈμΆμ΄ νμν κ²½μ°λΌλ©΄ contracts λͺ¨λμ ν΅ν΄ λ ΈμΆ λ©λλ€. |
| contracts | λλ©μΈ λͺ¨λΈ μ€ μΈλΆλ‘ λ ΈμΆ λ λͺ¨λΈμ ν¬ν¨ ν©λλ€. λͺ λ Ή λͺ¨λΈ, μ΄κ±°ν νμ λ±μ΄ ν¬ν¨ λ μ μμ΅λλ€. |
| adapters | λλ©μΈ λͺ¨λΈμ μΆμν μ€ κ΅¬μ²΄μ μΈ κ΅¬νμ ν¬ν¨ ν©λλ€. λ°μ΄ν°λ² μ΄μ€ ꡬν체, μΈλΆ μλΉμ€ SDK λ±μ΄ ν¬ν¨ λ μ μμ΅λλ€. |
| unit-tests | μ€μ λ°°ν¬ νκ²½μ΄ μλ, μ½λ μ‘°κ°μ λμμΌλ‘ μμ±νλ ν μ€νΈμ λͺ¨μμ λλ€. μλΉμ€λ μ΄μ΄ ν μ€νΈ, adapter ꡬν체 ν μ€νΈ λ±μ΄ μΆκ° λ μ μμ΅λλ€. |
λ¨μΌ νΈμ€ν μ λ΅
λͺ¨λΈμ λν μ€νλ μΈν°νμ΄μ€λ₯Ό λ 립λ νλ‘μΈμ€μ νΈμ€ν νλ λ°©μμ λλ€. λ¨μΌ νΈμ€ν μ λ΅μ μ·¨νλ λλ©μΈ λͺ¨λΈμ λ€μκ³Ό κ°μ λͺ¨λ ꡬ쑰λ₯Ό κ°μ§λλ€
μ¬κΈ°μμ νμΈ ν μ μμ΅λλ€.
- domain-model
- application
- api
- contracts
- models
- adapters
- unit-tests
곡μ νΈμ€ν μ λ΅
κ΅¬λΆ λ λ§₯λ½ μ¬λ¬κ°λ₯Ό νλμ νλ‘μΈμ€μ νΈμ€ν νλ λ°©μ μ λλ€. μμ§ λ¨μΌ νΈμ€ν μ λ΅μ΄ νμνμ§ μμ κ²½μ°μ νμ© ν©λλ€. λ Όλ¦¬μ μΌλ‘ ꡬλΆλ λ§₯λ½μ νμμ λ°λΌ μΈμ λ μ§ νΈμ€νΈλ₯Ό λΆλ¦¬ν μ μμ΅λλ€.
μ¬κΈ°μμ νμΈ ν μ μμ΅λλ€.
- domain-model
- api
- contracts
- models
- adapters
- unit-tests
- shared-hosts
- application
λλ©μΈ λͺ¨λΈμ ν΄λΌμ΄μΈνΈμκ² μ 곡νκΈ° μν΄ κ²μ΄νΈμ¨μ΄ ν¨ν΄μ νμ© ν©λλ€. κ²μ΄νΈμ¨μ΄λ ν΄λΌμ΄μΈνΈμκ² μ μ ν μλΉμ€μ μμΉλ₯Ό μλ΄ ν μ μλλ‘ Gateway Routing Patternμ ꡬννκ³ , κ° νΈμ€νΈλ³ μ€λ³΅ ꡬν λμ΄ μλ κΈ°λ₯μ 곡ν΅ν νλ Gateway Offloading Patternμ ꡬνν μ μμ΅λλ€. κ° ν΄λΌμ΄μΈνΈλ₯Ό μν BFFμ μΈλΆμμ€ν μ°λμ μν Gateway λ±μΌλ‘ κ΅¬μ± λ μ μμ΅λλ€.
UI μμ€ν μ μν λ°±μλ μλΉμ€λ₯Ό μ 곡νλ κ²μ΄νΈμ¨μ΄ μ±κ²©μ μλΉμ€ μ λλ€. BFFλ λΆμ°νκ²½ λ°±μλλ₯Ό μΊ‘μν νμ¬ λ°±μλμ λ³κ²½μ΄ νλ‘ νΈμλλ‘ μ ν λλκ²μ μ΅λν λ°©μ§ ν©λλ€.
λλ©μΈ λͺ¨λΈμμ 곡ν΅μΌλ‘ μ¬μ© ν μ μλ μΆμν νΉμ λΌμ΄λΈλ¬λ¦¬ λ±μ΄ ν¬ν¨λ©λλ€.
λ©ν° λͺ¨λ λ°±μλ μ ν리μΌμ΄μ μ μ§ν₯νλ μ΄μ λ λ¨μΌ λͺ¨λ μ΄ν리μΌμ΄μ μμ λ°μ ν μ μλ μ¬λ¬ λ¬Έμ λ€μ ꡬ쑰μ μΌλ‘ λ°©μ§νκΈ° μν¨ μ λλ€.
μ°μ , λ°±μλ μ ν리μΌμ΄μ μ μν μ λ°λΌ μ¬λ¬ κ³μΈ΅μΌλ‘ λλκ² λ©λλ€. hexagonal architecture λ±κ³Ό κ°μ΄ νλ μ ν μ΄μ λ μ΄μ΄μμ λλ©μΈ λ μ΄μ΄λ‘ λ μ€μν κ²λ€μ΄ λ μ€μν κ²μ μμ‘΄νκ² λκ³ μΈνλΌμ€νΈλμ³ κ³μΈ΅μ κ²½μ°μλ μ μ΄μ μμ (IoC)μ ν΅ν΄ λλ©μΈ μ§μμ΄ λΆκ°μ μΈ μ§μμ μμ‘΄νμ§ μλλ‘ ν©λλ€.
κ·Έλ¬λ, λ¨μΌλͺ¨λ μ΄ν리μΌμ΄μ μ κ°λ°μκ° μμ±ν λλ©μΈ μ§μμ΄ μΈνλΌμ€νΈλμ³μ ꡬ체μ μΈ κ΅¬ν체λ₯Ό μμ‘΄ νλ κ²½μ°λ₯Ό μ»΄νμΌ λ¨κ³μμ μ ν νκΈ° μ΄λ ΅μ΅λλ€. λν IDEμ νΈλ¦¬ν μλμμ± κΈ°λ₯λ±μ λμμ λ°μμ λ λλ λͺ¨λ₯΄κ² μμ‘΄μ±μ΄ μλͺ» μ€μ λμ΄λ²λ¦¬λ λ¬Έμ κ° λ°μ ν μ μμ΅λλ€.
λν, μλ‘ λ€λ₯Έ λ§₯λ½μ κ°μ§ λλ©μΈ λͺ¨λΈκ° μ½λ μ§μ μ°Έμ‘°λ₯Ό κ°λ₯νκ² ν©λλ€. μκ²λͺ¨λ₯΄κ² μ€μ ν μμ‘΄μ±μ΄ μλΉμ€κ° λ 립μ±μ λ¨μ΄λ¨λ¦½λλ€.
λ©ν°λͺ¨λ λ°±μλ μ ν리μΌμ΄μ μ μμ κ°μ λ¬Έμ λ₯Ό λμ νλ₯ λ‘ μ°¨λ¨ ν©λλ€. λͺ¨λ κ΄λ¦¬ λͺ μΈμ μμ‘΄μ± λͺ¨λλ‘ λμ λͺ¨λμ μΆκ°ν κ²½μ°μλ§ μ°Έμ‘° ν μ μμΌλ©° μ΄λ μ½λλ₯Ό μ½λ μ¬λμΌλ‘ νμ¬κΈ λͺ¨λκ° μμ‘΄μ±μ λν λμ κ°μμ±μ μ 곡 ν©λλ€.
λ©ν°λͺ¨λ λ°±μλ μ ν리μΌμ΄μ μ gradleλ‘ κ΅¬μ±νλ λ°©λ²μ μ¬κΈ°μμ νμΈ νμ€ μ μμ΅λλ€.
μ΄λ²€νΈμμ±κ³Ό κ΄λ ¨λ κ²½νμ μ¬κΈ°μ νμΈ ν μ μμ΅λλ€.