레이어드 아키텍처

유요한·2023년 12월 1일
0

Spring Boot

목록 보기
17/25
post-thumbnail

레이어드 아키텍처

레이어드 아키텍처란 애플리케이션의 컴포넌트를 유사 관심사를 기준으로 레이어로 묶어 수평적으로 구성한 구조를 의미합니다.레이어드 아키텍처는 여러 방면에서 쓰이는 개념이며, 어떻게 설계하느냐에 따라 용어와 계층 수가 달라집니다.

일반적으로 레이어드 아키텍처라 하면 3계층 또는 4계층 구성을 의미합니다. 이 차이는 인프라(데이터 베이스) 레이어의 추가 여부로 결정됩니다.

프레젠테이션 계층

  • 애플리케이션의 최상단 계층으로, 클라이언트의 요청을 해석하고 응답하는 역할입니다.
  • UI나 API를 제공합니다.
  • 프레젠테이션 게층은 별도의 비즈니스 로직을 포함하고 있지 않으므로 비즈니스 계층으로 요청을 위임하고 받은 결과를 응답하는 역할만 수행합니다.

비즈니스 계층

  • 애플리케이션이 제공하는 기능을 정의하고 세부 작업을 수행하는 도메인 객체를 통해 업무를 위임하는 역할을 수행
  • DDD(Domain-Driven-Design) 기반의 아키텍처에서는 비즈니스 로직에 도메인이 포함되기도 하고, 별도로 도메인 계층을 두기도 합니다.

데이터 접근 계층

  • 데이터베이스에 접근하는 일련의 작업을 수행

레이어드 아키텍처는 하나의 애플리케이션에도 적용되지만 애플리케이션 간의 관계를 설명하는 데도 사용할 수 있습니다. 레이어드 아키텍처 기반 설계는 다음과 같은 특징을 가집니다.

  • 각 레이어는 가장 가까운 하위 레이어의 의존성을 주입받습니다.
  • 각 레이어는 관심사에 따라 묶여 있으며, 다른 레이어의 역할을 침범하지 않습니다.
    • 각 컴포넌트의 역할이 명확하므로 코드의 가독성의 기능 구현에 유리합니다.
    • 코드의 확장성도 좋아집니다.
  • 각 레이어가 독립적으로 작성되면 다른 레이어와의 의존성을 낮춰 단위 테스트에 용이합니다.

그림 2.6은 레이어드 아키텍처를 스프링에 적용한 모습입니다. Spring MVC는 Model- View-Controller의 구조로 View와 Controller는 프레젠테이션 계층 영역이며, Model은 비즈니스와 데이터 접근 계층의 영역으로 구분합니다. 다만 스프링MVC 모델로 레이어드 아키텍처를 구현하기 위해서는 역할을 세분화합니다. 비즈니스 계층에 서비스를 배치해 엔티티와 같은 도메인 객체의 비즈니스 로직을 조합하도록 하고 데이터 접근 계층에는 DAO(Spring Data JPA에서는 Repository)를 배치해 도메인을 관리합니다.

스프링의 레이어드 아키텍처는 다음과 같이 설명할 수 있습니다.

이렇게 처리함에 따라 하나의 레이어는 자신의 고유 역할을 수행하고 인접한 다른 레이어에 무언가 요청하거나 응답합니다. 각 레이어는자신의 역할에 충실할 수 있습니다. 따라서 시스템 전체를 수정하지 않고 특정한 레이어의 기능을 개선하거나 교체할 수 있기 때문에 재사용성이 좋고 유지보수하기 유리합니다. 그리고 테스트 구현이 편해지고 코드 가독성이 좋아집니다.

profile
발전하기 위한 공부

0개의 댓글