Spring MVC

2023. 2. 13. 20:27Spring

◎ Spring MVC

-> 스프링에서 웹 계층을 담당하는 모듈중 *서블릿(servlet)API를 기반으로 클라이언트의 요청을 처리하는 모듈이 spring-webmvc다. 웹 프레임워크의 한 종류다.

*서블릿 : 클라이언트의 요청을 처리하도록 특정 규약에 맞춰 자바 코드로 작성하는 클래스 파일이다. 아파치 톰캣은 서블릿들이 웹 애플리케이션으로 실행되도록 도와주는 서블릿 컨테이너이다.

-> MVC는 Model, View, Controller이다.

 

Model 

-> spring mvc기반의 웹 애플리케이션은 클라이언트의 요청을 받으면 요청을 처리하기 위한 작업을 한다. 작업의 결과를 클라이언트에게 응답으로 돌려줘야 하는데, 클라이언트에게 응답으로 돌려주는 작업의 처리 결과 데이터를 Model이라 한다. 

-> 클라이언트의 요청에 따른 응답을 위한 작업의 처리 결과 데이터다.

 

View

-> Model데이터를 이용하여 웹브라우저와 같은 클라이언트 애플리케이션의 화면에 출력되는 리소스를 제공하는 역할을 한다. 

-> Model데이터를 *JSON형태로의 데이터로 변환하여 클라이언트와 서버 애플리케이션이 데이터를 주고 받는다.

*JSON : 클라이언트와 서버 애플리케이션이 데이터를 주고 받는 데이터 형식. 기본 포맷은 {"속성" : "값"}이다.

 

Controller

-> 클라이언트의 요청을 직접 전달받는 엔드포인트로, Model과 View 사이에서 상호작용을 해주는 역할을 한다.

-> 클라이언트의 요청을 받으면 비즈니스 로직을 거쳐 Model데이터를 만들고, 이 Model데이터를 View로 전달하는 역할을 한다.

 

※ MVC의 동작 흐름

클라이언트가 요청 -> Controller가 요청을 받음 -> 비즈니스 로직 처리 -> Model데이터 생성 -> Controller에게 Model데이터 전달 -> Controller가 View에게 Model데이터 전달 -> View가 응답 데이터 생성

 

spring MVC 동작 방식, 구성 요소

1. 클라이언트가 요청을 하면 DispatcherServlet 클래스에 전달된다.

 

2. DispatcherServlet은 클라이언트의 요청을 처리할 Controller에 대한 검색을 HandlerMapping 인터페이스에 요청한다.

 

3. HandlerMapping은 클라이언트의 요청과 매핑되는 *핸들러 객체를 DispatcherServlet에 리턴한다.

*핸들러 객체 : 해당 핸들러의 Handler메서드 정보를 가지고 있다. Handler메서드는 Controller클래스 내부에 구현된 요청 처리 메서드를 의미한다.

 

4. 요청을 처리할 Controller를 찾아 실제로 클라이언트 요청을 처리할 Handler메서드를 찾아서 호출해야 한다.

DIspatcherServlet은 HandlerAdapter에게 Handler메서드 호출을 위임한다.

 

5. HandlerAdapter는 DispatcherServlet으로부터 전달받은 Controller 정보를 기반으로 해당 Controller의 Handler 메서드를 호출합니다.

 

6. Controller의 Handler메서드는 비즈니스 로직 처리 후 리턴 받은 Model데이터를 HandlerAdapter에게 전달한다.

 

7. HandlerAdpater는 전달받은 Model 데이터와 View정보를 DispatcherServlet에 전달한다.

 

8. DispatcherServlet은 전달받은 View 정보를 ViewResolver에게 전달하여 View 검색 요청한다.

 

9. ViewResolver는 View정보에 맞는 View를 찾아 DispatcherServlet에 리턴한다.

 

10. DispatcherSevlet은 전달받은 View객체를 Model데이터에 넘겨주고, 클라이언트에게 전달할 응답 데이터 생성 요청한다.

 

11. View는 응답 데이터를 생성하여 DispatcherServlet에 전달한다.

 

12. DispatcherServlet에서 최종적으로 View에게 전달받은 데이터를 클라이언트에게 전달한다.

 

* DispatcherServlet은 요청에 대한 처리를 각 요소들에게 위임하는 역할을 한다. 이렇게 DispatcherServlet이 애플리케이션의 앞단에 위치하여 다른 구성 요소들과 상호작용하며 클라이언트의 요청을 처리하는 패턴을 Front Controller Pattern이라 한다. 

 

'Spring' 카테고리의 다른 글

서비스 계층  (0) 2023.02.18
API 계층  (0) 2023.02.17
AOP2  (0) 2023.02.09
AOP1  (1) 2023.02.09
스프링 컨테이너2  (0) 2023.02.07