--- id: P-REINFORCE-WIKI-ARCH-CLEAN-ARCHITECTURE title: "클린 아키텍처 (Clean Architecture)" category: "10_Wiki/🏗️ Topics_Arch" status: verified canonical_id: "" aliases: ["동심원 아키텍처", "Clean Architecture", "의존성 규칙"] duplicate_of: "" source_trust_level: A confidence_score: 1.0 tags: ["Architecture", "Software_Design", "Domain_Driven", "DIP", "Maintainability"] raw_sources: ["Datacollector_Export_2026-05-02"] last_reinforced: 2026-05-02 github_commit: "" --- # [[클린 아키텍처 (Clean Architecture)]] ## 1. 개요 클린 아키텍처(Clean Architecture)는 로버트 C. 마틴(Robert C. Martin)이 제안한 소프트웨어 설계 패턴으로, **도메인 중심 설계**와 **프레임워크 독립성**을 핵심 원칙으로 삼는다. 시스템을 동심원 형태의 계층으로 나누고, 의존성의 방향을 항상 안쪽(도메인)으로만 향하게 하여 외부 기술 변화에 강건한 구조를 만든다. ## 2. 동심원 계층 구조 - **Entities (엔티티)**: 가장 안쪽 원. 핵심 비즈니스 규칙을 담은 전사적 객체. 외부 변화에 가장 안정적임. - **Use Cases (유스케이스)**: 애플리케이션 특화 비즈니스 규칙. 엔티티를 조정하여 데이터 흐름을 오케스트레이션함. - **Interface Adapters (인터페이스 어댑터)**: 외부와 도메인 사이의 번역기. 컨트롤러, 프리젠터, 리포지토리 등이 포함됨. - **Frameworks & Drivers**: 가장 바깥쪽 원. DB, 웹 프레임워크, UI 등 세부 사항. 언제든 교체 가능한 플러그인처럼 동작해야 함. ## 3. 핵심 원칙: 의존성 규칙 (Dependency Rule) - 소스 코드 의존성은 반드시 **안쪽 원(고수준 정책)**으로만 향해야 한다. - 안쪽 원은 바깥쪽 원에 대해 전혀 알지 못해야 하며, 바깥쪽 원의 함수, 클래스, 변수 등을 참조해서는 안 된다. ## 4. 트레이드오프 - **장점**: 프레임워크 독립성, 테스트 용이성, UI/DB 독립성 확보. - **단점**: 단순한 CRUD 애플리케이션에서는 과도한 엔지니어링(Overkill) 및 보일러플레이트 코드 양산 가능성. ## 5. 지식 연결 (Related) - [[Hexagonal_Architecture]]: 유사한 철학(포트와 어댑터)을 공유하는 아키텍처. - [[Domain_Driven_Design]]: 엔티티와 Bounded Context를 정의하는 방법론. - [[SOLID_Principles]]: 클린 아키텍처를 지탱하는 5대 설계 원칙. ## 🧪 검증 상태 (Validation) - **정보 상태**: 검증 완료 (Verified) - **출처 신뢰도**: A - **검토 이유**: 소프트웨어 아키텍처의 표준 모델로서의 정확성 확보.