디자인패턴, 프로그래밍 패러다임, 아키텍처/아키텍처

계층형 아키텍처

차가운에스프레소 2023. 3. 7. 19:43

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

 

계층형 아키텍처

학교 다닐때 잠깐 JAVA 관련 수업을 들은적이 있다. 그때 수업 내용은 넷빈즈(Netbeans) IDE를 통해 JAVA로 윈도우 애플리케이션을 만드는 것이였다. 간단한 시간표 관리 프로그램을 만드는 과제는 얼

jojoldu.tistory.com

- https://hudi.blog/layered-architecture/

 

계층화 아키텍처 (Layered Architecture)

Layered Architecture Layered Architecture는 소프트웨어 개발에서 가장 일반적으로 널리 사용되는 아키텍처이다. 구성되는 계층의 숫자에 따라 N 계층 아키텍처 (N-tier Architecture) 라고도 한다. 각 계층은 어

hudi.blog