레이어드 아키텍처란?
애플리케이션의 컴포넌트를 유사 관심사를 기준으로 레이어로 묶어 수평적으로 구성한 구조를 의미한다.
레이어드 아키텍처의 계층
프레젠테이션 계층
- 애플리케이션의 최상단 계층으로 클라이언트의 요청을 해석하고 응답하는 역할을 담당한다.
- 별도의 비즈니스 로직을 포함하고 있지 않으므로 비즈니스 계층으로 요청을 위임하고 받은 결과를 응답하는 역할만 수행한다.
비즈니스 계층
- 애플리케이션이 제공하는 기능을 정의하고 세부 작업을 수행하는 도메인 객체를 통해 업무를 위임하는 역할을 수행한다.
- DDD (Domain-Driven Design) 기반의 아키텍처에서는 비즈니스 로직에 도메인이 포함되기도 하고, 별도로 도메인 계층을 두기도 한다.
데이터 접근 계층
- 데이터베이스에 접근하는 일련의 작업을 수행한다.
레이어드 아키텍처는 하나의 애플리케이션에서도 적용되지만 애플리케이션 간의 관계를 설명하는 데도 사용할 수 있다. 레이어드 아키텍처 기반 설계는 아래와 같은 특징을 가진다.
- 각 레이어는 가장 가까운 하위 레이어의 의존성을 주입받는다.
- 각 레이어는 관심사에 따라 묶여있으며, 다른 레이어의 역할을 침범하지 않는다.
- 각 레이어가 독립적으로 작성되면 다른 레이어와의 의존성을 낮춰 단위 테스트에 용이하다.
스프링 레이어드 아키텍처 계층
프레이테이션 계층
- 상황에 따라 유저 인터페이스 계층이라고도 한다.
- 클라이언트와의 접점이 된다.
- 클라이언트로부터 데이터와 함께 요청을 받고 처리 결과를 응답으로 전달하는 역할이다.
- Controller가 수행한다.
비즈니스 계층
- 상황에 따라 서비스 계층이라고도 한다.
- 핵심 비즈니스 계층이라고도 한다.
- 트랜잭션 처리나 유효성 검사 등의 작업도 수행한다.
- Service가 수행한다.
데이터 접근 계층
- 상황에 따라 영속(Persistence) 계층이라고도 한다.
- 데이터베이스에 접근해야 하는 작업을 수행한다.
- Repository가 수행한다.