Deep Dive /Java Web /17-V8

17-V8. DispatcherServlet → Browser: HTTP Response (HTML)

뷰 렌더링이 끝나면, 응답 버퍼에 기록된 HTML은 서블릿 컨테이너를 통해 브라우저로 전달됩니다. Spring MVC 소스 기준으로는 DispatcherServlet.render(...)가 끝나고, ThymeleafView 쪽에서는 이미 writer flush가 완료된 상태입니다.


이번 단계의 역할

HTML 응답이 완성되어 브라우저로 전달되는 최종 단계입니다.


호출 흐름 요약

  1. view.render(...)가 종료됩니다.
  2. DispatcherServlet의 뷰 렌더링 단계가 마무리됩니다.
  3. 컨테이너가 응답 버퍼의 HTML을 네트워크로 전송합니다.
  4. 브라우저가 최종 HTML을 받습니다.

호출 흐름 다이어그램

sequenceDiagram participant DS as DispatcherServlet participant Container as Servlet Container participant Browser DS-->>Container: rendered response ready Container-->>Browser: HTTP Response (HTML)

핵심 코드

// DispatcherServlet.java
if (mv != null && !mv.wasCleared()) {
    render(mv, request, response);
}
// ThymeleafView.java
response.getWriter().write(templateWriter.toString());
response.getWriter().flush();

코드 해설

Spring MVC는 여기서 더 이상 HTML 내용을 만지지 않습니다. 응답 writer에 기록된 데이터는 이제 서블릿 컨테이너가 HTTP 응답으로 브라우저에 전달합니다.


설계 의도

프레임워크, 뷰 엔진, 서블릿 컨테이너의 책임이 단계별로 분리되어 있기 때문에 가능한 마무리 단계입니다.


다음 단계 연결

다음 문서 17-R1부터는 HTML 뷰가 아닌 REST/JSON 응답 경로를 이어서 봅니다.

← 이전: 17-V7. ThymeleafView → DispatcherServlet: HTML 반환 | 다음: 17-R1. Controller → DispatcherServlet: Object / ResponseEntity 반환