본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : HTTP 메시지 컨버터

by 오주현 2022. 1. 28.
반응형

뷰 템플릿을 통해 HTML을 생성해서 응답하는 게 아니라, HTTP API 처럼 JSON 데이터를 HTTP 메시지 바디에서 직접 읽거나 쓰는 경우 HTTP 메시지 컨버터를 사용하면 편하다고 한다.

 

강의에서 HTTP 메시지 컨버터를 자세하기 알아보기 전에 @ResponseBody에 대해서 간단하게 설명을 해 주었다. 내용은 아래와 같다.

 

@ResponseBody를 사용하면 HTTP의 Body에 문자 내용을 직접 반환한다. 즉, ViewResolver 대신에 HttpMessageConverter가 동작하게 되는 것이다.

 

HTTP 메시지 컨버터는 인터페이스로 되어 있다.

 

HTTP 메시지 컨버터는 HTTP 요청, HTTP 응답 둘 다 사용된다.

 

HttpMessageConverter 인터페이스에 들어가 보면 canRead()와 canWrite()가 있는데 여기서 메시지 컨버터가 해당 클래스, 미디어타입을 지원하는지 체크하게 되고 read()와 write()에서 메시지를 읽고 쓰게 된다.

 

스프링 부트는 다양한 메시지 컨버터를 제공하고 몇 가지 중요한 컨버터가 있다.

 

ByteArrayHttpMessageConverter와 StringHttpMessageConverter와 MappingJackson2HttpMessageConverter이렇게 세 가지 컨버터가 중요하다고 한다.

 

ByteArrayHttpMessageConverter는 bete[] 데이터를 처리한다.

StringHttpMessageConverter는 String 문자로 데이터를 처리한다.

MappingJackson2HttpMessageConverter는 application/json을 처리한다.

HTTP 요청 데이터 읽기에 대해서도 강의에서 설명을 해 주었다.

 

HTTP 요청이 오면 컨트롤러에서 @RequestBody, HttpEntity 파라미터를 사용하고 메시지 컨버터가 메시지를 읽을 수 있는지 확인을 하기 위해 canRead()를 호출한다. canRead()에서 대상 클래스 타입을 지원하는지 HTTP 요청의 Content-Type 미디어 타입을 지원하는지 체크하고 조건을 만족하면 read()를 호출해서 객체를 생성하고 반환한다고 한다.

 

HTTP 응답 데이터 생성에 대해서도 알려주었는데

컨트롤러에서 @ResponseBody, HttpEntity로 값이 반환이 되면 메시지 컨버터가 메시지를 쓸 수 있는지 확인하기 위해 canWrite()를 호출하고 canWrite()에서 대상 클래스 타입을 지원하는지와 HTTP 요청의 Accept 미디어 타입을 지원하는지(@RequestMapping의 produces)체크하고 조건을 만족하면 write()를 호출해서 HTTP 응답 메시지 바디에 데이터를 생성해 준다.


스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부하였습니다.

반응형

댓글