Layered Architecture

DongHwan·2022년 1월 12일
0

Design

목록 보기
2/11

Layered Architecture


https://www.oreilly.com/library/view/software-architecture-patterns/9781491971437/ch01.html

계층화 아키텍쳐(Layered Architecture)란 시스템의 구조가 여러 개의 계층으로 나누어져 구성된 것을 의미한다. 계층화 아키텍쳐의 주 목적은 관심사의 분리이다. 각각의 계층마다 각자의 역할과 책임을 가지며, 이는 추상화되고 캡슐화되어 다른 계층과의 독립적인 개발이 이루어지도록 도울 수 있다.

Spring이나 NestJs와 같은 프레임워크를 사용할 때, Service나 Controller와 같은 이름으로 계층을 나누는 것을 볼 수 있다. 이러한 구조가 계층화 아키텍쳐를 적용한 구조이다.

계층화 아키텍쳐에서 계층이라는 개념은 정확히 정해진 것이 아니다. 개발자가 생각하는 관심사에 맞게 적절히 분리하면 된다. 다만, 서비스의 목적에 따라 일반적으로 사용되는 계층 구조들이 있다.

Spring의 경우 위와 같은 3-Tier Architecture를 주로 사용하며, 이에 대해 정리하고자 한다.

Presentation Layer

표현 계층(Presentation Layer)는 Client Layer라고도 하며, 클라이언트와 가장 맞닿아 있는 계층이다. 사용자의 요청을 처리하고 응답하는 일을 담당하며, 응답으로 돌려줄 UI를 만드는 일 역시 담당한다.

사용자의 요청을 컨트롤하는 Dispatcher Servlet과 MVC 패턴을 구현한 Spring-MVC는 해당 레이어에서 동작한다.

Business Layer

비즈니스 계층(Business Layer)는 Service Layer 혹은 Application Layer라고도 불린다. 서비스의 비즈니스 로직을 처리하는 계층이며, Transaction이나 캐시와 같은 인프라적인 부분들도 주로 처리한다.

Persistence Layer

Persistence Layer는 Data Acess Layer, Repository Layer 등으로도 불린다. 데이터의 영속성을 담당하는 계층으로, Database에 직접적으로 접근한다.

JPA나 MyBatis와 같은 기술들이 Persistence Layer에서 동작하며, DAO나 Repository 역시 해당 계층에 속한다.

총 정리

Spring을 기준으로 Layered Architecture를 설명해보았다. 앞에서 언급했듯, 이러한 계층은 정확히 정해진 것이 없다. 개발자의 설계에 맞게 적절한 계층을 만들고, 적절한 구조로 만들면 되는 것이다. Domain-Driven Development에서는 계층을 4개로 나누었으며, MSA에서는 기존의 전형적인 계층화 구조에서 벗어나 Hexagonal architecture라는 육각형 구조를 사용한다. 즉, 무조건 위에서 설명한 3-Tier 구조를 따르는 것이 아니라 설계에 맞게 적절한 구조를 찾을 수 있어야 한다.

profile
날 어떻게 한줄로 소개해~

0개의 댓글