Spring | 05 스프링 MVC의 기본 구조

파과·2022년 9월 19일

프로젝트 생성

XML설정

  • Spring MVC (servlet-context.xml)
  • Spring Core (root-context.xml)
  • MyBatis (root-context.xml)

우선 새 ex01 프로젝트를 생성하자.
Spring MVC 프로젝트로 생성 후 필요한 설정들을 해 준다.

참고 🔗 프로젝트 설정

pom.xml에 롬복을 추가한다.

참고 🔗 롬복 추가

서블릿 버전 변경

pom.xml에서 서블릿 2.5버전은 주석처리하고 3.1.0버전으로 수정한다.

<!-- Servlet -->
<!-- <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>servlet-api</artifactId>
   <version>2.5</version>
   <scope>provided</scope>
  </dependency> -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
</dependency>

프로젝트 로딩 구조

프로젝트 구동에는 다음 xml파일들이 관여한다.

web.xml
root-context.xml
servlet-context.xml

프로젝트 구동은 web.xml에서 시작한다.
web.xml의 상단에 등록된 Context Listener가 가장 먼저 구동된다.

root-context.xml의 경로가 설정되어 있고 listener에 ContextLoadListener가 등록되어 있다.

root-context.xml이 처리되면 파일에 있는 빈(Bean) 설정들이 동작한다.

설정된 빈들이 스프링 context(영역)안에 생성되고 객체들 간의 의존성이 처리된다.

다음으로 스프링 MVC에서 사용하는 DispatcherServlet 서블릿 관련 설정이 동작한다.

내부적으로 웹 처리 준비작업을 진행할 때 사용하는 파일이 servlet-context.xml이다. DispatcherServlet에서 XmlWebApplicationContext를 이용해 servlet-context.xml을 로딩하고 해석하기 시작한다. 이 과정에서 등록된 객체(빈)들은 기존에 만들어진 객체들과 연동된다.

스프링 MVC의 기본 사상

Servlet + JSP에 하나의 계층을 더한 형태로, 내부적으로 서블릿 + JSP를 처리해 주기 때문에 개발자는 Servlet + JSP의 API에 신경쓰지 않고 앱을 제작할 수 있게 된다.

모델2 방식

사용자 Request는 특별한 상황이 아니면 먼저 Controller를 호출하게 된다. 나중에 View를 교체하더라도 사용자가 호출하는 URL에 변화가 없게 만들어주기 때문이다. 컨트롤러는 데이터(모델)를 처리하고 Response에 필요한 데이터(모델)를 View에 전달하게 된다.

  1. 사용자의 모든 Request는 Front-Controller인 DispatcherServlet을 통해 처리한다. (Front-Controller 패턴)
  2. HandlerMapping으로 Request의 처리를 담당하는 컨트롤러를 찾는다. 컨트롤러를 찾으면 HandlerAdapter로 해당 컨트롤러를 동작시킨다.
  3. 개발자가 직접 작성한 Controller 클래스로 실제 Request를 처리하는 로직이 구현된다. Model 객체에 View에 전달해야 할 데이터를 담아서 전달한다. Controller가 반환하는 다양한 타입의 결과는 ViewResolver가 처리한다.
  4. ViewResolver는 Controller가 반환한 결과를 어떤 View로 처리할지 해석한다.
  5. View는 실제로 응답을 보내야 할 데이터를 JSP 등으로 생성하고, 만들어진 응답은 DispatcherServlet을 통해 전송된다.

0개의 댓글