🔍 ViewResolver란?
DispatcherServlet이 컨트롤러에서 반환한 논리 View 이름을 받아,
실제 렌더링할 View 객체로 변환하는 역할을 함
💡 기본 흐름
1. Controller가 ModelAndView("test") 반환
2. DispatcherServlet이 viewResolver 호출
3. 논리 View 이름 "test" → 물리 경로 /WEB-INF/views/test.jsp 변환
4. 해당 JSP 파일을 Rendering
🗒️ 예시 코드
package com.example.springbasicmvc.controller;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
// Spring Bean 이름을 URL로 설정
@Component("/view-controller")
public class ViewController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("view-controller가 호출 되었습니다.");
// "test"는 논리적인 ViewName이다. ViewResolver가 물리적인 이름으로 변환해야 한다.
return new ModelAndView("test");
}
}
→ 📍 호출: http://localhost:8080/view-controller
🛠️ View 템플릿 예시 (test.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>블로그 포스트 작성 페이지</title>
</head>
<body>
<h1>블로그 글쓰기</h1>
<form action="save" method="post">
title: <input type="text" name="title" placeholder="제목" />
content: <input type="text" name="content" placeholder="내용" />
<button type="submit">저장</button>
</form>
</body>
</html>
→ 📂 위치: /WEB-INF/views/test.jsp
⚙️ ViewResolver 설정 (Spring Boot)
InternalResourceViewResolver를 자동 등록함spirng.mvc.view.prefix=/WEB-INF/views/
spirng.mvc.view.suffix=.jsp
→ 논리 View 이름 "test" → /WEB-INF/views/test.jsp
⚠️ View를 찾지 못하면?
@Component("/error-controller")
public class WhitelabelErrorController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) {
return new ModelAndView("sparta"); // View 파일 없음
}
}
→ JSP가 존재하지 않으면 Spring Boot 기본 에러 페이지(Whitelabel Error Page) 출력됨
🧰 Spring Boot의 주요 ViewResolver
- Spring Boot를 사용하면 개발에 필요하여
자동으로 등록되는 ViewResolver들이 있음
Bean Name으로 View를 찾아 반환application.properties 설정 파일에 등록한 prefix, suffix 설정 정보를 사용하여 ViewResolver 등록// 아래 코드를 자동으로 해 주는것과 마찬가지
@Bean
InternalResourceViewResolver internalResourceViewResolver() {
return new InternalResourceViewResolver("/WEB-INF/views", ".jsp");
}🚦 ViewResolver 동작 순서
application.properties설정 파일에 등록한prefix,suffix설정 정보를 사용하는 ViewResolver

HandlerAdapter: "test"라는 논리 View 이름 반환
ViewResolver:
BeanNameViewResolver → 실패InternalResourceViewResolver → 성공InternalResourceViewResolver:
"test" → /WEB-INF/views/test.jsp 로 변환InternalResourceView 반환view.render():
RequestDispatcher.forward() 실행 → JSP 렌더링🪄 Thymeleaf 사용 시
- Thymeleaf는 View + Resolver가 모두 내장되어 있기 때문에
return "home"만으로 자동 렌더링 가능 (라이브러리 의존성만 추가)