Spring MVC 뷰 리졸버 (View Resolver)

yedi·2024년 10월 24일
post-thumbnail

Spring MVC 프로젝트에서 @RequestMapping 경로를 설정했음에도 화면 호출에 문제가 발생했습니다.
이는 뷰 리졸버(View Resolver) 설정이 올바르지 않았기 때문입니다.
뷰 리졸버(View Resolver) 의 개념과 설정 방법에 대해 알아보겠습니다.


배경

개발 환경

IDE : Eclipse
JDK : Java 17
Server : Apache Tomcat 9.0

프로젝트 환경

: Spring MVC 프레임워크를 기반으로 한 Maven 웹 애플리케이션입니다.
: Spring MVC를 사용해 웹 애플리케이션을 구축하며, Maven을 통해 의존성 및 빌드 관리를 처리할 수 있습니다.

파일 구조

JSP 파일 위치
: JSP 파일을 /WEB-INF/jsp/ 경로에 배치되어 있습니다.
: 예를 들어, hello.jsp 파일이 있다면, 컨트롤러에서 return "hello"; 를 반환할 때 /WEB-INF/jsp/hello.jsp 파일이 렌더링됩니다.

경로 예시

src/
└── main/
    ├── java/          // Java 소스 코드
    ├── webapp/
    │   ├── WEB-INF/
    │   │   ├── JSP/  // JSP 파일
    │   │   └── web.xml // 서블릿 설정 파일
    └── resources/      // 정적 리소스 및 설정 파일


뷰 리졸버 (View Resolver)

정의

뷰 리졸버(View Resolver) 는 클라이언트의 요청에 대한 응답으로 어떤 뷰를 사용할지를 결정하는 중요한 컴포넌트입니다.

역할

① 응답 결정 : MVC 패턴에서, 컨트롤러가 처리를 마친 후 어떤 뷰로 응답을 생성할지를 결정하는 데 필요합니다.

② 뷰 파일 경로 해석 : 컨트롤러에서 반환된 뷰 이름을 바탕으로 실제 뷰 파일의 경로를 해석하여 해당 뷰를 찾는 데 도움을 줍니다.

③ 정상적인 렌더링 보장 : 뷰 리졸버 (View Resolver) 를 올바르게 설정하는 것은 Spring MVC 애플리케이션에서 뷰를 정상적으로 렌더링하고 사용자에게 표시하는 데 필수적입니다.

지원하는 뷰 기술

Spring MVC는 다양한 뷰 기술을 지원하며, 이를 위해 여러 뷰 리졸버를 제공합니다.
JSP, Thymeleaf, FreeMarker 등 다양한 템플릿 엔진을 사용할 수 있습니다.



뷰 리졸버 (View Resolver) 설정 방법

dispatcher-servlet.xml 파일을 직접 생성하여 Spring MVC 설정을 추가할 수 있습니다.
Maven 프로젝트에서는 src/main/webapp/WEB-INF 경로에 dispatcher-servlet.xml 파일을 생성하고, 그 안에 Spring의 뷰 리졸버와 기타 설정을 정의합니다.

dispatcher-servlet.xml 생성

InternalResourceViewResolver
: JSP와 같은 내부 자원에 대한 뷰를 렌더링하는 데 사용된다.
이 리졸버는 접두사와 접미사를 설정하여 반환된 뷰 이름의 앞뒤에 특정 문자열을 자동으로 추가함으로써, 실제 JSP 파일의 경로를 구성합니다.

뷰 리졸버 (View Resolver) vs 뷰 렌더링 (View Rendering)
: 뷰 리졸버 (View Resolver)는 어떤 뷰를 사용할지를 결정하는 역할을 하며, 요청에 대한 뷰의 경로를 찾습니다.
: 뷰 렌더링 (View Rendering)은 실제 뷰를 생성하고 클라이언트에게 전달하는 과정입니다.

① 파일 경로 : src/main/webapp/WEB-INF/dispatcher-servlet.xml
② 파일 내용 예시 :

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- Component Scan -->
    <context:component-scan base-package="com.example.yourpackage" />

    <!-- View Resolver -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- Enable Spring MVC Annotations -->
    <mvc:annotation-driven />

</beans>

추가 사항 - web.xml 설정

dispatcher-servlet.xml 을 Spring의 DispatcherServlet 과 연결하기 위해 web.xml 파일에서 이를 선언해야 합니다.

파일 내용

<web-app>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

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

이 설정을 통해 모든 URL 요청을 DispatcherServlet이 처리하고, Spring MVC가 작동하게 됩니다.

0개의 댓글