스프링 MVC 기본 구조

김주언·2022년 9월 2일
0

Spring

목록 보기
7/15
post-thumbnail

스프링 MVC는 스프링의 서브 프로젝트
→ 스프링은 하나의 기능을 위해서만 만들어진 프레임워크가 아닌 코어 프레임워크 + 여러 서브 프로젝트의 결합

서브 프로젝트 ?
→ 별도의 설정이 존재할 수 있다는 것
즉, Spring Legacy Project로 생성한 프로젝트에도 servlet-contex, root-context로 설정파일이 분리되어 있음. 이렇게...

1. 스프링 MVC 프로젝트의 구조

  • root-context.xml
    JAVA 영역 (POJO 영역)

  • servlet-context.xml
    Web 영역

  • WebApplicationContext
    기존 구조에 MVC 설정 포함하는 구조

1.1 로딩 구조

프로젝트 구동 시 관여하는 XML
우선, xml 파일은 모두 객체(Bean)를 정의한다.

  • Tomcat 구동 관련 설정

    • web.xml
      • 배포자 기술자 DD(Deployment Descriptor)
      • 설정을 위한 설정파일.
      • 최초로 WAS가 최초로 구동될 때, 각종 설정을 정의한다.
      • 여러 xml파일을 인식하도록 각 파일을 가리켜 준다.
  • 스프링 관련 설정

    • root-context.xml

      • view와 관련되지 않은 객체를 정의
      • Service, Repository(DAO), DB등 비즈니스 로직과 관련된 설정
    • servlet-context.xml

      • 요청과 관련된 객체를 정의
      • url과 관련된 controller나, @(어노테이션), ViewResolver, Interceptor, MultipartResolver 등의 설정

아래 내용은 web.xml 파일의 일부다
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
  • <context-param>
    root-context.xml의 경로 설정
  • <listener>
    스프링의 ContextLoaderListener 등록. 이는 웹 앱 구동시 함께 동작한다.

root-context.xml이 처리되면 파일에 있는 빈 설정들이 동작한다. 이 파일에 정의된 빈들(객체들)은 스프링의 context영역 내부에 생성되고 객체들 간의 의존성이 처리됨

root-context.xml이 처리된 후 스프링 MVC에서 사용하는 DispatcherServlet이라는 서블릿 관련 설정이 동작한다.

<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

내부적으로 웹 관련 처리 준비 작업을 진행할 때 사용하는 파일이 servlet-context.xml

DispatcherServlet에서 XmlWebApplicationContext를 이용하여 servlet-contex.xml을 로딩한다. 이 과정에서 등록된 객체들은 기존의 객체들과 연동된다.

1.2 스프링 MVC 기본 사상

스프링 MVC 이용 시 개발자는 HttpServletRequest/HttpSerlvetResponse 와 같은 Servlet/JSP API 사용해야하는 필요성이 적어지고 스프링이 중간에서 그 역할을 수행한다.

스프링 MVC는 내부적으로 Servlet API를 활용하며 모델 2 방식으로 처리한다.

모델 2

로직과 화면을 분리하는 개발방식

스프링 MVC 기본 구조

  1. DispatcherServlet
    사용자의 모든 Request 처리

  2. HandlerMapping
    Request 처리를 담당하는 컨트롤러 찾기.
    @RequestMapping 설정된 컨트롤러를 찾는다.

  3. HandlerAdapter
    HandlerMapping 단계에서 찾은 컨트롤러를 동작시킨다.

  4. Controller
    실제로 요청을 처리하는 로직 작성
    다양한 타입의 결과 반환 가능하며 이를 ViewResolver가 처리한다.

  5. ViewResolver
    Controller가 반환한 결과를 어떤 view를 통해 처리할지 해석한다.
    servlet-context.xml에 정의된 InternalResourceViewResolver가 대표적

  6. View
    실제로 응답을 보내야하는 데이터를 JSP 이용하여 생성

  7. 만들어진 응답은 DispatcherServlet을 통해 전달된다.

profile
학생 점심을 좀 차리시길 바랍니다

0개의 댓글