본문 바로가기
Today I Learned/Spring

[Spring] Spring MVC 아키텍처

by 프로그래 밍구 2022. 9. 22.

Spring MVC

 Spring MVC는 클라이언트의 요청을 편리하게 처리해주는 프레임워크이다. 개발자들 사이에서 Spring Web MVC를 줄여서 Spring MVC라고 부르고, Spring MVC는 웹 프레임워크의 한 종류이기 때문에 Spring MVC 프레임워크라고도 불린다.

 

Spring MVC에서 M은 Model을 뜻한다. 클라이언트에게 응답으로 돌려주는 작업의 처리 결과 데이터를 Model이라고 한다.

 

Spring MVC에서 V는 View를 의미한다. View는 Model 데이터를 이용하여 웹브라우저와 같은 클라이언트 애플리케이션의 화면에 보여지는 리소스(Resource)를 제공한다. 또한 View는 JSON 포맷의 데이터를 생성한다.

 

Spring MVC에서 C는 Controller를 의미한다. Controller는 클라이언트 측의 요청을 전달 받아 Model과 View의 상호작용을 담당한다.

서블릿(Servlet)

 서블릿은 클라이언트의 요청을 처리하도록 특정 규약에 맞추어서 Java 코드로 작성하는 클래스 파일이며 웹페이지를 동적으로 만드는 역할을 한다.

 Spring의 모듈 중에서 서블릿(Servlet) API를 기반으로 클라이언트의 요청을 처리하는 모듈이 바로 spring-webmvc 이다.

Spring MVC의 동작방식

Spring MVC의 동작방식

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

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

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

핸들러 객체는 해당 핸들러의 Handler 메서드 정보를 포함하고 있다. Handler 메서드는 Controller 클래스 안에 구현된 요청 처리 메서드를 의미한다.

(4) 요청을 처리할 Controller 클래스를 찾았으니 이제는 실제로 클라이언트 요청을 처리할 Handler 메서드를 찾아서 호출해야하는데, DispatcherServlet은 Handler 메서드를 직접 호출하지 않고 HandlerAdapter에게 Handler 메서드 호출을 위임한다.

(5) HandlerAdapter는 DispatcherServlet으로부터 전달 받은 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은 ViewResolver로부터 전달 받은 View 객체를 통해 Model 데이터를 넘겨주면서 클라이언트에게 전달할 응답 데이터 생성을 요청한다.

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

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

 

DispatcherServlet은 요청에 대한 처리를 다른 구성 요소들에게 위임(Delegate)하고 있다. 이처럼 DispatcherServlet이 애플리케이션의 다른 구성 요소들과 상호작용하면서 클라이언트의 요청을 처리하는 패턴을 Front Controller Pattern이라고 한다.

댓글