KR_CS_Architecture - somaz94/DevOps-Engineer GitHub Wiki

Q8 & Q9: 클린 μ•„ν‚€ν…μ²˜μ™€ 3-Tier μ•„ν‚€ν…μ²˜

질문: 클린 μ•„ν‚€ν…μ²˜μ˜ 계측 ꡬ쑰λ₯Ό μ„€λͺ…ν•˜μ„Έμš”. λ˜ν•œ 전톡적인 3-Tier μ•„ν‚€ν…μ²˜μ™€ ν˜„λŒ€ μ›Ή κ°œλ°œμ—μ„œ 계측 경계가 μ–΄λ–»κ²Œ λ³€ν™”ν–ˆλŠ”μ§€ μ„€λͺ…ν•˜μ„Έμš”.


μ£Όμš” μš©μ–΄

μš©μ–΄ μ„€λͺ…
Clean Architecture λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ™ΈλΆ€ μΈν„°νŽ˜μ΄μŠ€μ™€ λΆ„λ¦¬ν•˜λŠ” 섀계 방법둠
Entities 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™ 계측 (κ°€μž₯ λ‚΄λΆ€)
Use Cases μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 계측
Interface Adapters Use Case와 μ™ΈλΆ€ μ‹œμŠ€ν…œ κ°„ λ³€ν™˜ 계측
Frameworks & Drivers κ°€μž₯ μ™ΈλΆ€ 계측 β€” DB, μ›Ή ν”„λ ˆμž„μ›Œν¬, λ””λ°”μ΄μŠ€ λ“œλΌμ΄λ²„
3-Tier Architecture Presentation, Application, Data 3계측 ꡬ쑰
WAS Web Application Server β€” λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 동적 μ½˜ν…μΈ  처리

클린 μ•„ν‚€ν…μ²˜ (Clean Architecture)

Robert C. Martin("Uncle Bob")이 μ œμ•ˆ. λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 ν”„λ ˆμž„μ›Œν¬Β·DBΒ·UI에 λ…λ¦½μ μœΌλ‘œ λ™μž‘ν•˜λ„λ‘ 섀계.

        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚   Frameworks & Drivers  β”‚  ← DB, Web, UI, μ™ΈλΆ€ API
        β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
        β”‚  β”‚ Interface Adaptersβ”‚  β”‚  ← Controller, Presenter, Gateway
        β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚
        β”‚  β”‚  β”‚  Use Cases  β”‚  β”‚  β”‚  ← μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
        β”‚  β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚  β”‚
        β”‚  β”‚  β”‚  β”‚Entitiesβ”‚  β”‚  β”‚  β”‚  ← 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™
        β”‚  β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚  β”‚
        β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚
        β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

핡심 원칙

원칙 μ„€λͺ…
독립성 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 UIΒ·DBΒ·ν”„λ ˆμž„μ›Œν¬μ— 독립적
ν…ŒμŠ€νŠΈ μš©μ΄μ„± μ™ΈλΆ€ μš”μ†Œ 없이 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 단독 ν…ŒμŠ€νŠΈ κ°€λŠ₯
가독성 λͺ…ν™•ν•˜κ³  μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œ ꡬ쑰

계측 ꡬ쑰

계측 μ—­ν• 
Entities 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ 객체와 κ·œμΉ™
Use Cases Entitiesλ₯Ό ν™œμš©ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 κ΅¬ν˜„
Interface Adapters Use Cases와 μ›ΉΒ·DBΒ·μ™ΈλΆ€ μ‹œμŠ€ν…œ κ°„ 쀑계
Frameworks & Drivers DB, μ›Ή ν”„λ ˆμž„μ›Œν¬, λ””λ°”μ΄μŠ€ λ“œλΌμ΄λ²„ λ“± ꡬ체적 도ꡬ

3-Tier μ•„ν‚€ν…μ²˜

전톡적 ꡬ쑰

계측 μ—­ν• 
Presentation Layer μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ β€” μž…λ ₯ μˆ˜μ‹ , κ²°κ³Ό 좜λ ₯
Application Layer λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 β€” λͺ…λ Ή 처리, μ˜μ‚¬κ²°μ •
Data Layer λ°μ΄ν„°λ² μ΄μŠ€ β€” 데이터 μ €μž₯ 및 쑰회

전톡적 방식 vs ν˜„λŒ€ μ›Ή 개발 비ꡐ

ν•­λͺ© 전톡적 3-Tier ν˜„λŒ€ μ›Ή 개발
계측 뢄리 λͺ…ν™•ν•œ 계측 경계 경계 λͺ¨ν˜Έ β€” 계측 톡합 κ²½ν–₯
μ›Ή μ„œλ²„ 정적 μ½˜ν…μΈ λ§Œ 제곡 정적·동적 μ½˜ν…μΈ  λͺ¨λ‘ 제곡
μ•± μ„œλ²„ (WAS) λͺ¨λ“  λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 처리 ν”„λ ˆμž„μ›Œν¬μ— λ‚΄μž₯
ν™•μž₯μ„± 쀑간 계측 μΆ”κ°€ 방식 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€, μ»¨ν…Œμ΄λ„ˆ λ…Έλ“œ
μ˜ˆμ‹œ 기술 Apache + WebLogic + Oracle Node.js, Spring Boot, Django

ν˜„λŒ€ ν”„λ ˆμž„μ›Œν¬(Spring Boot의 Tomcat, Django의 Gunicorn, Node.js)λŠ” μ•± μ„œλ²„λ₯Ό λ‚΄μž₯ν•˜μ—¬ 별도 WASκ°€ λΆˆν•„μš”ν•΄μ‘Œλ‹€.


참고 자료

⚠️ **GitHub.com Fallback** ⚠️