[참고] View와 ViewResolver의 관계

박은서's avatar
Jan 29, 2026
[참고] View와 ViewResolver의 관계

1️⃣ View와 ViewResolver의 실행 흐름

1) Controller (Servlet)

View view = ViewResolver.render("home"); view.forward(req, resp);
여기서:
  • render("home")
    • ViewResolver
    • View를 만들어서 반환
  • forward(...)
    • View
    • 실제 HTML 응답 생성

2) ViewResolver의 역할

public static View render(String viewName) { ... Template template = Mustache.compiler().compile(reader); return new View(template); }
이 시점에서 일어나는 일:
  • 템플릿 파일 로딩
  • Mustache 컴파일
  • View 객체 생성만 함
  • ❗ HTTP 요청/응답에는 전혀 관여하지 않음

3) View의 역할

public void forward(HttpServletRequest req, HttpServletResponse resp)
이 메서드에서:
  • request attribute 수집
  • model 생성
  • template.execute(...)
  • response에 HTML 출력
➡️ 여기서야 비로소 “렌더링”이 발생

4) 비유

  • ViewResolver
    • → “이름 주면 파일 찾아서 도구를 준비해주는 사람”
  • View
    • → “준비된 도구로 실제 작업(HTML 생성)을 수행하는 사람”
  • Controller
    • → “둘 다 불러서 전체 흐름을 지휘하는 사람”

2️⃣ View와 ViewResolver의 관계

질문
ViewResolver가 View를 호출하나?
❌ 아니다
ViewResolver가 View를 생성하나?
✅ 그렇다
View를 호출하는 주체는?
✅ Controller
ViewResolver와 View는 서로 직접 소통하나?
❌ 아니다 (생성자 인자로만 연결됨)
 
Share article