TIL28. Clean Architecture

서동이·2021년 6월 8일
0

Clean Architecture

1. 기본 개념

(1) Architecture?
: 여러가지 컴퓨터 구성요소들에 대한 전반적인 기계적 구조를 설계하는 방법.

(2) Software Architecture?
: 시스템을 쉽게 이해하고,개발하고,유지보수하고,배포할 수 있게 하고 프로그래머의 생산성을 최대화시키는 설계 방법을 의미한다.

(3) Clean Architecture?
: 2012년에 로버트 C. 마틴(Robert C. Martin; aka.Uncle Bob)은 새로운 아키텍처의 방법을 소개했다. 로버트 마틴은 "클린 아키텍쳐를 사용하면 소프트웨어 개발의 구조와 계층을 분리하면서, 더 효율적인 프로그램 구현이 가능할거"라고 했다.
현재까지도 클린아키텍쳐는 개발자들사이에서 인기있는 소프트웨어 아키텍쳐 중 하나이다.

소프트웨어가 현재의 요구사항을 정확히 만족하도록 개발하는 것도 중요하지만, 이 보다 더 중요한 소프트웨어 개발자의 사명은 소프트웨어가 쉽게 변화할 수 있도록 만드는 것이다. 따라서 소프트웨어의 구조를 적절히 설계해야 할 필요가 있다.
적절히 코드를 나누고, 적절한 위치에 적절한 책임을 두고, 나뉘어진 코드끼리 적절한 의존성을 가지게 하는 행위가 포함된다.

소프트웨어가 쉽게 변화할 수 있기 위해서는 어떻게 해야할까?

  • 바꾸어야 할 부분을 쉽고 명확하게 파악할 수 있어야 하고
  • 변경이 최소한으로 일어나야 한다.


위 그림은 왜 우리가 클린아키텍처를 사용해야하는지 보여준다.(스파게티코드 vs. 클린코드)

클린아키텍처를 사용함으로써 클린 아키텍쳐를 사용하면서 설계하면 도메인과 인프라라는 계층을 분리해서 관리할 수 있게 된다. 따라서 도메인 층의 베이스 파일은 그대로 유지하고 필요한 부분만 바꿀 수 있어서 프로젝트 상에 문제 되지 않고 번거로운 덜어지게 된다. 즉, 도메인 계층의 분리로 소스코드 변경 안정성이 높아진다. 또한 인프라 계층의 테스트 가능성, 가독성, 유지보수성을 향상한다.

그렇다면 도메인? 인프라계층? 이 무엇일까??

Domain(도메인)

안쪽의 원은 어플리케이션의 도메인 레이어이다. 이곳은 비즈니스 로직이 들어가는 곳이다. 단순히 원론적인 비즈니스 뜻을 생각하는 것뿐만이 아닌, 어플리케이션이 무엇을 하는지에 대한 핵심, 그리고 코드의 핵심 기능이다. 소프트웨어를 구성하는데 본질과 핵심이 들어있고, 소프트웨어나 프로젝트를 진행할때 높은 수준의 규칙들이 들어있는 곳이다. 도메인 밖에서 일어날 일을 알 수 없기 때문에 추상적이다.
예를 들어, 번역앱은 번역을 하는 것, 그것이 핵심이다. 따라서 이러한 비즈니스 룰은 앱의 핵심 가치를 자주 변화시키지 않기 때문에 꽤나 안정적이다.

InfraStructure(인프라)

바깥의 원은 어플리케이션의 인프라이다. 이것은 UI나 데이터베이스, web APIs, frameworks와 같은 것이다. 따라서 도메인보다 더 쉽게 변한다.
도메인 영역보다 낮은 수준들의 규칙이 들어있고, 실제로 눈에 보이고 구현되는 부분들에 대한 세부적인 사항들이 들어있다. 어떠한 동작이나 어떠한 일이 일어날 지 알기 때문에 객관화 된 개념이라고 생각하면 됩니다.

이때 도메인과 인프라의 사이의 경계가 생성되기 때문에, 도메인은 인프라에 대해 아는 것이 없다.
그 뜻은, UI와 데이터베이스는 비즈니스 로직에 의존하지만, 비즈니스 로직은 UI나 데이터베이스에 의존하지 않음을 말한다.

이 사실은 이것을 plugin architecture로 만든다. UI가 web interface든, a desktop app이든 mobile app이든 상관 없다는 뜻이다. 또한 데이터가 SQL에 저장되든 noSQL에 저장되든 클라우드에 저장되는 상관 없다는 뜻이다. 도메인은 상관하지 않으며, 단지 인프라만 쉽게 변화시킬 뿐이다.

클린 아키텍쳐의 개념에 대해 도메인과 인프라로 크게 나누어 봤다면 다음장에서 더욱 디테일하게 용어들을 정리해보겠당.

profile
오늘도 여전히 사고친걸 해결해본당,,

0개의 댓글