해당 포스트는 MSA에 대한 개념과 주요 기술에 대해 알아보고 실무에 적용했었던 내용을 정리하는 포스트입니다.
클린 아키텍처(Clean Architecture)는 소프트웨어 시스템을 독립적인 계층으로 분리하여 변경이나 확장이 쉽도록 하는 소프트웨어 아키텍처입니다. 기본적인 원리는 의존성 규칙을 지키는 것으로, 관심사를 분리시키고 의존도를 낮추는 것을 목적으로 하고 있습니다.
클린 아키텍처의 주요 특징은 다음과 같습니다.
클린 아키텍처는 소프트웨어 시스템을 수정하거나 대체하는데 용이하며 변화에 대한 저항력을 높이고 유지보수를 편리하게 하는 것을 목표로 삼고 있습니다.
클린 아키텍처는 헥사고날 아키텍처와 비교하였을 때 다음과 같은 유사점이 있습니다.
반면 뚜렷하게 다른 점도 있습니다.
도메인 계층이라고도 불리며 비즈니스 도메인의 핵심 개념과 규칙을 표현한 것입니다. 비즈니스 도메인의 핵심 개념을 객체로 모델링하고 객체 간의 관계와 상호 작용을 나타냅니다.
엔티티는 핵심 규칙 + 데이터로 구성되며, 고수준 영역이기 때문에 저수준인 유스케이스 영역을 알게 해서는 안됩니다.
엔티티는 간단한 객체여야 하며 프레임워크나 데이터베이스 등 기타 복잡한 것에 의존해서는 안되고 유스케이스 객체를 통해서만 조작되어야 합니다.
어플리케이션 계층으로도 불리며 엔티티를 감싸는 객체로 어플리케이션 규모의 비즈니스 규칙을 포함합니다. 엔티티 내부의 핵심 업무 규칙을 호출하고 시스템을 사용하는 흐름을 담고 있습니다.
유스케이스에서의 변경 사항은 엔티티에 영향을 미치지 않아야 하고 인프라 영역의 DB나 UI, 라이브러리와 같은 외부 요소에 영향을 받지 않아야 합니다.
유스케이스 또는 엔티티 계층에서 데이터를 변환해 외부 계층 (DB, Web, UI 등) 에 사용할 수 있도록 해주는 어댑터들의 집합입니다. 대표적인 예시가 컨트롤러, 프레젠터, 게이트웨이가 있습니다.
인프라 계층으로도 불리며 가장 외부에 위치한 계층으로 DB, 프레임워크, 입출력 장치, 통신 프로토콜과 같은 세부 사항들을 나타냅니다.
도메인 주도 설계로 시작하는 마이크로서비스
마이크로서비스 패턴