Groo

Clean Architecture 아키텍처 패턴 본문

프로그래밍 기초/Pattern

Clean Architecture 아키텍처 패턴

김주엽 2020. 4. 30. 02:13

안녕하세요, 오늘은 이전보다 조금 더 어려운 내용인 소프트웨어 아키텍처 패턴을 알아보려고합니다.
수많은 종류의 소프트웨어 아키텍처 패턴 중 오늘은 Clean Architecture 패턴에 대해서 꼼꼼히 살펴보겠습니다.

 🧑‍🏫 Clean Architecture 무엇인가?

지난 2012년 Uncle Bob은 Clean Architecture라는 새로운 소프트웨어 아키텍처 패턴을 발표했습니다. 그는 이 패턴을 활용한다면 SW 개발의 체계적인 구조와 계층들을 분할함에 따라 이전보다 효율적으로 프로그램을 구현가능할 것이라고 말했습니다.

 

ITkonekt 2019 컨퍼런스에서 Clean Architecture 패턴에 대해서 강의 중인 Uncle Bob

또한 그는 지난 2017년 Clean Architecture 패턴에 대해서 자세히 정리한 책을 새롭게 출판하면서 다시 한 번 SW 개발 시장을 놀랍게하였습니다. 아직까지도 Clean Architecture 패턴은 많은 개발자들 사이에서 인기있으며 다양한 의견이 존재합니다.

🎯 Clean Architecture 계층도

Clean Architecture 패턴의 기본은 체계적으로 계층들이 구성되어야한다고 말했습니다. 각 계층들은 서로가 맡은 역할을 충실히 수행해야하며 계층들간의 의존성 관계 또한 잘 이루어져야합니다. 아래는 대표적인 Clean Architecture 패턴의 계층도입니다.

 

출처 : 클린 아키텍처 - 도서출판 인사이트

위의 계층도는 SW 시스템을 이루는 주요 구성요소들과 각 구성요소들이 자리해야하는 위치를 나타내었습니다. 각 계층의 의존성은 항상 경계 안쪽으로 향해야하며 안쪽의 원은 자신의 바깥 원에 대한 정보를 알아서도 또는 접근해서도안됩니다. 이와 같이 체계적으로 분리된 계층 덕분에 UI나 데이터베이스와 같이 외부 요소를 언제든지 최소한의 노력으로 힘들이지 않고 쉽게 수정할 수 있습니다.

📚 Clean Architecture 총 4개의 계층

이번에는 위의 Clean Architecture 패턴의 계층도를 과녁 모양이 아닌 다른 형태로 가공하여 각각의 계층들에 대해서 상세히 알아보겠습니다. Clean Architecture 패턴의 계층은 아래와 같이 총 4가지의 종류로 구성되어있으며 화살표의 방향으로 순차적입니다.

 

출처 : 안드로이드에 Clean Architecture 적용하기 - realm

사용자에게 보여지는 로직과 관련된 Presentation 레이어, 네트워크와 관련하여 상세한 로직을 구현하는 Data 레이어, 사용자의 Usecase를 통해 비즈니스 로직을 구성하는 Domain 레이어 마지막으로 사용자의 개념을 정의하는 Entity 레이어로 이루어집니다.

 

위의 4개의 각 계층들의 의존성은 이전에도 말했듯이 아래로만 발생해야하며 가장 아래의 레이어일 수록 의존성은 그 만큼 낮아야합니다. 그럼 이제 Clean Architecture 패턴의 각 계층들의 자세한 역할과 특징들에 대해서 한 번 알아보도록 하겠습니다.

Presentation 레이어

Clean Architecture 패턴의 계층들 중 최상위 레이어에 위치한 Presentation 레이어는 UI와 관련된 로직을 수행하며 Android와 직접적으로 관련된 일들이 많아 의존성이 가장 높다고 말할 수 있습니다. 또한 이는 아래의 레이어들을 자유롭게 참조 가능합니다.

Data 레이어

Data 레이어는 실질적으로 상세 로직을 구현하는 레이어라고 말할 수 있습니다. 이는 Domain 레이어를 참조 가능하며 Domain 레이어에서 정의한 Repository 인터페이스를 참조하여 Repository를 실질적으로 구현하는 역할을 맡고있습니다. 또한 Data 레이어는 DataSource에게 의존성이 생겨 Android 안드로이드와 관련된 Network 관련 서버 통신을 수행하는 중요한 역할을합니다.

Domain 레이어

Domain 레이어는 위의 Presentation, Data 레이어 심지어 Android 안드로이드와 어떠한 의존성도 이루지 않습니다. 주로 하는 역할은 사용자의 행동 즉 Usecase를 참고하여 Data 레이어에서 Repository를 실직적으로 구현할 수 있도록 Repository 인터페이스를 구성합니다. 또한 Domain 레이어는 순수한 Java 또는 Kotlin 모듈로 구성되며 비즈니스 로직을 구현하는 역할을합니다.

Entity 레이어

Entitiy 레이어는 위의 Domain 레이어에서 파생된 개념입니다. Domain 레이어와 같이 어떠한 곳에 대해서도 의존성을 이루지 않으며 순수한 Java 또는 Kotlin 모듈로 구성됩니다. 또한 다른 플랫폼에서 같은 서비스를 구현한다면 Entity 레이어는 플랫폼에 관계없이 동일한 형태로 구성해야합니다. 보통 Clean Architecture 패턴을 구현하는 개발자들은 Entity 레이어를 포함한 4가지의 계층들을 그대로 사용하지 않으며 이를 재구성하여 Presentation, Data, Domain 총 3가지의 계층으로만 구현하는 것이 일반적입니다.

📊 Clean Architecture 구조도

아래의 그림을 통해 위에서 배운 각 계층들이 어떠한 구조로 프로그램 내에서 이루어지는 알아야합니다. 각 계층들은 의존성 관계를 통해 서로를 구성하며 관계를 맺습니다. Clean Architecture 패턴을 잘 활용하기 위해서는 의존성 관계를 잘 파악해야합니다.

 

Clean Architecture 패턴의 각 계층들의 구조도를 간단히 나타내보았습니다.

👍 글을 마치며

오늘은 소프트웨어 아키텍처 패턴 중 하나인 Clean Architecture 패턴에 대해서 알아보았습니다. Clean Architecture 패턴은 각 계층들의 종류와 특징 및 관계 등 다양한 내용들이 존재하며 이 내용들이 대부분 복잡하여 이해하는데 조금 힘들었을 것이라고 생각합니다. 하지만 앞으로 이 소프트웨어 아키텍처 패턴을 잘 활용한다면 코드를 보다 더 효율적으로 작성할 수 있을 것이며 유지보수 과정 속에서 많은 이점을 얻을 것입니다. 또한 위 글에서 만약 미흡하거나 오류 부분이 존재한다면 댓글로 많은 피드백 부탁드립니다!

Comments