web developer

스프링 MVC 구조와 패턴 본문

Framework/Spring [java]

스프링 MVC 구조와 패턴

trueman 2022. 11. 6. 22:22
728x90
728x90

1. 스프링 MVC 기본 구조


  • 스프링 프레임워크는 하나의 기능을 위해서만 만들어진 프레임워크가 아닌 '코어'라고 할 수 있는 여러 서브 프로젝트들을 결합해서 다양한 상황에 대처할 수 있도록 개발하였다. 그중 하나가 MVC 구조이다.
  • 스프링 MVC
    [Spring MVC]  -  WEB 관련 영역
    [Spring Core]  -  일반 JAVA 영역(POJO)
    [Spring-MyBatis]
    [DB]

2.  스프링 구동 순서


web.xml

- 프로젝트 구동은 web.xml 에서 시작한다. web.xml 상단에는 가장 먼저 구동되는 Context Listener가 등록되어 있다.

  1. ContextLoaderListener는 해당 웹 어플리케이션을 구동하게 되면 같이 작동이 시작되므로 해당 프로젝트를 실행하면 가장 먼저 로그를 출력하면서 실행한다. --> 여기서 root-context를 부름
  2. root-context.xml이 처리되면 파일에 있는(설정해 놓은) Bean들이 작동한다.
  3. root-context.xml이 처리된 후에는 DispatcherServlet이라는 서블릿과 관련되어 설정이 작동한다. MVC 구조에서 가장 핵심적인 역할을 하는 클래스이며 내부적으로 웹 관련 처리의 준비 작업을 진행한다. 내부적으로 웹 관련 처리의 준비 작업을 진행하기 위해 사용하는 파일이 있고 servlet-context.xml이다.
  4. DispatcherServlet에서 XmlWebApplicationContext를 이용해서 servlet-context.xml을 로딩하고 해석한다. 이 과정에서 등록된 객체(Bean)들을 기존에 만들어진 객체(Bean)들과 같이 연동하게 된다.

3.  스프링 MVC 패턴


0,1. 사용자가 요청을 하면 먼저 정적인 요청이면 바로 서버에서 응답을 하지만 아니라면 Web Container를 통해 동적인 페이지를 만들어서 응답을 하게 된다. 먼저 요청이 들어오면 web.xml을 들리면서 Request는 Front-Controller인 DispatcherServlet로 가게 된다.

2. DispatcherServlet으로 온 요청을 HandlerMapping에서 요청의 처리를 담당할 컨트롤러를 찾게 된다. HandlerMapping 인터페이스를 구현한 여러 객체 중 @RequestMapping이라는 어노테이션이 적용된 것을 기준으로 판단한다.

3,4. 적절한 컨트롤러를 찾았다면 HandlerAdapter를 이용해서 해당 컨트롤러를 동작시킨다.

5,6,7,8,9,10. 컨트롤러에서는 데이터를 받은 다음 Service로 가서 비즈니스 로직을 통해 DAO, DTO를 이용해 DB와 통신을 해 원하는 결과를 얻어서 다시 Service에서 받아 Controller에서는 Service로부터 얻은 결과를 통해 뷰를 결정해준다.

11. Controller의 처리가 완료되었다면 어디로, 어떻게 갈 것인지 라는 결과가 나오고 그 결과를 다시 DispatcherSevlet으로 다시 돌려준다.

12. 그 결과를 ViewResolver가 리턴을 통해 받아서 어떤 View에서 처리하는 것이 좋을지 해석을 해준다.

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>

* ViewResolver는 Controller가 반환한 결과를 어떤 View를 통해서 처리하는 것이 좋을까 해석하는 역할입니다. 가장 흔하게 사용하는 설정은 servlet-context.xml에 정의된 InternalResourceViewResolver 입니다.

 

13. 해석된 결과를 가지고 실제 응답을 보내야 하는 데이터를 JSP 등을 이용해서 생성해준다.

 

14.15. 만들어진 응답(페이지)을 DispatcherServlet을 통해서 응답을 해주고 그 응답을 다시 사용자에게 돌려준다.


출처 : https://tadaktadak-it.tistory.com/108 

출처 : https://velog.io/@haeniyu/210812-Spring-%EC%84%A4%EC%A0%952-root-context.xml

728x90
728x90
Comments