Deep Dive /Java Web /17-V7

17-V7. ThymeleafView → DispatcherServlet: HTML 반환

템플릿 엔진이 writer에 HTML을 쓰면, ThymeleafView의 역할은 끝나고 제어 흐름이 다시 DispatcherServlet 쪽으로 복귀합니다.


이번 단계의 역할

템플릿 처리 결과가 응답 버퍼에 기록되고, 뷰 렌더링 단계가 마무리되는 구간입니다.


호출 흐름 요약

  1. TemplateEngine.process(...)가 HTML을 writer에 씁니다.
  2. 버퍼 모드라면 response.getWriter().write(...)로 한 번에 씁니다.
  3. response.getWriter().flush()가 호출됩니다.
  4. view.render(...)가 종료되면서 DispatcherServlet로 제어가 돌아갑니다.

호출 흐름 다이어그램

sequenceDiagram participant Engine as TemplateEngine participant View as ThymeleafView participant Resp as HttpServletResponse participant DS as DispatcherServlet Engine-->>View: rendered HTML View->>Resp: write(...) / flush() View-->>DS: render() return

핵심 코드

// ThymeleafView.java
viewTemplateEngine.process(templateName, processMarkupSelectors, context, templateWriter);

if (!producePartialOutputWhileProcessing) {
    response.getWriter().write(templateWriter.toString());
    response.getWriter().flush();
}

코드 해설

DispatcherServlet이 직접 HTML 문자열을 다루는 것이 아니라, View가 응답 writer에 써 넣고 종료합니다. 따라서 “HTML 반환”은 메서드 반환값이라기보다 응답 스트림 기록 완료로 이해하는 것이 정확합니다.


설계 의도

템플릿 엔진 출력과 HTTP 응답 기록을 View 계층 안에서 마무리해, DispatcherServlet은 흐름 제어에만 집중하도록 한 구조입니다.


다음 단계 연결

다음 문서 17-V8에서는 이렇게 작성된 HTML 응답이 최종적으로 브라우저에 도달하는 마지막 단계를 정리합니다.

← 이전: 17-V6. ThymeleafView → TemplateEngine | 다음: 17-V8. DispatcherServlet → Browser: HTTP Response (HTML)