스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 26

Spring 정리 2022. 5. 27. 20:30

인프런 강의 38일차.

 - 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 1 (김영한 강사님)

 - 서블릿, JSP, MVC 패턴

 - 서블릿으로 1차 구현

   -> 서블릿으로 구현했을 때 불편한 점 개선을 위해 JSP로 2차 구현

   -> JSP로도 불편한 점을 개선하기 위해 MVC 패턴으로 3차 구현

 - 스프링 프로젝트 시작

   -> 스프링 기본기능 이해

   -> 스프링 MVC 웹페이지 만들기

 

4. 스프링 MVC - 기본 기능

 4.14 HTTP 메시지 컨버터

HTTP 메시지 컨버터 위치

  > HTTP 메시지 컨버터를 사용하는 @RequestBody 도 컨트롤러가 필요로 하는 파라미터의 값에 사용된다

  > @ResponseBody 의 경우도 컨트롤러의 반환 값을 이용한다

 

  > 요청의 경우 @RequestBody 를 처리하는 ArgumentResolver 가 있고, HttpEntity 를 처리하는 ArgumentResolver 가 있다.

  > 이 ArgumentResolver 들이 HTTP 메시지 컨버터를 사용해서 필요한 객체를 생성하는 것이다. (ArgumentResolver가 루프를 돌면서 RequestBody / HttpEntity에 해당하는 메시지 컨버터를 수행하는 것. 즉 전달받은 Argument에 해당하는 메시지 컨버터를 찾아내는 것이 역할. 여기서 호출되는 메시지 컨버터는 Read를 수행한다)

  > 응답의 경우 @ResponseBody 와 HttpEntity 를 처리하는 ReturnValueHandler 가 있다. 그리고 여기에서 HTTP 메시지 컨버터를 호출해서 응답 결과를 만든다. (여기서 호출되는 메시지 컨버터는 Write를 수행한다)

 

 > 스프링 MVC는 @RequestBody @ResponseBody 가 있으면 RequestResponseBodyMethodProcessor (ArgumentResolver), HttpEntity 가 있으면 HttpEntityMethodProcessor (ArgumentResolver)를 사용한다.

 

 * 확장

  > 스프링은 다음을 모두 인터페이스로 제공한다. 따라서 필요하면 언제든지 기능을 확장할 수 있다.

   - HandlerMethodArgumentResolver

   - HandlerMethodReturnValueHandler

   - HttpMessageConverter

  > 스프링이 필요한 대부분의 기능을 제공하기 때문에 실제 기능을 확장할 일이 많지는 않다. 기능 확장은 WebMvcConfigurer 를 상속 받아서 스프링 빈으로 등록하면 된다. 실제 자주 사용하지는 않으니 실제 기능 확장이 필요할 때 WebMvcConfigurer 를 검색해보자.

@Bean
public WebMvcConfigurer webMvcConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void addArgumentResolvers(List<HandlerMethodArgumentResolver>
                                                 resolvers) {
            //...
        }
        @Override
        public void extendMessageConverters(List<HttpMessageConverter<?>>
                                                    converters) {
            //...
        }
    };
}

  - WebMvcConfigurer 확장