[Clean Architecture] 독립성

Date:     Updated:

카테고리:

태그:

소프트웨어에서 가장 중요한 것은 무엇일까요? 소프트웨어 구조, 디자인 패턴, 구조, 데이터베이스 등등 많은 요소들을 떠올릴 수 있습니다. 클린 아키텍쳐에서는 유즈케이스 라고 답합니다. 즉, 사용자에게 제공되는 서비스가 가장 중요한 요소라는것입니다. 위의 구조, 패턴, 데이터베이스 등등은 유즈케이스를 구성하기 위한 세부사항일 뿐입니다. 구조를 어떻게 짜든, 어떤 패턴을 쓰던, 어떤 데이터베이스를 쓰던 사용자의 입장에서는 소프트웨어의 품질을 결정하는 요소가 아닐 뿐더러, 해당 용어나 개념 자체를 모르는 가능성이 높습니다.

그렇다면, 유즈케이스와 그것을 구현하기 위한 세부사항을 아키텍쳐 관점에서 지원하려면 어떻게 해야할까요? 바로 행위를 명확히 하고, 외부로 드러내며, 이를 통해 시스템이 지닌 의도를 아키텍처 수준에서 볼 수 있게 만드는것 입니다.

예를들어, 주문 추가와 주문 삭제라는 행동이 있다면, 주문이 추가되는 이유와 주문이 삭제되는 이유가 각각 다르기 때문에, 업무 규칙을 서로 분리합니다.

행동이 분리되고 나면, 사용자에게 직접 노출되는 UI(User Interface)를 생각해봐야 합니다. UI계층은 대게 세부규칙과는 연관이 없습니다. (버튼을 누른다 라는 행동만 지원하면 됨)

그럼 이제 버튼을 눌렀을 때, 어떤 행동을 해야 하는지를 생각해봐야 합니다. 어떤 행동을 할지는 제공하고자 하는 서비스에 따라 다르므로, 해당 로직을 업무계층으로 넣습니다.

업무계층에서 일을 수행하고, 사용자의 데이터를 저장하려면 데이터베이스에 접근해야 합니다. 데이터베이스에 접근하는것은 업무규칙과는 상관이 없는 일이므로, 다른 계층으로 분리합니다.

이렇게 하여 아래의 그림처럼 행동과 계층을 분리할 수 있습니다.

이렇게 분리하는 방법을 유즈케이스를 기준으로 분리한다 라고 표현합니다. 유즈케이스를 기준으로 분리하는것은 매우 자연스러운 방법이라고 저자는 이야기 합니다.

요즘 유행처럼 사용하는 MSA(Micro Service Architecture)같이 각 컴포넌트들이 다른 서버에서 실행되어야 하는 상황이라면, 이들 컴포넌트가 단일 프로세서의 동일한 주소 공간에 함께 상주하는 형태로 만들어져서는 안됩니다. 분리된 컴포넌트는 독립된 서비스가 되어야 하고, 일종의 네트워크를 통해 서로 통신해야 합니다.

Clean Architecture 카테고리 내 다른 글 보러가기

댓글 남기기