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와 함께 읽으면 좋습니다.