Architecture

클린 아키텍처(Clean Architecture)

TedDev 2025. 1. 30. 21:13
728x90

클린 아키텍처(Clean Architecture)는 로버트 C. 마틴이 제안한 소프트웨어 아키텍처 패턴으로 소프트웨어의 유지보수성과 확장성을 높이기 위해 관심사를 분리하는 구조를 의미한다.

이 아키텍처는 의존성 규칙(Dependency Rule) 을 기반으로 계층을 나누고 핵심 비즈니스 로직이 외부 요소(데이터베이스, UI, 프레임워크 등)에 의존하지 않도록 설계된다.

 

1. 클린 아키텍처의 핵심 원칙

클린 아키텍처는 아래 4가지 원칙을 따른다.

① 독립성(Independence)

  • 프레임워크로부터 독립 🏗️ → 특정 프레임워크에 종속되지 않음 (예: 스프링, 장고 등)
  • UI로부터 독립 🖥️ → 웹, 모바일, CLI 등 다양한 UI에서 사용 가능
  • 데이터베이스로부터 독립 🛢️ → MySQL, PostgreSQL 등과 분리
  • 외부 라이브러리로부터 독립 📦 → 외부 라이브러리에 의존하지 않음

② 의존성 규칙(Dependency Rule)

  • 안쪽 계층은 바깥쪽 계층에 의존할 수 없음
  • 의존성의 방향은 안쪽(핵심 비즈니스 로직)으로만 흐름
  • 바깥쪽 계층(UI, DB, 프레임워크 등)은 안쪽 계층을 모름

 

2. 클린 아키텍처의 계층 구조

클린 아키텍처는 원형 계층 구조로 표현되며, 아래와 같은 네 개의 계층을 가진다.

---------------------------
|   UI / Presentation    |  (Controller, View)
---------------------------
|  Interface Adapters   |  (API, Repository, DTO)
---------------------------
|   Application Layer   |  (Use Case, Service)
---------------------------
|    Domain Layer      |  (Entities, Business Rules)
---------------------------

① 엔티티(Entity, Domain Layer)

  • 가장 핵심적인 비즈니스 규칙을 포함
  • 데이터베이스, 프레임워크 등 외부 환경과 완전히 독립
  • 예: Order, User, Product 등 핵심 모델

② 유스케이스(Use Case, Application Layer)

  • 애플리케이션의 구체적인 비즈니스 로직
  • 도메인(Entity)을 사용하여 특정 기능을 수행
  • 예: 회원가입, 주문 생성, 결제 처리 등

③ 인터페이스 어댑터(Interface Adapters)

  • 데이터를 변환하여 애플리케이션 계층과 외부 시스템을 연결
  • DTO, Repository, API Controller 등이 포함됨
  • 예: UserDTO, OrderRepository, UserController

④ 프레젠테이션(UI) & 인프라스트럭처

  • 사용자 인터페이스 (웹, 모바일, CLI)
  • 데이터베이스, 메시지 브로커, 외부 API 연동 등 포함
  • UI와 비즈니스 로직이 강하게 결합되지 않도록 분리

 

3. 클린 아키텍처의 장점

유지보수성 증가 → 비즈니스 로직과 프레임워크, DB가 분리되어 수정이 용이
확장성 → UI, DB 등을 쉽게 교체 가능
테스트 용이 → 비즈니스 로직을 독립적으로 테스트 가능
의존성 관리 → 핵심 로직이 외부 기술에 종속되지 않음

 

4. 클린 아키텍처 vs 레이어드 아키텍처

특징 레이어드 아키텍처 클린 아키텍처
의존성 방향 데이터베이스, UI에 의존 비즈니스 로직 중심
테스트 용이성 DB, UI 없으면 어려움 독립적인 유닛 테스트 가능
변경 용이성 특정 기술 스택에 종속됨 외부 변경에 영향 적음
유지보수성 서비스 커질수록 복잡해짐 유지보수 용이

 

5. 결론

클린 아키텍처는 소프트웨어를 더욱 유연하고 확장 가능하게 만드는 강력한 설계 원칙이다.
특히 장기적으로 유지보수가 필요한 프로젝트에서 강력한 효과를 발휘한다.

하지만 초기 설계 비용이 높고 모든 프로젝트에 적용할 필요는 없다.
간단한 프로젝트에서는 오버 엔지니어링이 될 수도 있기 때문에, 프로젝트의 복잡도에 따라 적절히 적용하는 것이 중요하다. 🚀

반응형