Clean Architecture

KwangYoung Kim·2022년 12월 18일
0

많은 모바일앱 개발자들이 적용하고 있는 아키텍처이다.
그래서 나도 적용해보고 어떤부분에서 좋고 어떤방식으로 사용해야 내 상황에 맞을 지 확인해보고싶었다.
하지만 실제로 프로젝트에 적용해보거나 제대로된 이해를 가지고 있다고 보기 어렵다.
해서 개념적인 부분을 정리하고자 한다.

CleanArchitecture란?

클린아키텍처를 검색하면 이런 이미지가 쏟아진다.
다양한 시스템아키텍처들의 공통적인 목표는 관심사 분리이고 목표를 달성하기 위해 소프트웨어에서 계층을 나누게 된다.
CleanArchitecture에서 제안하는 계층 분리는 위 이미지와 같다.
하지만 이미지만 봐서는 어떤걸 의미하는지 정확히 알기 어려웠다. 해서 조금 더 자세히 풀어보려고한다.

계층

Domain

비즈니스 규칙, 즉 어플리케이션의 목적을 담고 있다. 배달앱은 고객과 업체사이의 배달 중계를 하고 검색앱은 사용자가 원하는 정보를 검색할 수 있도록 한다.
이러한 규칙은 변하기 어렵기 때문에 가장 변화가 적은 계층이다.
위에 보이는 엔티티와 유즈케이스가 포함되며 고수준의 정책이다.

엔티티(Entities)

가장 높은 수준의 규칙을 캡슐화한다.
이말은 가장 변화가 적고 핵심 비즈니스 규칙을 다룬다.

유즈케이스(Use cases)

엔티티를 어플리케이션의 목적에 맞게 사용될 수 있도록 한다.
이 유즈케이스를 보면 어플리케이션이 어떤 기능을 제공하는지 알 수 있다.

Infrastructure

UI, DB, 프레임워크, 장치, 웹 등이 포함되며 변경이 빈번하게 일어날 수 있는 계층이다.
버튼의 형태는 변경되기 쉽지만 앱의 핵심기능은 변경되기 어렵다.
가장 저수준의 정책이다.

Interface Adapter

게이트웨이, 프레젠터, 컨트롤러등이 포함되며 Domain과 Infrastructure를 연결해주는 계층이다.
각 계층에서 사용하기 쉽도록 만들어서 넘겨주는 역할을 한다.
Domain은 비즈니스 규칙이므로 제일 변경될 일이 없어 여러 어플리케이션에 적용이 가능하다.
즉 같은 Domain을 가지고 다른 어플리케이션에 적용하게 된다면 이 Interface Adapter부터 적용하려는 어플리케이션 프레임워크나 상황에 맞게 적용하면 된다.

의존성 규칙

이미지의 과녘(?)을 보면 가장 바깥원부터 중심원까지 있는데 가장 바깥에 있는 저수준의 정책에서 고수준 정책으로 의존을 하게 된다.
핵심 비즈니스 규칙(안쪽 원)은 어떤 프레임워크가 사용되고 어떤 DB 저장방식이 사용되고 어떠한 UI(바깥쪽 원)가 사용되는지 알 필요가없다.
하지만 바깥 원에 속하는 요소들은 안에 있는 원들을 알아야만한다.
그렇기 때문에 안쪽 원의 변경, 즉 비즈니스 규칙의 변경은 바깥원들의 변경을 불러온다. 하지만 바깥원의 변경은 안쪽원에 영향을 미칠 수 없다는 게
규칙이다.

클린 아키텍처는 소프트웨어의 계층을 나눠 관심사의 분리라는 목적을 달성하도록 만든 '개념'이라고 생각이 든다.
나는 모바일앱 개발자이니깐 후에 프로젝트를 진행하면서 직접 적용해보고 이러한 개념이 실제 코드작성에서 어떻게 적용이 되는지 확인하고 글을 작성해보려고 한다.

profile
축구왕이 되고 싶은 안드로이드 개발자

0개의 댓글