레이어드 아키텍처 (Layered Architecture)
- Spring Boot는 Layered Architecture 방식인데, 이는 각 layer들이 다른 layer들과 통신하는 것을 의미.
- 효율적인 개발과 유지보수를 위해 어플리케이션을 계층화하여 개발하는 것을 의미하고, 주로 중/대규모 어플리케이션에 사용하고 있다.
Pressentation Layer
- 사용자(클라이언트)와 가장 가까운 계층이면서, 사용자와 상호작용을 한다.
- SPRING MVC 객체를 말하며, 프론트 컨트롤러(DispatcherServlet), 컨트롤러(Controller), 뷰(View), 모델(Model)이 포함된다.
- Spring Boot 아키텍처의 TOP Layer이면서 HTTP request와 authentication을 수행한다.
- JSON field의 parameter을 JAVA Object 변환한다.
- 인증 요층을 수행하면 다음 Layer로 전달한다.
Business Layer(Service Layer)
- 실제 모든 비지니스 로직을 수행하는 컴포넌트로 트랜잭션 및 기능을 수행한다.
- 컨트롤러(Pressentation Layer)에서 요청을 보내면 DAO(data Access Layer; 데이터접근계층)를 이용해 실제로 비즈니스 로직을 수행한다.
- 보통 하나의 비즈니스 로직은 하나의 트랜잭션으로 동작(ACID 특징: 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질 => 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability))한다.
- Service로 구성되어 있으며, 확인(validation)과 권한부여(authorization ) 담당한다.
Persistence Layer
- 모든 DataBase storeage logic을 포함하여 Object를 DataBase Row로 변경한다.
- DataBase에 연동되어 데이터의 저장과 조회를 담당하는데 DB에 값을 저장하거나 가져오기 위해 JDBC(JAVA에서 DataBase에 접속할 수 있도록 하는 자바 API), JPA(실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크), Mybatis(JAVA의 관계형 DataBase 프로그램을 좀더 쉽게 할 수 있도록 도와주는 개발 프레임워크를 의미한다.)등을 사용해 구현한 DAO라고 볼 수 있다.
Spring MVC Request Flow
-
front-Controller의 역할을 하는 DispatcherServlet이 요청(request)를 받는다.
-
DispatcherServlet은 적절한 Controller를 선택하는 일을 HandlerMapping에게 요청(request)한다.
-
HandlerMapping은 적합한 Controller을 선택한다.
- DispatcherServlet은 선택된 Controller의 비즈니스 로직 실행 작업을 HandlerAdapter에게 위임한다.
-
HandlerAdpater가 Controller의 비즈니스 로직을 호출(실행, 처리 요청(request))하고 결과를 ModelAndView 객체에 담아서 DispatcherServlet에게 반환한다.
-
DispatcherServlet이 ViewResolver을 이용하여 결과를 보여줄 View(Resource)를 가져온다.
-
DispatcherServlet은 View 객체에게 응답 결과 생성을 요청한다.
Layered Architecture 동작 과정
1. Client에서 요청(request)이 들어오면 먼저 Presentation Layer에서 DispatcherServlet이 HandelerMapping(적합한 Controller을 선택함)을 통해 Controller에게 Client요청을 해석하여 무엇인지 알리고, Controller은 Client 요청 처리를 Business Layer 에게 요구한다.
2. Business Layer은 Presentation Layer와 Interface를 통해서 통신하며, Client 요청을 적절하게 처리한 후 데이터베이스에 데이터를 저장(save)하거나 데이터를 꺼내(select)기 위해 Data Access Layer을 요청한다. 이때 비지니스 로직을 수행하기 위해 데이터가 필요하면 Domain Object에서 가져오고 Data Access Layer로 넘겨줄 데이터가 있으면 Domain Object에 담아 전달한다.
3. Data Access Layer은 Business Layer와 Interface를 통해서 통신하며 Business Layer의 요청(request)를 처리한다. 이때, 데이터베이스에 저장하기 위해 필요한 데이터를 Domain Object에서 가져오고, 데이터베이스에서 데이터를 가져와 반환할 데이터가 있다면 Domain Objecct에 저장하여 반환한다.
4. 모든 처리가 끝나면 Controller는 Client 요청(request)이 처리된 데이터와 사용할 View정보를 Domain Object에서 가져와서 ModelAndView에 담는다. 그리고 나서 ModelAndView객체를 DispatcherServlet에 넘긴다.
5. ModelAndView 객체가 DispatcherServlet에 전달되면, DispatcherServlet은 ViewResolver를 통해서 View를 선택하고 Client에게 요청(request)이 처리된 데이터를 화면에 출력한다.
⁕Domain Object
- DTO(Data Transfer Object ; 이름 그대로 데이터 전달, 데이터를 담고, 다른 계층(Layer) 또는 다른 컴포넌트들로 데이터를 넘겨주기 위핸 자료 구조)
- Entity(핵심 비즈니스 로직을 담는 비즈니스 도메인 영역의 일부)
각 레이어들의 주요 메소드/역할/어노테이션
참고 사이트
https://rypro.tistory.com/216
좋은 글 감사합니다!