study/소프트웨어 공학

클린 아키텍처(Clean Architecture)

836586697769 2024. 7. 7. 17:47

시스템의 각 요소들을 명확하게 분리하면서도 유연하게 연결될 수 있도록 디자인 하는 SW 설계 구조

 

특징

  • 안쪽에는 변경될 가능성이 적은 엔티티를, 바깥쪽에 변경될 가능성이 높은 엔티티를 배치
  • 외부는 내부에 의존 가능하지만 내부는 외부에 의존X → 각 계층 간 의존성이 낮아지고 역할 구분이 확실해짐
  • 구성 요소를 분리하는 모듈식 설계를 하여 테스트 용이성, 유지보수성, 시스템 확장성, 재사용성 향상

 

주요 원칙

  • 의존성 역전 원칙 (Dependency Inversion Principle, DIP): 고수준 모듈은 저수준 모듈에 의존해서는 안 되며 모든 모듈은 추상화에 의존해야 함
  • 폐쇄-개방 원칙 (Open-Closed Principle, OCP): 엔티티(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고 수정에는 닫혀 있어야 함
  • 단일 책임 원칙 (Single Responsibility Principle, SRP): 엔티티는 단 하나의 책임만을 가져야 함

 

디렉터리 구조 예시

- domain/
  - entities/
  - value-objects/
  - repositories/  
- application/
  - services/
  - use-cases/
- infrastructure/
  - database/
  - external-services/
- presentation/
  - controllers/
  - views/
  1. Domain
    • 도메인 객체(Entity, Value Object), 비즈니스 규칙, 도메인 서비스 등이 위치
    • 데이터와 그 데이터를 조작하는 규칙 포함
    • 가장 중심에 위치하며 다른 계층이 의존함
  2. Application
    • 주로 애플리케이션의 특정 기능을 위한 서비스 클래스 등이 위치
    • 도메인 객체들을 조합하여 사용자의 요청에 따른 흐름을 제어
    • 사용자 인터페이스와 도메인 계층 사이의 상호작용을 처리
  3. Infrastructure
    • 데이터베이스나 외부 API 접근을 위한 코드 등이 위치
    • 도메인 레이어와 의존성을 최소화하기 위해 추상화가 일반적으로 사용됨
  4. Presentation
    • 웹 애플리케이션에서는 컨트롤러, 뷰, API 엔드포인트 등 사용자 인터페이스(UI)와 관련된 코드가 위치
    • 사용자의 요청을 받아서 처리하며 사용자와 시스템 간 상호작용을 담당

 

 

참조: https://blog.toktokhan.dev/요즘-대세-clean-architecture-67b80df66c6