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