BE/Spring

- 스프링부트의 뷰 반환 과정을 알아보자

E@st 2023. 1. 4. 17:07

영한님의 스프링 입문 강의 내용에서 아래에 내용으로 HTML화면을 전달할 수 있음을 알게 됐다. 

 

강의에서 소개되는 과정은 대략 브라우저에서 localhost:8080:hello-mvc를 입력하면 스프링부트 내장 톰캣 서버로 전달되고 스프링 컨테이너에서 hello-template를 반환한다. 그리고 viewResolver를 통해 HTML 파일을 찾아 변환 후 전달한다는 걸 알 수 있었다.

위 과정을 디버깅을 통해 확인해 보자

@Controller
public class HelloController {

    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
        return "hello-template";
    }
}
 

hello-template.html을 찾아 반환하는 과정만 찾아볼 거 기 때문에 return "hello-template"; 에 break point를 걸어줬다.

그리고 디버깅 모드로 실행 시켜 준 뒤 

웹 브라우저에 http://localhost:8080/hello-mvc? name=name을 입력해 준다. 그러면 우선 페이지가 뜨지 않고 요청이 지속되는 걸 볼 수 있는데 break point를 걸어줬기 때문에 페이지를 아직 반환받지 못하고 있다.

 

현재 name으로 Jun이 입력된 걸 확인하고 Step Over로 어떤 것들이 실행되나 찾아보자.

 

DispatcherServlet 클래스에서 수상한 부분을 발견할 수 있었다. 메서드 내부를 들어가 보면 

메서드 내부에서는 ViewResolver를 상속받는 ResolverList를 볼 수 있었는데 해당되는 ViewResolver를 찾는 과정인 거 같다.

 

그리고 view 에는 ThymeleafView가 반환된 걸 확인할 수 있고 contentType이나 Encoding 방식을 확인 할 수 있었다.

 

ModelAndView객체를 통해 view와 model이 전달되는 걸로 보였으며 view.render 메서드로 모델에 데이터로 뷰를 번역한다.

강의를 보면서 직접 눈으로 확인해보고 싶어서 디버깅을 통해 알아봤다. ViewResolver에 대해 좀 더 자세히 찾아보고 포스팅하겠다.