[ TIL 46 ] Clean Architecture 기본구성요소

_dodo_hee·2021년 5월 24일
0

CS

목록 보기
2/6
post-thumbnail

Clean Architecture 기본

  • 체계적으로 계층이 분리되어야한다.
  • 각 계층은 서로 맡은 역할을 충실히 수행한다.
  • 계층간의 의존성 관계가 잘 이루어져야한다.

클린아키텍쳐

바깥쪽으로 갈수록 덜 중요한 영역, 안쪽이 코어영역, 세부사항 영역


Clean Architecture 구성요소

안쪽에는 도메인의 영역인 entity, use case
그리고 가장 최상층에는 Infrastructure,
그 둘 사이를 이어주는 adaptor가 있다.

4가지의 구성요소는 서로의 의존도가 어느 정도인가를 기준으로 계층을 이루고 있다.

의존성 규칙의 방향을 보면 가장 외부 UI나 data source가 의존도가 높고⬆️
adaptor, use case, entity의 방향으로 낮아지는 것을⬇️ 볼 수 있습니다.

🎙 의존성 규칙의 핵심 개념

  1. 안쪽의 원(비즈니스 로직) 바깥의 원(UI나 data source)에 대해 전혀 알지 못한다.
  2. 안쪽 영역으로 갈수록 추상화와 정책의 수준이 높아지며⬆️, 반대로 갈수록 구체적인 세부사항으로 구성된다.

🧐 구성요소 자세히 알아보기

  • Entities :
    - 핵심 업무(비즈니스 규칙) 규칙을 캡슐화한다.
    - 메소드가 있는 객체이거나 데이터 구조 및 함수의 집합일 수 있다.
    - 가장 변하지 않고, 외부로부터 영향받지 않는 영역이다.
    - 특정 애플리케이션에 대한 운영 변경은 엔티티 계층에 영향을 주지 않아야 한다.

  • UseCase :
    - 애플리케이션에 해당하는 비즈니스 규칙이 포함되어 있다.
    - 시스템의 모든 사용 사례를 캡슐화하고 구현한다.
    - 사용 사례는 엔터티와의 데이터 흐름을 조율한다.
    - 엔터티가 사용 사례의 목표 달성을 위해 전사적 비즈니스 규칙을 사용하도록 지시한다.
    - 변경해도 엔터티에 영향을 주지 않는다.
    - 데이터베이스, UI, 프레임 워크 등 외부 요소의 변경에 의해 영향을 받지 않는다.

  • Interface-Adators :
    - 일련의 어댑터들로 구성된다.
    - 어댑터는 데이터를 (유스 케이스와 엔티티에게 가장 편리한 형식)
    (데이터베이스나 웹 같은 외부 에이전시에게 가장 편리한 형식)으로 변환한다.
    - 컨트롤러, 프레젠터, 게이트웨이 등이 여기에 속한다.
    - 사용중인 지속성 프레임 워크에 가장 편리한 형식으로 변환됩니다.

  • Infrastructure :
    - 시스템의 핵심 업무와는 관련 없는 세부 사항이다. 언제든 갈아 끼울 수 있다.
    - 프레임워크나, 데이터베이스, 웹서버 등이 여기에 해당된다.

    • 모든 세부 사항이있는 곳이다.
    • 데이터베이스도 세부 사항

4가지의 구성요소는 서로의 의존도가 어느정도인가를 기준으로 계층을 이루고 있습니다.
네 개의 원으로 크게 보았지만, 꼭 원이 네 개만일 필요는 없습니다. 원이 몇개든 의존성 규칙만 안쪽으로 향하면 되고, 안쪽으로 갈수록 추상화 수준이 증가하면 되는 것입니다.


📌 Clean Architecture 의존성 방향

클린 아키텍쳐의 핵심은 의존성 방향에 있다.

경계는 안쪽으로 향해야한다. 안쪽의 원은 바깥쪽의 정보를 알거나,접근하면 안된다.

정말 핵심적인 내용이니 명심하고 사용해야한다.

의존성 방향과 제어흐름이 완전 반대인 경우

유즈케이스가 프레젠터를 호출하는 경우가 있다.
의존성의 원칙대로라면 "경계는 안쪽! 안쪽의 원은 바깥쪽의 정보를 알거나,접근하면 안된다."
프레젠터 -> 유스케이스의 흐름인데, 제어흐름은 유스케이스 -> 프레젠터로 가기 때문이다.

이럴때 "의존성 역전 원칙" 으로
유스케이스 내부에 프레젠터의 인터페이스를 정의하고, 프레젠터에 이 인터페이스를 구현

의존성 방향

점선 화살표 : 실제 제어 흐름
나머지 화살표 : 제어 흐름이 경계를 가로지르는 방법


현업에선?

클린아키텍쳐 파일관리

domain이라는 파일 안에

  • entity
  • interactor
  • use-case
    파일을 관리한다.
    중요하고 기본이 되는 파일을 대부분 관리한다.

view와 view-model에는
데이터는 똑같지만 레이아웃만 변경하거나 UI를 더 업그레이드 시키고 싶을때
베이스 파일에는 문제가 없는 영역이다.


📌 Clean Architecture 결론

  • 급한 프로젝트 상황에선 신경쓰면서 작업 할 수도 없다.
  • 하다보면 완벽한 클린 아키텍쳐 형태를 유지하기 어렵다.
  • 좋은 아키텍처는 개발하는데 더 나은 안정감과 더 큰 생산성을 준다.
  • 아키텍처에는 정말 정답이 없는 것 같습니다.
  • 단점들도 있지만 그만큼의 단점을 커버할만한 장점이 더 크다.
profile
무럭무럭 자라나는 도도 개발성장일기

0개의 댓글