뷰 템플릿을 통해 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편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부하였습니다.
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : 프로젝트 생성 및 요구사항 분석 (0) | 2022.02.01 |
---|---|
[Spring Boot] : 요청 매핑 핸들러 어뎁터 구조 (0) | 2022.01.28 |
[Spring Boot] : HTTP, API 메시지 바디에 직접 입력해 HTTP 응답하기 (0) | 2022.01.28 |
[Spring Boot] : 정적 리소스 및 뷰 템플릿 (0) | 2022.01.26 |
[Spring Boot] : HTTP 요청 메시지 JSON (0) | 2022.01.26 |
댓글