πŸ‘©‍πŸ’» TECH

[TECH] ν΄λ¦°μ•„ν‚€ν…μ²˜λ₯Ό ν–₯ν•΄μ„œ πŸ’¨

보리 콧ꡬ멍 2023. 12. 8. 16:37

[ν‹°λŒ] ν‹°λŒ ν΄λ¦°μ•„ν‚€ν…μ²˜λ₯Ό ν–₯ν•΄μ„œ πŸ’¨


μ•ˆλ…•ν•˜μ„Έμš” ν‹°ν”Œμ˜ μ•ˆλ“œλ‘œμ΄λ“œ 개발자 μ •μ±„ν˜„μž…λ‹ˆλ‹€πŸ˜†πŸ˜†πŸ˜†πŸ˜†πŸ˜†

μ €λ²ˆμ— λ§μ”€λ“œλ¦° λ””μžμΈ νŒ¨ν„΄μ— μ΄μ–΄μ„œ Clean Architecture에 λŒ€ν•œ μ„€λͺ…을 이어가렀 ν•©λ‹ˆλ‹€!

 

μ™œ μ΄λ ‡κ²Œ λ‹€λ“€ 클린 μ•„ν‚€ν…μ²˜λ₯Ό λ„μž…ν•˜λ € ν•˜λŠ” κ±ΈκΉŒμš”?? 

이 μ΄μœ μ— λŒ€ν•΄ μƒκ°ν•˜κΈ°μœ„ν•΄μ„œλŠ” λ¨Όμ € 생각해보아야 ν•  λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.


πŸ‘©‍πŸ’» κΈ°λŠ₯ VS ꡬ쑰 ?

앱을 λ³Ό λ•Œ κΈ°λŠ₯이 μ€‘μš”ν•˜λ‹€κ³  μƒκ°ν•˜μ‹œλ‚˜μš”? μ•„λ‹ˆλ©΄ ꡬ쑰가 μ€‘μš”ν•˜λ‹€κ³  μƒκ°ν•˜μ‹œλ‚˜μš”?

κΈ°λŠ₯은 μ•±μ˜ κ°€μΉ˜λ₯Ό λ§Œλ“€μ–΄ λ‚Έλ‹€λŠ” μ μ—μ„œ κΈ°λŠ₯이 더 μ€‘μš”ν•˜λ‹€κ³  μƒκ°ν•˜λŠ” μ‚¬λžŒμ΄ 있고

κΈ°λŠ₯κ³Ό 좔가와 μˆ˜μ •μ„ μš©μ΄ν•˜κ²Œ ν•˜λŠ” ꡬ쑰가 더 μ€‘μš”ν•˜λ‹€κ³  μƒκ°ν•˜λŠ” μ‚¬λžŒμ΄ μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

 

ꡬ쑰
μ„ΈκΈ°μ˜ λŒ€κ²° : κΈ°λŠ₯ VS ꡬ쑰

 

사싀 μ €λŠ” μ›λž˜ κΈ°λŠ₯νŒŒμ˜€μŠ΅λ‹ˆλ‹€...

일단 κΈ°λŠ₯이 μžˆμ–΄μ•Ό μ•±μ˜ κ°€μΉ˜κ°€ 생기기 λ•Œλ¬Έμ— κΈ°λŠ₯이 엉망인데 ꡬ쑰가 완벽해도 그게 무슨 μ†Œμš©μ΄μ•Ό 🀷🏻‍♀라고 μƒκ°ν•˜λ˜ μ‚¬λžŒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‹ˆκΉŒ ν‹°λŒμ„ λ¦¬νŒ©ν† λ§ ν•˜κΈ° μ „κΉŒμ§„ 말이죠...

.

.

μ €λŠ” ν‹°λŒμ„ λ¦¬νŒ©ν„°λ§ ν•˜λ©° 'μ†Œν”„νŠΈμ›¨μ–΄ λΉ„μš©'에 λŒ€ν•œ 생각을 더 깊게 ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ†Œν”„νŠΈμ›¨μ–΄ λΉ„μš©μ—μ„œ 개발 단계보단 μœ μ§€λ³΄μˆ˜μ—μ„œ λΉ„μš©μ΄ 더 많이 λ“€μ–΄κ°„λ‹€λŠ” 사싀을 듀어보셨을 것이라 μƒκ°ν•©λ‹ˆλ‹€.

 

μ €λŠ” μ‹€μ œ ν‹°λŒμ„ λ¦΄λ¦¬μ¦ˆν•˜λ©° μžμž˜ν•œ μ‹€μˆ˜λ₯Ό λ°©μ§€ν•  수 μžˆλŠ” μœ λ‹› ν…ŒμŠ€νŠΈμ— 관심을 κ°€μ§€κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 

μœ λ‹›ν…ŒμŠ€νŠΈμ—†μ΄ ν•˜λ‚˜ν•˜λ‚˜ λ‹€μ‹œ κΈ°λŠ₯을 κ°œλ°œν•˜λ‹€ λ³΄λ‹ˆ μš”κ΅¬μ‚¬ν•­μ„ λ†“μΉ˜λŠ” κ²°κ³Όλ₯Ό λ§Œλ“€μ–΄λƒˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 

μ €λŠ” 이런 Testable ν•˜κ³  μœ μ§€λ³΄μˆ˜μ— 더 큰 λΉ„μš©μ„ λ“€μ΄λŠ” 점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ 쒋은 ꡬ쑰λ₯Ό λ§Œλ“œλŠ” 방법에 λŒ€ν•œ 고찰을 ν•˜κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.

 


πŸ‘©‍πŸ’» 쒋은 ꡬ쑰 ?

쒋은 ꡬ쑰? 쒋은 ꡬ쑰가 뭐야..?

일반적으둜 쒋은 ꡬ쑰λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” λ‹€μ–‘ν•œ νŒ¨λŸ¬λ‹€μž„, 섀계원칙(SOLID), 응집원칙 λ“±λ“± λ‹€μ–‘ν•œ 방법이 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

클린 μ•„ν‚€ν…μ²˜λŠ” μ–΄λ–€ μƒν™©μ—μ„œ λ‚˜μ˜¨ κ²ƒμΌκΉŒμš”?

κΈ°μ‘΄ ν”„λ‘œμ νŠΈμ—μ„œ DBλ₯Ό λ°”κΎΈκΈ° μœ„ν•΄μ„  전체 ν”„λ‘œμ νŠΈκ°€ 영ν–₯λ°›λŠ” 문제λ₯Ό λ°œκ²¬ν–ˆκ³  'μ˜μ‘΄μ„± μ—­μ „'μ΄λΌλŠ” 도메인 μ€‘μ‹¬μ˜ 클린 μ•„ν‚€ν…μ²˜κ°€ λŒ€λ‘λ˜κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.

 

* Clean Architecture의 νŠΉμ§• : ν•΅μ‹¬ κ·œμΉ™μ„ λ‹΄κ³  μžˆλŠ” 도메인이 쀑심이며, 도메인이 μ„ΈλΆ€ 사항에 μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€. 

그럼 클린 μ•„ν‚€ν…μ²˜μ— λŒ€ν•œ λ‚΄μš©μ„ 더 μ•Œμ•„λ³ΌκΉŒμš”?

 

 


πŸ‘©‍πŸ’» Clean Architecture μ„€λͺ…

μ˜€λŠ˜λ„ μ €μž‘κΆŒμ΄ 걸릴까 직접 ν”Όκ·Έλ§ˆλ₯Ό μΌ  개발자

클린 μ•„ν‚€ν…μ²˜ν•˜λ©΄ ν”νžˆλ“€ λ³Ό 수 μžˆλŠ” 그림이죠?

 

"Clean Architecture"λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ„€κ³„μ˜ ν•œ λ°©μ‹μœΌλ‘œ, μ‹œμŠ€ν…œμ„ μœ μ§€λ³΄μˆ˜ν•˜κΈ° 쉽고, ν™•μž₯성이 λ›°μ–΄λ‚˜λ©°, 독립적인 ν…ŒμŠ€νŠΈκ°€ κ°€λŠ₯ν•˜λ„λ‘ μ„€κ³„ν•˜λŠ” 데 μ΄ˆμ μ„ 맞μΆ₯λ‹ˆλ‹€. 이 μ•„ν‚€ν…μ²˜λŠ” 크게 λ„€ κ°€μ§€ μ£Όμš” κ³„μΈ΅μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

 

1. μ—”ν‹°ν‹° (Entities) 

이 계측은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 핡심을 μ΄λ£¨λŠ” 도메인 κ°μ²΄λ“€λ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€. 엔티티듀은 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ΄λ‚˜ κ·œμΉ™μ„ λ‹΄λ‹Ήν•˜λ©°, μ™ΈλΆ€ μš”μ†Œμ™€λŠ” λ…λ¦½μ μœΌλ‘œ μš΄μ˜λ©λ‹ˆλ‹€. 이듀은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ°€μž₯ 쀑심적인 λΆ€λΆ„μœΌλ‘œ, κ°€μž₯ 높은 μˆ˜μ€€μ˜ 정책을 κ΅¬ν˜„ν•©λ‹ˆλ‹€.

 

2. 유즈 μΌ€μ΄μŠ€(Use cases)

이 계측은 νŠΉμ • λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λ‹΄λ‹Ήν•©λ‹ˆλ‹€. μ—¬κΈ°μ—λŠ” λ°μ΄ν„°μ˜ μ €μž₯μ΄λ‚˜ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€(UI)와 같은 μ™ΈλΆ€ μš”μ†Œλ“€μ— λŒ€ν•œ 관심은 ν¬ν•¨λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹ , 이 계측은 주둜 μ—”ν‹°ν‹°λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΉμ • λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μˆ˜ν–‰ν•˜κ³ , κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

 

3. μΈν„°νŽ˜μ΄μŠ€ μ–΄λŒ‘ν„° (Interface Adapter)

이 계측은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄λΆ€μ˜ 데이터와 μ™ΈλΆ€ 세계(예: λ°μ΄ν„°λ² μ΄μŠ€, μ›Ή, UI) κ°„μ˜ 톡신을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€. 데이터λ₯Ό μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ ν•©ν•œ ν˜•νƒœλ‘œ λ³€ν™˜ν•˜κ±°λ‚˜, λ°˜λŒ€λ‘œ 외뢀에 μ ν•©ν•œ ν˜•νƒœλ‘œ λ³€ν™˜ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 이 계측은 μ™ΈλΆ€ 세계와 λ‚΄λΆ€ 둜직 κ°„μ˜ κ΅λŸ‰ 역할을 ν•©λ‹ˆλ‹€.

 

4. μ™ΈλΆ€μš”μ†Œ: ν”„λ ˆμž„μ›Œν¬μ™€ λ“œλΌμ΄λ²„ (Frameworks & Drivers)

이 계측은 νŠΉμ • ν”„λ ˆμž„μ›Œν¬λ‚˜ κΈ°μˆ μ— μ˜μ‘΄ν•˜λŠ” 뢀뢄을 μ˜λ―Έν•©λ‹ˆλ‹€. 이듀은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ°€μž₯ λ°”κΉ₯μͺ½ 뢀뢄을 κ΅¬μ„±ν•˜λ©°, λ°μ΄ν„°λ² μ΄μŠ€, μ›Ή ν”„λ ˆμž„μ›Œν¬, 기타 μ™ΈλΆ€ μΈν„°νŽ˜μ΄μŠ€μ™€μ˜ 톡신을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

 

클린 μ•„ν‚€ν…μ²˜μ˜ μ΄λŸ¬ν•œ layerλŠ” 기쀀이 μ• λ§€ν•΄ λΉ„μŠ·ν•œ νŠΉμ§•μ„ κ°€μ§„ ν—₯사고날 μ•„ν‚€ν…μ²˜λ₯Ό ν†΅ν•˜μ—¬ 더 λ§Žμ€ λ‚΄μš©μ„ μ‚΄νŽ΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 


πŸ‘©‍πŸ’» Hexagonal Architecture μ„€λͺ…

ν—₯사고날 μ•„ν‚€ν…μ²˜
ν—₯사고날 μ•„ν‚€ν…μ²˜

ν—₯사고날 μ•„ν‚€ν…μ²˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ„€κ³„μ—μ„œ μ‚¬μš©λ˜λŠ” νŒ¨ν„΄μœΌλ‘œ, 클린 μ•„ν‚€ν…μ²˜μ™€ μœ μ‚¬ν•œ 원칙을 λ”°λ₯΄μ§€λ§Œ λͺ‡ κ°€μ§€ μ£Όμš” 차이점이 μžˆμŠ΅λ‹ˆλ‹€. ν—₯사고날 μ•„ν‚€ν…μ²˜λŠ” "Ports and Adapters" νŒ¨ν„΄μœΌλ‘œλ„ μ•Œλ €μ Έ 있으며, μ΄λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 핡심 λ‘œμ§μ„ μ™ΈλΆ€ μš”μ†Œλ‘œλΆ€ν„° κ²©λ¦¬μ‹œν‚€λŠ” 데 μ΄ˆμ μ„ 맞μΆ₯λ‹ˆλ‹€. μ£Όμš” ꡬ성 μš”μ†ŒλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

  • 핡심 둜직 (Core Logic): μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ ν¬ν•¨ν•©λ‹ˆλ‹€. 이 λ‘œμ§μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ°€μž₯ 쀑심적인 λΆ€λΆ„μœΌλ‘œ, 변경이 ν•„μš”ν•˜μ§€ μ•Šμ€ μ•ˆμ •μ μΈ μ½”λ“œλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.
  • 포트 (Ports): 핡심 둜직과 μ™ΈλΆ€ μš”μ†Œ(예: μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€, λ°μ΄ν„°λ² μ΄μŠ€) κ°„μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 이 ν¬νŠΈλŠ” 핡심 λ‘œμ§μ„ μ™ΈλΆ€ μ„Έκ³„λ‘œλΆ€ν„° κ²©λ¦¬μ‹œν‚€κ³ , μ™ΈλΆ€ μš”μ†Œκ°€ 핡심 둜직과 톡신할 수 있게 ν•©λ‹ˆλ‹€.
  • μ–΄λŒ‘ν„° (Adapters): μ‹€μ œ μ™ΈλΆ€ μš”μ†Œ(예: μ›Ή μ„œλ²„, λ°μ΄ν„°λ² μ΄μŠ€)와 핡심 둜직 μ‚¬μ΄μ˜ μ—°κ²° 역할을 ν•©λ‹ˆλ‹€. μ–΄λŒ‘ν„°λŠ” 포트λ₯Ό 톡해 핡심 둜직과 ν†΅μ‹ ν•˜λ©°, μ™ΈλΆ€ μš”μ†Œμ™€μ˜ 데이터 λ³€ν™˜μ„ λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

 


πŸ‘©‍πŸ’» ν‹°λŒμ˜ λͺ©ν‘œ

κ·Έλž˜μ„œ ν‹°λŒ ν”„λ‘œμ νŠΈλŠ” λ‹€μŒκ³Ό 같은 μ•„ν‚€ν…μ²˜λ₯Ό λ”°λ₯΄λ €κ³  ν•©λ‹ˆλ‹€.

 

λ¬Όλ‘  클린 μ•„ν‚€ν…μ²˜λ₯Ό 무쑰건 λ”°λ₯΄λΌλŠ” 말씀을 λ“œλ¦¬λŠ” 게 μ•„λ‹ˆλ©° μ½”λ“œμ˜ 양이 λ§Žμ•„μ§€κ³  νŒ¨ν‚€μ§€λ„ λ§Žμ•„μ§€κ³  λ³΅μž‘λ„κ°€ λ†’μ•„μ§€λŠ” λ“± λ‹€μ–‘ν•œ 단점듀도 μ‘΄μž¬ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ λ‹€λ“€ 본인의 ν”„λ‘œμ νŠΈμ— λ§žλŠ” μ•„ν‚€ν…μ²˜λ₯Ό μ„ νƒν•΄μ„œ κ°œλ°œν•˜μ‹œκΈΈ λ°”λžλ‹ˆλ‹€ :)

 

μ•„λž˜μ˜ λ§ν¬λŠ” μ œκ°€ 클린 μ•„ν‚€ν…μ²˜λ₯Ό κ³΅λΆ€ν•˜λ©° κ°€μž₯ λ§Žμ€ 도움이 λ˜μ—ˆλ˜ μš°μ•„ν•œ ν…Œν¬μ˜ 10λΆ„ λ°ν¬ν†‘μž…λ‹ˆλ‹€.

[10λΆ„ ν…Œμ½”ν†‘] λˆ„λˆ„, λ‹€μ¦μ˜ 클린 μ•„ν‚€ν…μ²˜

https://www.youtube.com/watch?v=Ql7CoQminoM&t=948s

 

 

 

클린 μ•„ν‚€ν…μ²˜λ₯Ό ν–₯ν•΄ μ—΄μ‹¬νžˆ λ¦¬νŒ©ν† λ§ ν•˜κ³  μžˆλŠ” ν‹°λŒμ„ κΈ°λŒ€ν•΄ μ£Όμ„Έμš”!!

λ‹€μŒ 글도 κΈ°λŒ€ λΆ€νƒλ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€:)πŸ€—

κ°μ‚¬ν•©λ‹ˆλ‹€!!

 

⬇️ μ§€κΈˆ ꡬ글 ν”Œλ ˆμ΄ μŠ€ν† μ–΄μ—μ„œ ν‹°λŒ λ‹€μš΄ λ°›κΈ°
https://play.google.com/store/apps/details?id=com.team7.tikkle&hl=ko-KR

πŸ“© Contact : wjdcogus6@gmail.com
πŸ“² SNS : https://www.instagram.com/chaeehyuny/