1. 아키텍처의 기본 관심사
- 소프트웨어 아키텍처의 가장 기본적인 관심사는 "소프트웨어의 구성요소를 관심사에 따라 분리하는 것"이다.
- 관심사에 따라 구성요소를 분리함으로써 얻을 수 있는 가장 큰 이득은 "구성요소의 관심사 축소에 따른 코드 가독성/유지보수의 용이성 개선"이다.
=> 그도 그럴 것이, 소스코드가 모두 한 파일에 저장된 소프트웨어와 관심사에 따라 분리된 소프트웨어만 비교하더라도, 후자가 코드 가독성도 좋고, 유지 보수도 그에 따라 더 편리할 것이 당연하다.
- 부가적으로(?), 수월한 테스트 환경 조성과 같은 이득이 수반될 수 있다.
- 이 글에서는 가장 일반적으로 활용되고 있는 아키텍처로 간주되는 "계층형 아키텍처"를 다뤄보고자 한다.
2. 계층형 아키텍처 개요
- 계층형 아키텍처는 소스코드의 역할과 관심사에 따라 이를 "계층"으로 분리한 아키텍처이다.
- 분리된 계층의 숫자에 따라서 n-tier-architecture로 명명된다고 한다.
- 계층형 아키텍처에서는 일반적으로 소스코드의 역할과 관심사를 다음과 같은 계층들로 분류한다.
1) Presentation Layer
- 사용자와의 요청/응답 등 상호작용 처리에 관심사를 둔 계층
- View, Controller 등이 이 계층에 속할 수 있다.
2) Domain/Business Layer
- 소프트웨어의 도메인 로직 처리에 관심사를 둔 계층
- 이 계층은 관점에 따라 두 계층으로 다시 구분되기도 한다. (도메인과 어플리케이션 서비스에 따라 구분된다.)
(1) Domain Layer
- 소프트웨어가 해결하고자 하는 문제 영역으로서 도메인 처리에 초점을 둔 계층
- 오직 도메인 처리에만 관심을 두며, 도메인 이외에 외부 인프라와의 통신이나 의존을 지양하는 계층
* 도메인 레이어는 서비스(어플리케이션) 레이어에 의존하지 않도록 구현하는 것이 좋다.(한 어플리케이션에 의존하면, 다른 어플리케이션에서는 활용할 수 없기 때문이다.)
(2) Application Service Layer
- 서비스 계층 혹은 어플리케이션 계층이라고 불리기도 한다.
- 도메인 처리를 위해 필요한 제반 작업 처리에 초점을 둔 계층
- ex.DB 등 다른 인프라와의 통신 / 트랜젝션 / 외부 API와 통신
3) Data Access Layer
- 데이터베이스에 직접적으로 요청을 전달하는 등 데이터베이스에 접근하는데 관심사를 둔 계층
- 데이터베이스와 매핑되는 객체로서의 엔티티를 영구히 관리하는 계층으로, persistence 계층이라고도 불린다.
- ORM, repository, DAO가 이 계층에 속할 수 있다.
4) Database Layer
- 실제 데이터베이스 서버가 운영되는 계층
- 사용하는 DB가 이 계층에 속한다.
3. 계층형 아키텍처의 특징
- 계층형 아키텍처에서 각 계층은 다른 계층들과의 낮은 결합도를 가지고 내부적으로는 높은 응집도를 가질 것을 지향한다.
이를 통해, 계층을 분리한 가장 큰 이유라고 볼 수 있는 코드 가독성과 유지보수의 용이성을 보존 혹은 극대화할 수 있기 때문이다.
- 이 때문에, 계층형 아키텍처에서 계층들은 다음과 같은 특징을 지닌다.
상위 계층은 하위 계층을 파악할 수 있지만, 하위 계층은 상위 계층을 파악할 수 없다.
- 계층이 반드시 참조해야 하는 계층 이외에는 의존하지 않도록 하는 것이다.
- 예컨대, Presentation은 Business를 알고 있지만, Business는 Presentation을 알 수 없는 것이다.
4. 계층형 아키텍처의 장점
- 계층형 아키텍처는 다음 두 가지 특징을 가지고 있다.
- 관심사에 따라 소스코드를 계층으로서 분리한다.
- 각 계층은 다른 계층과의 결합도를 최소화하도록 구현된다.
- 이에 따라, 다음과 같은 장점들을 가지고 있다.
- 계층 분리에 따른 코드 가독성, 유지보수의 용이성 개선
- 모듈 교체의 용이성
- 각 계층은 결합도가 낮기 떄문에, 특정 계층에서 사용하는 모듈을 변경한다고 할 때, 다른 계층에서 그것에 따른 영향이 최소화된다.
- 수월한 테스트 코드 환경 조성
- 각 계층은 자신의 관심사에만 초점을 두기 때문에, 한 계층을 테스트할 때 그 환경을 조성하는 것이 수월하다.
5. 추신
- 계층형 아키텍처도 단점이 있다. 그래서 등장한 개념이 바로 클린 아키텍처인 것으로 사료된다.
- 다음 글에서는 계층형 아키텍처의 단점과 클린 아키텍처에 대해서 공부하고 정리해보려 한다.
6. 참고자료
- https://jojoldu.tistory.com/603
- https://hudi.blog/layered-architecture/
'디자인패턴, 프로그래밍 패러다임, 아키텍처 > 아키텍처' 카테고리의 다른 글
클린아키텍처: 계층형 아키텍처의 문제를 보완해보자. (1) | 2023.03.10 |
---|