본문 바로가기
프로그래밍/Clean Architecture

Clean Architecture 정의

by startSW 2023. 8. 29.

클린 아키텍처는 소프트웨어 시스템을 설계하고 구조화하는 데 사용되는 개념적인 아키텍처 원칙의 집합입니다. 이 아키텍처는 시스템의 유지보성, 확장성, 테스트 용이성 등을 개선하면서 더 나은 코드 품질과 구조를 달성하기 위해 고안되었습니다.

이 개념은 소프트웨어 시스템의 구성 요소를 서로 분리함으로써 시스템을 더욱 견고하고 유연하게 만들 수 있습니다.

로버트 C. 마틴(Robert C. Martin)의 책 "클린 아키텍처"에서 자세히 설명되었습니다.


클린 아키텍처의 주요 원칙과 구성 요소는 다음과 같습니다:

1. 의존성 규칙 : 클린 아키텍처는 의존성을 관리하는 규칙을 강조합니다. 더 안쪽의 계층은 더 바깥쪽의 계층에 의존해서는 안 됩니다. 이를 통해 시스템의 유연성과 모듈성이 향상됩니다.

2. 계층 구조 : 클린 아키텍처는 주로 다양한 계층으로 시스템을 구분합니다. 각 계층은 특정한 책임과 역할을 가지며, 상위 계층은 하위 계층에 의존성을 가집니다. 전형적으로는 다음과 같은 계층으로 구성됩니다.

  • 사용자 인터페이스(UI): 사용자와 상호 작용하는 부분으로, 사용자의 요청을 처리하고 화면을 제공합니다.
  • 응용 프로그램: 사용자의 요청을 처리하고 도메인 계층으로부터 요구된 작업을 수행합니다. 비즈니스 논리를 포함하며, 도메인 계층과 인터페이스 어댑터 사이에서 중개 역할을 합니다.
  • 도메인: 시스템의 핵심 비즈니스 논리와 규칙을 포함하는 부분으로, 시스템의 핵심 기능을 정의하고 구현합니다.
  • 인터페이스 어댑터: 외부와의 통신을 처리하는 부분으로, 사용자 인터페이스나 외부 서비스와의 상호 작용을 도메인 계층에 맞게 변환하고 전달합니다.

3. 의존성 역전 원칙 : 이 원칙은 고수준 모듈이 저수준 모듈에 의존하지 말아야 하며, 둘 모두가 추상화에 의존해야 한다는 것을 강조합니다. 이를 통해 모듈 간의 결합도를 낮추고 재사용성을 높일 수 있습니다.

4. 인터페이스 분리 원칙 : 클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않아야 한다는 원칙입니다. 인터페이스는 클라이언트에 필요한 기능만 노출해야 하며, 이를 통해 불필요한 의존성을 방지할 수 있습니다.

5.  단일 책임 원칙: 각 모듈 또는 클래스는 하나의 주요 책임을 가져야 합니다. 이를 통해 코드의 응집도를 높이고 변경이 발생할 때 영향을 최소화할 수 있습니다.

6. 개방/폐쇄 원칙 : 코드는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 합니다. 즉, 새로운 기능을 추가할 때는 기존 코드를 수정하지 않고 확장할 수 있어야 합니다.

클린 아키텍처는 이러한 원칙을 통해 시스템을 잘 구조화하고 관리 가능한 형태로 유지하는 데 도움을 줍니다. 이는 장기적인 개발 생산성과 시스템의 변화에 대한 대응력을 향상시키는 데 기여할 수 있습니다.