ViewResolver: 논리적 뷰 이름을 물리적 리소스 경로로 변환

상위 맥락

02. MVC 인프라 구성 요소 < 02. MVC 아키텍처와 요청 흐름 < 01. Spring MVC1 기초와 아키텍처 < MVC < Spring < Web

핵심 정리

ViewResolver는 컨트롤러가 반환한 논리적 뷰 이름을 실제 렌더링 가능한 물리적 리소스 경로로 바꾸는 MVC 인프라 구성 요소입니다. 컨트롤러는 index 같은 추상적인 이름만 반환하고, 실제 파일 위치는 ViewResolver가 결정합니다.

동작 원리

컨트롤러가 return "index";를 수행하면 DispatcherServlet은 이 문자열만으로 실제 화면 파일을 알 수 없습니다. 그래서 ViewResolver에게 View를 찾아달라고 요청합니다.

대표적으로 JSP를 사용할 때는 prefix와 suffix를 이용해 경로를 조립합니다.

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

이 설정이 있다면 논리적 뷰 이름 index/WEB-INF/views/index.jsp로 해석됩니다.

설계적 의미

ViewResolver 덕분에 컨트롤러는 JSP, Thymeleaf, Mustache 같은 구체적인 뷰 기술이나 파일 위치를 알 필요가 없습니다. 컨트롤러는 논리적 이름만 반환하고, 화면 리소스의 실제 위치와 렌더링 방식은 인프라 설정으로 분리됩니다.

이 구조는 뷰 기술 변경이나 폴더 구조 변경이 있어도 컨트롤러 코드를 최소한으로 유지하게 합니다.

예외적인 응답 흐름

모든 응답이 ViewResolver를 통과하는 것은 아닙니다. redirect: 접두어가 붙으면 클라이언트 재요청 흐름으로 전환됩니다. @ResponseBody가 붙으면 ViewResolver를 우회하고 JSON 데이터 응답으로 처리됩니다.

관련 내용은 Redirect@ResponseBody JSON 응답에서 정리합니다.

한 문장 요약

ViewResolver는 컨트롤러가 반환한 논리적 뷰 이름을 실제 화면 리소스 경로로 변환하여, 컨트롤러와 뷰 기술의 결합을 낮춥니다.

핵심 연결

DispatcherServlet와 함께 읽으면 좋습니다.