개발/Spring

[Spring] 스프링 MVC 아키텍처의 이해 (Spring MVC Architecture)

zz132456zz 2022. 5. 17. 22:23
728x90

MVC Pattern

애플리케이션의 확장을 위해 Model, View, Controller 세 가지 영역으로 분리한다.

컴포넌트의 변경이 다른 영역 컴포넌트에 영향을 미치지 않아서 유지보수에 용이하다.

컴포넌트 간의 결합성이 낮아 프로그램 수정이 용이해 확장성이 뛰어나다.

 

 

Spring MVC 실행 순서

DispatcherServlet (단일 Front Controller Servlet)이 요청을 수신한다.

 

↓↓

 

DispatcherServlet은 Handler Mapping에 어느 Controller를 사용할 것인지 문의한다.

 

↓↓

 

DispatcherServlet은 요청을 Controller에게 전송하고 Controller는 요청을 처리한 후 결과를 리턴한다.

 

↓↓

 

ModelAndView Object에 수행 결과가 포함되어 DispatcherSerlvet에 리턴한다.

 

↓↓

 

ModelAndView는 실제 JSP 정보를 갖고 있지 않고 ViewResolver가 논리적 이름을 실제 JSP 이름으로 변환한다.

 

↓↓

 

View는 결과 정보를 사용하여 화면을 표현한다.

 

 

Spring Web Application의 동작원리

웹 애플리케이션이 실행되면 Tomcat(WAS)에 의해 web.xml이 로딩

 

↓↓↓

 

web.xml에 등록되어 있는 ContextLoaderListener(Java Class)가 생성.

ContextLoaderListener class는 ServletContextListener interface를 구현하고 있으며, ApplicationContext를 생성하는 역할을 수행한다.

 

↓↓↓

 

생성된 ContextLoaderListener는 root-context.xml을 로딩

 

↓↓↓

 

root-context.xml에 등록되어 있는 Spring Container가 구동.
이때 개발자가 작성한 Business Logic(Service)에 대한 부분과 Database Logic(DAO), VO 객체들이 생성된다.

 

↓↓↓

 

Client로부터 요청(request)이 들어온다.

 

↓↓↓

 

DispatcherServlet이 생성. DispatcherServlet은 FrontController의 역할을 수행한다.
Client로부터 요청 온 메시지를 분석하여 알맞은 PageController에게 전달하고 응답을 받아 요청에 따른 응답을 어떻게 할지 결정한다. 실질적인 작업은 PageController에서 이루어진다.
이러한 클래스들을 HandlerMapping, ViewResolver Class라고 한다.

 

↓↓↓

 

DispatcherServlet은 serlvet-context.xml을 로딩

 

↓↓↓

 

두 번째 Spring Container가 구동되며 응답에 맞는 PageController들이 동작한다.
이때 첫 번째 Spring Container가 구동되면서 생성된 DAO, VO, Service 클래스들과 협업하여 알맞은 작업을 처리한다.

 

 

 

 

 

 

 

 

 

 

728x90