레이어드 아키텍처(Layered Architecture)
레이어드 아키텍처(Layered Architecture)는 애플리케이션을 계층으로 나누어 각 계층이 특정 역활을 담당하도록 설계하는 방식을 의미한다.
유지보수성, 확장성을 높이고 각 레이어디마다 책임을 분리해 코드의 재사용성과 테스트 용이성을 높인다.
특히, Spring 프레임워크를 사용할 때 적용하는 계층 구조는 아래와 같다.
1. Presentation Layer (프레젠테이션 계층)
- 사용자 인터페이스를 담당하며, 보통 웹 애플리케이션의 경우 controller가 이 역활을 한다.
2. Service Layer (서비스 계층)
- 비즈니스 로직을 처리하는 계층, 일반적으로 Service 클래스가 이 계층에 위치, 데이터를 처리하고 트랜잭션을 관리한다.
- 프레젠테이션 계층에서 받은 요청을 처리하고 필요한 비즈니스 로직을 수행한 뒤 데이터를 반환하거나 데이터 액세스 계층을 호출한다.
3. Repository Layer (영속성, DAO 계층)
- 데이터베이스와의 상호작용을 담당하는 계층
- Repository or DAO(DATA Access Object)가 이 계층에 위치한다.
- 데이터베이에 접근해 데이터를 저장하거나 조회하는 역활을 한다.
4. Domain Layer (도메인 계층)
- 비즈니스 도메인에 대한 객체(엔티티)를 정의.
- 도메인 모델이라고 불리며, 애플리케이션의 비즈니스 규칙을 표현하는 클래스들이 위치한다.

레이어드 아키텍처는 각 계층 간의 의존성을 명확하게 하여, 계층의 변경이 다른 계층에 최소한의 영향을 미치도록 설계한다.
예를 들어, 서비스 계층은 영속성 계층을 통해 데이터 베이스와 상호작용하고, 프레젠테이션 계층은 서비스 계층을 통해 비즈니스 로직을 실행한다.