Skip to content

Latest commit

Β 

History

History
84 lines (44 loc) Β· 10.3 KB

File metadata and controls

84 lines (44 loc) Β· 10.3 KB

The Clean Architecture

https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

μ†Œν”„νŠΈμ›¨μ–΄ μ„€κ³„μ˜ λ‹€μ–‘ν•œ 관점에 μžˆμ–΄μ„œ κ³΅ν†΅λœ λΆ€λΆ„ - 관심사 뢄리. 일반적으둜 ν•˜λ‚˜μ˜ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ—¬λŸ¬κ°œμ˜ 계측 ꡬ쑰둜 λ³€κ²½ν•˜μ—¬ 관심사 뢄리λ₯Ό μˆ˜ν–‰ν•¨. 각 λ ˆμ΄μ–΄λŠ” μ΅œμ†Œ ν•˜λ‚˜ μ΄μƒμ˜ λΉ„μ¦ˆλ‹ˆμŠ€ λ£°κ³Ό μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•¨.

κ·Έλ™μ•ˆ λ…Όμ˜λ˜μ–΄μ˜¨ λ‹€μ–‘ν•œ μ•„ν‚€ν…μ³λŠ” 주둜 μ•„λž˜μ™€ 같은 νŠΉμ§•μ΄ 있음

  1. ν”„λ ˆμž„μ›Œν¬ 독립성. μ•„ν‚€ν…μ³λŠ” λΌμ΄λΈŒλŸ¬λ¦¬λ‚˜ ν”„λ ˆμž„μ›Œν¬μ— λ¬΄κ΄€ν•˜κ²Œ λ…λ¦½μ μœΌλ‘œ 섀계 κ°€λŠ₯해야함. 이λ₯Ό 톡해 ν”„λ ˆμž„μ›Œν¬μ™€ 라이브러리λ₯Ό λ‹¨μˆœνžˆ 툴의 ν•˜λ‚˜λ‘œ μ‚¬μš©ν•  수 있게 ν•˜κ³  μ˜μ‘΄μ μ΄μ§€ μ•Šκ²Œ 함.

  2. μ‰¬μš΄ ν…ŒμŠ€νŠΈ. λΉ„μ¦ˆλ‹ˆμŠ€ 룰을 ν…ŒμŠ€νŠΈ ν•˜κ³ μž ν•˜λŠ” 경우 UI, λ°μ΄ν„°λ² μ΄μŠ€, μ›Ή μ„œλ²„ λ“±κ³Ό 같은 λΉ„μ¦ˆλ‹ˆμŠ€ λ£° μ™Έμ˜ μ™ΈλΆ€ μš”μ†Œμ™€ λ¬΄κ΄€ν•˜κ²Œ ν…ŒμŠ€νŠΈ ν•  수 μžˆμ–΄μ•Ό 함.

  3. UI 독립성. UIλ₯Ό λ³€κ²½ν•  λ•Œ λ‹€λ₯Έ μš”μ†Œλ“€μ„ λ³€κ²½ν•˜μ§€ μ•Šκ³  μ‰½κ²Œ UI만 λ³€κ²½ κ°€λŠ₯ν•΄μ•Ό 함. μ›Ή UI μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 손 μ‰½κ²Œ console UI μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ λ³€κ²½ν•˜κ³ , λΉ„μ¦ˆλ‹ˆμŠ€ λ£°κ³Ό κ΄€λ ¨λœ μ½”λ“œλŠ” μ „ν˜€ λ³€κ²½ν•˜μ§€ μ•Šμ„ 수 μžˆλŠ” μƒνƒœκ°€ 쒋은 예제.

  4. λ°μ΄ν„°λ² μ΄μŠ€ 독립성. μ›ν•˜λŠ” μ‹œμ μ— μ›ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€λ‘œ λ§ˆμŒλŒ€λ‘œ λ³€κ²½ κ°€λŠ₯ν•΄μ•Ό 함.

  5. μ™ΈλΆ€ μš”μ†Œμ™€μ˜ 독립성. 기본적으둜 ν•˜λ‚˜μ˜ μ†Œν”„νŠΈμ›¨μ–΄λŠ” μ™ΈλΆ€ μš”μ†Œμ— λŒ€ν•œ 정보λ₯Ό μ „ν˜€ λͺ¨λ₯Έλ‹€κ³  κ°€μ •ν•΄μ•Ό 함.

Clean Architecture Image

μœ„μ˜ 그림으둜 μš”μ μ„ κ°„λž΅ν•˜κ²Œ λ‚˜νƒ€λ‚Ό 수 있음.

The Dependency Rule

μœ„μ˜ κ·Έλ¦Όμ—μ„œ ν•˜λ‚˜μ˜ 원은 μ†Œν”„νŠΈμ›¨μ–΄ λ‚΄μ—μ„œ λΆ„λ¦¬λœ 각각의 역할을 λ‚˜νƒ€λƒ„. 일반적으둜 이λ₯Ό 잘 μ μš©ν•  수둝 점점 더 κ³ μˆ˜μ€€μ˜ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ™„μ„±μ‹œν‚¬ 수 있음. μ›μ˜ 외뢀와 κ°€κΉŒμšΈ 수둝 λ©”μ»€λ‹ˆμ¦˜μ˜ ν‘œν˜„μ„ μ˜λ―Έν•¨. μ›μ˜ 내뢀와 κ°€κΉŒμšΈ 수둝 μ •μ±… (policy)λ₯Ό μ˜λ―Έν•¨.

클린 아킀텍쳐λ₯Ό κ΅¬μ„±ν•˜λŠ” κ°€μž₯ 기본적인 μ˜μ‘΄μ„± κ·œμΉ™μ€, 각 λ ˆμ΄μ–΄λŠ” 더 μ•ˆμͺ½ μ›μ˜ λ ˆμ΄μ–΄μ—λ§Œ μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€λŠ” 것. μ•ˆμͺ½μ˜ 원은 λ°”κΉ₯ μͺ½μ˜ λ ˆμ΄μ–΄μ— λŒ€ν•΄ μ „ν˜€ μ•Œμ§€ λͺ»ν•œ μƒνƒœλ‘œ λ™μž‘ν•  수 μžˆμ–΄μ•Ό 함. μ•ˆμͺ½ 원을 ν‘œν˜„ν•˜λŠ” μ½”λ“œμ—λŠ” λ°”κΉ₯ μͺ½ 원을 ν‘œν˜„ν•˜λŠ” μ½”λ“œμ˜ κ·Έ μ–΄λ–€ (클래슀, ν•¨μˆ˜, λ³€μˆ˜ λ“±λ“±) μ½”λ“œλ“€λ„ μ‚¬μš©ν•΄μ„œλŠ” μ•ˆλ¨. μ™ΈλΆ€μ—μ„œ μ‚¬μš©ν•˜λŠ” 데이터 ν˜•μ‹ λ˜ν•œ, λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•΄μ„œλŠ” μ•ˆλ¨. 이λ₯Ό ν†΅ν•΄μ„œ μ™ΈλΆ€ μ›μ˜ 변경이 λ‚΄λΆ€ μ›μ˜ λ³€κ²½μœΌλ‘œ 이어지지 μ•Šλ„λ‘ 섀계 ν•  수 있음.

Entities

μ—”ν‹°ν‹°λŠ” 전사적 λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ„ μΊ‘μŠν™” ν•˜λŠ” 역할을 함. λ©”μ†Œλ“œλ₯Ό κ°€μ§„ 객체, 데이터 ꡬ쑰의 μ§‘ν•©, λ‹€μ–‘ν•œ ν•¨μˆ˜ 등이 μ—”ν‹°ν‹° 역할을 μˆ˜ν–‰ν•  수 있음. μ „μ‚¬μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” λ‹€μ–‘ν•œ μ†Œν”„νŠΈμ›¨μ–΄κ°€ ν•˜λ‚˜μ˜ μ—”ν‹°ν‹°λ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•  수만 μžˆλ‹€λ©΄, μ–΄λ–€μ‹μœΌλ‘œ κ΅¬ν˜„ν•˜λ“  상관 μ—†μŒ.

전사적 μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ΅¬ν˜„ν•˜λŠ”κ²Œ μ•„λ‹ˆλΌ, 단일 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬ν˜„ν•˜λŠ” 거라면, μ•± λ‚΄μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ 객체λ₯Ό ν‘œν˜„ν•˜λ©΄ 됨. μ—”ν‹°ν‹°λ₯Ό κ΅¬ν˜„ν•  λ•ŒλŠ” μ„œλΉ„μŠ€ λ‚΄μ—μ„œ κ°€μž₯ 일반적인 ν˜•νƒœλ‘œ κ³ μˆ˜μ€€μ˜ κ·œμΉ™μ„ ν‘œν˜„ν•΄μ•Όν•¨. μ™ΈλΆ€ μš”μ†Œκ°€ λ³€κ²½λ˜λ”λΌλ„ 거의 λ³€ν•˜μ§€ μ•Šκ³ , 정말 ν•„μˆ˜μ μΈ μ΅œν›„μ˜ κ²½μš°μ—λ§Œ μ—”ν‹°ν‹° μ½”λ“œκ°€ λ³€κ²½λ˜λ„λ‘ 뢄리해야함. 예λ₯Ό λ“€μ–΄, νŽ˜μ΄μ§€ μ΄λ™μ΄λ‚˜ λ³΄μ•ˆ κ·œμΉ™μ΄ λ³€ν•œλ‹€κ³  ν•΄μ„œ μ—”ν‹°ν‹°μ˜ μ½”λ“œκ°€ λ³€ν™”ν•΄μ„œλŠ” μ•ˆλ¨. μ•±μ˜ κ·Έ μ–΄λ–€ λ ˆμ΄μ–΄μ—μ„œ λ°œμƒν•˜λŠ” 변화도 엔티티에 영ν–₯을 μ£Όμ§€ μ•Šλ„λ‘ 주의.

Use Cases

유즈 μΌ€μ΄μŠ€ 레벨의 μ½”λ“œλŠ” μ§€κΈˆ κ΅¬ν˜„ν•˜κ³ μž ν•˜λŠ” 앱에 νŠΉν™”λœ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 듀어감. ν˜„μž¬ κ΅¬ν˜„ν•˜λŠ” μ‹œμŠ€ν…œμ˜ λͺ¨λ“  유즈 μΌ€μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ³  μΊ‘μŠν™” ν•΄μ•Ό 함. μ•± λ‚΄μ˜ μ—”ν‹°ν‹°λ₯Ό 전사적인 레벨의 λΉ„μ¦ˆλ‹ˆμŠ€ λ£°κ³Ό μ—°κ²°ν•˜λŠ” 역할을 함.

λ‹Ήμ—°νžˆ 이 λ ˆμ΄μ–΄μ˜ λ³€ν™”κ°€ 엔티티에 영ν–₯을 μ€˜μ„œλŠ” μ•ˆλ¨. λ˜ν•œ, 유즈 μΌ€μ΄μŠ€ λ ˆμ΄μ–΄ μ™ΈλΆ€μ˜ λ‹€λ₯Έ λ ˆμ΄μ–΄, 즉 λ°μ΄ν„°λ² μ΄μŠ€, UI, ν”„λ ˆμž„μ›Œν¬ 등이 유즈 μΌ€μ΄μŠ€ λ ˆμ΄μ–΄μ— 영ν–₯을 μ€˜μ„œλ„ μ•ˆλ¨. λ°˜λ“œμ‹œ 관심사 뢄리가 λ˜μ–΄μ•Ό 함.

유즈 μΌ€μ΄μŠ€λŠ” μ•± νŠΉν™”μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ 룰을 κ΅¬ν˜„ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ, μ•±μ˜ μ‚¬μš© λ°©μ‹μ΄λ‚˜ λΉ„μ¦ˆλ‹ˆμŠ€ λ£° λ³€ν™”μ—λŠ” λ‹Ήμ—°νžˆ μœ μ¦ˆμΌ€μ΄μŠ€ 변화도 λ°œμƒν•΄μ•Όν•¨. 유즈 μΌ€μ΄μŠ€μ˜ 상세 λ™μž‘ 방식을 이 λ ˆμ΄μ–΄μ—μ„œ κ΅¬ν˜„ν•˜λ©΄ 됨.

Interface Adapters

μœ μ¦ˆμΌ€μ΄μŠ€μ™€ μ—”ν‹°ν‹°μ—μ„œ μ‚¬μš©ν•˜λŠ” 데이터 포맷을 λ°μ΄ν„°λ² μ΄μŠ€λ‚˜ μ›Ήμ„œλΉ„μŠ€μ™€ 같은 μ™ΈλΆ€ μš”μ†Œμ—μ„œ μ‚¬μš©ν•˜κΈ° νŽΈν•œ λͺ¨λΈλ‘œ λ³€κ²½ν•΄μ£ΌλŠ” μ–΄λŒ‘ν„°λ“€μ˜ 집합이닀. GUI μ•±μ—μ„œ ν”νžˆ λ§ν•˜λŠ” MVC 아킀텍쳐와 같은 ꡬ쑰가 이 λ ˆμ΄μ–΄μ— ν¬ν•¨λœλ‹€. Presenter, View, Controller λ₯Ό λͺ¨λ‘ μ΄κ³³μ—μ„œ μž‘μ„±ν•˜λ©΄ λœλ‹€. λͺ¨λΈμ€ μ»¨νŠΈλ‘€λŸ¬μ—μ„œ 유즈 μΌ€μ΄μŠ€λ‘œ μ „λ‹¬ν•˜λŠ” λ‹¨μˆœν•œ 데이터 ꡬ쑰이고, 유즈 μΌ€μ΄μŠ€μ—μ„œ Presenter와 View 둜 전달할 λ•Œλ„ λ™μΌν•˜κ²Œ μ‚¬μš©λœλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€λ‘œ λ³΄λ‚΄λŠ” 데이터 포맷으둜 λ³€κ²½ν•  λ•Œλ„ λ™μΌν•˜κ²Œ 이 λ ˆμ΄μ–΄μ— μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ λœλ‹€. λ‹€λ§Œ, 이 λ ˆμ΄μ–΄μ˜ μ½”λ“œλ“€μ€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ λ™μž‘μ›λ¦¬λŠ” μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€ 데이터 λͺ¨λΈμ„ μ•Œμ•„μ„œλŠ” μ•ˆλœλ‹€. SQL 을 μ‚¬μš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€κ°€ λŒ€μƒμΌ 경우, SQL μžμ²΄μ— κ΄€λ ¨λœ 둜직만 이 λ ˆμ΄μ–΄μ— μž‘μ„±ν•˜κ³ , μž‘μ„±λœ SQL λ˜ν•œ λ…λ¦½λœ λ°μ΄ν„°λ² μ΄μŠ€ μΈν„°νŽ˜μ΄μŠ€ μ–΄λŒ‘ν„° μ½”λ“œμ— κ΅¬ν˜„λ˜μ–΄μ•Ό ν•œλ‹€. νŠΉμ • SQL λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ κΈ°λŠ₯이 ν¬ν•¨λ˜μ–΄μ„œλŠ” μ•ˆλœλ‹€.

μœ„μ˜ μ˜ˆμ‹œ 외에도 λ‚΄λΆ€μ˜ 자료ꡬ쑰λ₯Ό 외뢀와 톡신할 λ•Œ μ‚¬μš©λ˜λŠ” 데이터 λ³€ν™˜ μ½”λ“œλŠ” λͺ¨λ‘ 이 계측에 κ΅¬ν˜„ν•œλ‹€.

Frameworks and Drivers

κ°€μž₯ λ°”κΉ₯ 원은 λ°μ΄ν„°λ² μ΄μŠ€, μ›Ή ν”„λ ˆμž„μ›Œν¬ λ“±κ³Ό 같은 λ‹€μ–‘ν•œ νˆ΄λ“€μ˜ 집합이닀. 보톡 μ•ˆμͺ½ 원과 ν†΅μ‹ ν•˜λŠ” μ½”λ“œλ§Œ μž‘μ„±ν•˜λ©΄ λœλ‹€.

μ‹€μ œ μ›Ήμ˜ 상세 μ½”λ“œ, λ°μ΄ν„°λ² μ΄μŠ€μ˜ 상세 μ½”λ“œ 등도 μ΄κ³³μ—μ„œ μž‘μ„±ν•œλ‹€.

Only Four Circles?

μ—¬κΈ°μ„œ 보여쀀 μ›ν˜• κ΅¬μ‘°λŠ” λ„μ‹μ μœΌλ‘œ 클린 아킀텍쳐λ₯Ό ν‘œν˜„ν•œ 것 뿐이닀. 이 보닀 더 λ§Žμ€ 계측 ꡬ쑰가 ν•„μš”ν•œ κ²½μš°λ„ μžˆλ‹€. λ‹€λ§Œ, Dependency Rule λ§Œμ€ λ°˜λ“œμ‹œ μ§€μΌœμ Έμ•Ό ν•œλ‹€. μ½”λ“œλ“€μ˜ μ˜μ‘΄μ„±μ€ 항상 μ•ˆμͺ½μœΌλ‘œλ§Œ ν–₯ν•΄μ•Ό ν•œλ‹€. μ•ˆμͺ½ 원을 ν–₯ν•  수둝 좔상화가 μ‹¬ν™”λœλ‹€κ³  보면 되고, λ°”κΉ₯ 원을 ν–₯ν•  수둝 더 μžμ„Έν•œ μ½”λ“œκ°€ λ“€μ–΄κ°„λ‹€κ³  λ³΄λ©΄λœλ‹€.

Crossing boundaries

λ‹€μ΄μ–΄κ·Έλž¨μ˜ μš°ν•˜λ‹¨μ— 보면 μ›μ˜ 경계선을 μ§€λ‚˜κ°€κ±°λ‚˜ ν†΅μ‹ ν•˜λŠ” μ˜ˆμ œκ°€ μžˆλ‹€. μ˜ˆμ œμ—μ„œλŠ” Controller와 Presenter κ°€ λ‚΄λΆ€ 계측인 Use case와 ν†΅μ‹ ν•˜λŠ” 방식을 보여쀀닀. Controllerμ—μ„œ μ‹œμž‘ν•΄μ„œ use case둜 μ΄λ™ν•œ λ‹€μŒ, presenterμ—μ„œ κ²°κ³Όλ₯Ό μ²˜λ¦¬ν•˜κ³  μžˆλ‹€. UML의 μ˜μ‘΄μ„±μ„ μžμ„Ένžˆ 보면, ν•œμͺ½ λ°©ν–₯으둜만 흐λ₯΄λŠ” 것을 μ•Œ 수 μžˆλ‹€. ControllerλŠ” Use case Input port의 κ΅¬ν˜„μ²΄λ₯Ό μ‚¬μš© ν•˜μ—¬ use caseλ₯Ό μ „λ‹¬ν•˜κ³ , PresenterλŠ” use case output port의 κ΅¬ν˜„μ²΄λ₯Ό μž‘μ„±ν•œλ’€ use caseκ°€ μ„ΈλΆ€ λ‚΄μš©μ„ λͺ¨λ₯΄κ³  μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•œλ‹€. 주의 점은, 두 계측을 μ—°κ²°ν•˜λŠ” interface/port/adapterλŠ” λͺ¨λ‘ λ‚΄λΆ€ 계측인 use caseμ—μ„œ κ΄€λ¦¬ν•œλ‹€λŠ” 점이닀.

μ΄λŸ¬ν•œ 방식을 μ˜μ‘΄μ„± μ—­μ „ (Dependency Inversion Principle) 이라고 ν•œλ‹€. μžλ°”μ™€ 같은 μ–Έμ–΄λ₯Ό 예둜 λ“€λ©΄, μƒμ†κ΄€κ³„μ˜ ν”Œλ‘œμš°λ₯Ό 데이터 ν”Œλ‘œμš°μ™€ μ •λ°˜λŒ€λ‘œ μ„€κ³„ν•˜λ©΄ λœλ‹€.

Use caseκ°€ presenterλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•˜λŠ” 상황을 보자. Dependency Rule 에 따라 Use caseκ°€ 직접 presenterλ₯Ό ν˜ΈμΆœν•΄μ„œλŠ” μ•ˆλœλ‹€ (out -> in만 ν•΄μ•Όν•˜λŠ” κ·œμΉ™μ— μœ„λ°°λ¨.) 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ use case 계측에 interfaceλ₯Ό μ„ μ–Έ ν•œλ‹€ (κ·Έλ¦Όμ—μ„œλŠ” Use Case Output Port). PresenterλŠ” 이에 λŒ€ν•œ κ΅¬ν˜„μ²΄λ₯Ό λ§Œλ“€μ–΄ λ‘”λ‹€. Use caseλŠ” μžμ‹ μ˜ μ„ μ–Έν•œ interfaceλ§Œμ„ μ‚¬μš©ν•˜μ—¬ presenter와 독립적인 μ½”λ“œκ°€ λ˜λ„λ‘ κ΅¬ν˜„ν•  수 μžˆλ‹€.

클린 μ•„ν‚€ν…μ³μ˜ λͺ¨λ“  계측 경계λ₯Ό μ§€λ‚˜κ°€λŠ” μ½”λ“œλ“€μ€ μœ„μ˜ μ˜ˆμ œμ™€ λ™μΌν•˜κ²Œ κ΅¬ν˜„ν•˜λ©΄ λœλ‹€. 동적 λ‹€ν˜•μ„±μ„ ν™œμš©ν•˜λ©΄ 이λ₯Ό μ‰½κ²Œ κ΅¬ν˜„ν•  수 있고, dependency rule을 μœ„λ°°ν•˜μ§€ μ•Šκ²Œ λœλ‹€.

What data crosses the boundaries

계측 경계λ₯Ό μ§€λ‚˜λŠ” 데이터 κ΅¬μ‘°λŠ” 일반적으둜 맀우 λ‹¨μˆœν•œ ꡬ쑰여야 ν•œλ‹€. DTO (Data Transfer Object)λ‚˜ κ°„λ‹¨ν•œ ꡬ쑰체λ₯Ό μ‚¬μš©ν•΄λ„ λœλ‹€. κ²½μš°μ— λ”°λΌμ„œλŠ” ν•¨μˆ˜ 호좜의 λ‹¨μˆœλ§€κ°œλ³€μˆ˜λ§Œ ν•„μš”ν•  λ•Œλ„ μžˆλ‹€. μ€‘μš”ν•œ 점은, μ™„μ „νžˆ λ…λ¦½λœ (고립된) λ‹¨μˆœν•œ 데이터 ꡬ쑰여야 ν•œλ‹€λŠ” 것이닀. λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•˜λŠ” Entityλ‚˜ μ™ΈλΆ€μ—μ„œ μ‚¬μš©ν•˜λŠ” Database row λ“±κ³Ό 같은 직접적인 객체듀을 μ „λ‹¬ν•΄μ„œλŠ” μ•ˆλœλ‹€. 데이터 전달도 μ—­μ‹œλ‚˜ Dependency Rule을 μœ„λ°°ν•˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

예λ₯Ό λ“€μ–΄, λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ ν”„λ ˆμž„μ›Œν¬ 듀은 query μš©μ²­μ— λŒ€ν•΄ λ°μ΄ν„°λ² μ΄μŠ€κ°€ ν‘œν˜„ν•˜κΈ° νŽΈν•œ 포맷의 데이터λ₯Ό λ°˜ν™˜ν•œλ‹€. 이λ₯Ό RowStructure라고 ν•˜μž. ν”„λ ˆμž„μ›Œν¬ λ ˆμ΄μ–΄μ—μ„œ λ°›μ•„μ˜¨ 이 ꡬ쑰λ₯Ό κ·ΈλŒ€λ‘œ μ•ˆμͺ½ κ³„μΈ΅μœΌλ‘œ μ „λ‹¬ν•΄μ„œλŠ” μ•ˆλœλ‹€. μ΄λŠ” μ™ΈλΆ€μ˜ ꡬ쑰λ₯Ό λ‚΄λΆ€μ˜ 계측이 직접 μ•Œκ³  μ‚¬μš©ν•˜λŠ”κ²Œ λ˜λ―€λ‘œ, λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ³€κ²½ν•˜λŠ” λ“±μ˜ μ™ΈλΆ€ 변화에 λ‚΄λΆ€ 계측이 영ν–₯을 λ°›κ²Œ λœλ‹€.

κ·ΈλŸ¬λ―€λ‘œ μ™ΈλΆ€μ—μ„œ λ‚΄λΆ€λ‘œ 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” κ²½μš°μ—λŠ” λ°˜λ“œμ‹œ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•˜λŠ” 데이터 ꡬ쑰에 맞게 λ³€κ²½ν•˜μ—¬ 전달해야 ν•œλ‹€.

Conclusion

클린 아킀텍쳐 κ·œμΉ™μ„ μ§€ν‚€λŠ” 것은 크게 μ–΄λ ΅μ§€ μ•Šκ³ , μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ³ μˆ˜μ€€μœΌλ‘œ μœ μ§€ν•˜λŠ”λ° 큰 도움을 μ€€λ‹€. μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ‹€μ–‘ν•œ 계측 ꡬ쑰둜 λ‚˜λˆ„κ³ , Dependency Rule을 μ€€μˆ˜ν•˜λ©΄, μžμ—°μ μœΌλ‘œ ν…ŒμŠ€νŠΈν•˜κΈ° 쉽고 이에 따라 λ‹€μ–‘ν•œ 이점을 κ°–λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ§Œλ“€ 수 μžˆλ‹€. μ™ΈλΆ€ μš”μ†Œμ˜ κ·Έ 어떀것이 λ³€ν™”/μ‚­μ œ λ˜λ”λΌλ„ μ΅œμ†Œν•œμ˜ λ³€κ²½μœΌλ‘œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μœ μ§€ν•  수 μžˆλ‹€.