정의
- 핵심 설계 목표 중 하나는 관심사의 분리(Separation of Concerns)이다.
- 레이어 아키텍처를 통해 관심사를 분리할 수 있다.
- 또한, 단위테스트가 단순해지고, 다음 레이어에 대한 의존성을 모킹하여 완전히 테스트할 수 있다.
- 각 레이어마다 다른 스프링 컨텍스트를 사용하는 것이 좋다.
대표적인 아키텍처
프레젠테이션 레이어
- 가장 복잡한 계층이며, 매우 다양한 기술과 프레임워크의 조합을 가질 수 있는 계층이다.
- 마이크로서비스에서 프레젠테이션 레이어는 REST 컨트롤러가 있는 곳이다.
- 일반적으로 JSP, 템플릿 및 정적 콘텐츠 같은 뷰 관련 콘텐츠가 포함된다.
- 서버의 앞단에서 클라이언트와 HTTP 프로토콜을 사용하여 요청을 받아들이고 서버 내부적으로는 서비스 레이어와 통신한다.
서비스 레이어
- 비즈니스 레이어에 대한 퍼사드(facade) 역할을 한다.
- 비즈니스 요구사항을 이해하고 프레젠테이션 레이어에 올바른 데이터를 제공한다.
- 로직에서 에러가 발생하여 잘못된 데이터가 DB에 반영되는 것을 막기 위해서 Transaction 작업이 수행된다.
비즈니스 레이어 (도메인)
- 모든 비즈니스 로직이 있는 곳이다.
- 대부분의 비즈니스 로직은 도메인 모델에 위치하는 것이 좋다.
- 비즈니스 레이어는 데이터 레이어와 통신해 데이터를 가져오고 그 위에 비즈니스 로직을 추가한다.
퍼시스턴스 레이어
- 데이터를 검색하고 데이터베이스에 저장하는 역할을 한다.
- DB connection은 상대적으로 비용이 큰 작업이기 때문에 효율적인 로직을 설계하는 것이 중요하다.
- 일반적으로 JPA 매핑 또는 JDBC 코드를 포함한다.
참고자료
애플리케이션 아키텍쳐와 객체지향