1.Spring MVC Architecture |
-Spring MVC : 클라이언트의 요청을 편리하게 처리해주는 프레임워크
1-1.Model
-클라이언트의 요청 사항을 처리하기 위한 작업의 처리 결과 데이터
*클라이언트의 요청 사항을 구체적으로 처리하는 영역을 서비스 계층(Service Layer)하며, 실제로 요청 사항을 처리하기 위해 Java 코드로 구현한 것은 비즈니스 로직(Business Logic)이라 함.
1-2.View
-Model 데이터를 이용해서 웹브라우저 같은 클라이언트 애플리케이션의 화면에 보여지는 리소스(Resource)를 제공하는 역할
-Spring MVC에 포함된 다양한 View 기술
(1)HTML 페이지의 출력
(2)PDF, Excel 등의 문서 형태로 출력
(3)XML, JSON 등 특정 형식의 포맷으로의 변환
1-3.Controller
-클라이언트 측의 요청을 직접적으로 전달 받는 엔드포인트(Endpoint)로써 Model과 View의 중간에서 상호 작용을 해주는 역할
1-4.Model, View, Controller 간의 처리 흐름
(1)Client가 요청 데이터 전송
(2)Controller가 요청 데이터 수신 → 비즈니스 로직 처리 → Model 데이터 생성
(3)Controller에게 Model 데이터 전달 → Controller가 View에게 Model 데이터 전달
(4)View가 응답 데이터 생성
2.Spring MVC의 동작 방식과 구성 요소 |
-Spring MVC의 요청과 응답 흐름에 대한 내부적인 동작 방식을 외울 필요는 없지만 Spring MVC 구성 요소 간의 관계를 이해하고 있다면 실무에서 어떤 문제가 발생했을 때, 문제를 어디서부터 해결해야 될지에 대한 방법을 찾는 것이 조금 더 수월해짐
-위의 이미지를 번호 순서대로 설명
(1)클라이언트가 요청을 전송하면 DispatcherServlet이라는 클래스에 요청이 전달됨
(2)DispatcherServlet은 클라이언트의 요청을 처리할 Controller에 대한 검색을 HandlerMapping 인터페이스에게 요청함
(3)HandlerMapping은 클라이언트 요청과 매핑되는 핸들러 객체를 다시 DispatcherServlet에게 리턴
(4)실제로 클라이언트 요청을 처리할 Handler 메서드를 찾아서 호출하기 위해 HandlerAdpater에게 Handler 메서드 호출을 위임
(5)HandlerAdapter는 전달 받은 Controller 정보를 기반으로 해당 Controller의 Handler 메서드를 호출함
(6)Controller의 Handler 메서드는 비즈니스 로직 처리 후 리턴 받은 Model 데이터를 HandlerAdapter에게 전달
(7)HandlerAdapter는 전달받은 Model 데이터와 View 정보를 다시 DispatcherServlet에게 전달
(8)DispatcherServlet은 전달 받은 View 정보를 다시 ViewResolver에게 전달해서 View 검색을 요청함
(9)ViewResolver는 View 정보에 해당하는 View를 찾아서 View를 다시 리턴
(10)DispatcherServlet은 전달 받은 View 객체를 통해 Model 데이터를 넘겨주면서 클라이언트에게 전달할 응답 데이터 생성을 요청함
(11)View는 응답 데이터를 생성해서 다시 DispatcherServlet에게 전달
(12)DispatcherServlet은 View로부터 전달 받은 응답 데이터를 최종적으로 클라이언트에게 전달
+이처럼 DispatcherServlet이 애플리케이션의 가장 앞단에 배치되어 다른 구성요소들과 상호작용하면서 클라이언트의 요청을 처리하는 패턴을 Front Controller Pattern이라고 함
이미지 및 내용 출처 - code states
'부트캠프' 카테고리의 다른 글
Spring MVC - Service 계층 (0) | 2023.02.17 |
---|---|
Spring MVC - API 계층 part 2 (0) | 2023.02.14 |
Spring Framework 핵심 개념 - AOP (1) | 2023.02.09 |
Spring Framework 핵심 개념 - DI (0) | 2023.02.07 |
Spring Framework 기본 (1) | 2023.02.03 |