토픽 110 / 192·소프트웨어 표준과 법제도
Clean Architecture
Clean Architecture
Robert C. Martin(Uncle Bob)이 제안한 소프트웨어 아키텍처로, 의존성 역전을 통해 비즈니스 로직(도메인)을 프레임워크, UI, 데이터베이스 등 외부 요소로부터 독립시켜 테스트 용이성, 유지보수성, 변경 용이성을 극대화하는 동심원 구조의 아키텍처
목적: 비즈니스 로직 독립, 프레임워크 독립, 테스트 용이성, 유지보수성, 변경 용이성
특징: 의존성 역전, 동심원 구조, 계층 분리, 인터페이스 경계, 프레임워크 독립
계층 구조 (안쪽→바깥쪽)
- •Entities(엔터티): 핵심 비즈니스 규칙, 도메인 객체, 가장 변하지 않는 계층
- •Use Cases(유스케이스): 애플리케이션 비즈니스 규칙, 입출력 포트 정의
- •Interface Adapters(어댑터): Controller, Presenter, Gateway, 데이터 변환
- •Frameworks & Drivers(외부): DB, Web, UI, 프레임워크, 가장 바깥 계층
의존성 규칙(Dependency Rule)
- •의존성은 항상 안쪽(고수준)을 향함
- •외부 계층이 내부 계층에 의존, 반대는 금지
- •내부 계층은 외부 계층의 존재를 모름
Input/Output Port
- •Input Port(Use Case Interface): Use Case가 구현, Controller가 호출
- •Output Port(Repository Interface): Use Case가 정의, 외부 계층이 구현
장점: 비즈니스 로직 테스트 용이, 프레임워크 교체 용이, 변경 영향 최소화, 독립적 개발
단점: 초기 복잡도 높음, 보일러플레이트 코드, 학습 곡선, 작은 프로젝트에 과도함
적용사례: 대규모 엔터프라이즈, 장기 유지보수 시스템, DDD 프로젝트
기술요소: 의존성 역전, 인터페이스, Port/Adapter, SOLID
비교: Clean(동심원/범용) vs Hexagonal(포트어댑터) vs Onion(양파) vs Layered(전통적 계층)
연관: Hexagonal Architecture, DDD, SOLID, 의존성 역전 원칙, 테스트 용이성