@ResponseBody 와 @RestController

HwangJerry·2023년 4월 25일
0

@ResponseBody

@ResponseBody는 메소드가 반환하는 값을 JSON 등으로 설정할 수 있는 어노테이션입니다. 기존에는 클래스에 @Controller 어노테이션을 입력한 뒤에, 메소드 레벨에서 필요한 메소드마다 @ResponseBody 어노테이션을 지정해줘야 했습니다.

HttpMessageConverter는 스프링 프레임워크에서 HTTP 요청과 응답에 사용되는 메시지 변환을 담당하는 인터페이스입니다. 주요 역할은 HTTP 요청 본문의 데이터를 자바 객체로 변환하거나(역직렬화, Json -> 객체 등), 자바 객체를 HTTP 응답 본문으로 변환하는 작업 (직렬화, 객체 -> Json 등)을 수행합니다. 이를 통해 클라이언트와 서버 간의 데이터 교환을 쉽게 처리할 수 있습니다.

@RestController

하지만 MSA 등의 개발 추세에 따라 RESTful API 개발을 위해서는 해당 어노테이션을 반복적으로 붙여야 하는 불편함이 존재하였기에, 이후 @Controller 어노테이션과 @ResponseBody 어노테이션이 합쳐져 @RestController 어노테이션이 탄생하였습니다. 이를 클래스 레벨에서 선언해두면 해당 클래스 내에 선언된 메소드는 모두 그 반환 값의 타입이 JSON 객체 등으로 지정되어 HTTP의 Body에 문자 내용이 반환됩니다.

이는 HttpMessageConverter가 동작하여 요청을 처리할 수 있는데, DispatcherServlet은 들어온 요청을 처리할 수 있는 Controller 메소드를 찾고, 해당 메소드의 로직을 통해 요청을 처리하고 HttpMessageConverter를 통해 응답을 생성하여 HTTP 응답 Body에 포함하여 클라이언트에 반환합니다.

화면을 서버 사이드 렌더링을 통해 제공할 때에는 ViewResolver, 정적 리소스를 제공할 때에는 ResourceHandler를 사용한다면, 요청에 대한 응답을 HTTP의 Body에 직접 할 때에는 HttpMessageConverter가 동작합니다.

이는 기본 문자를 처리하는 StringHttpMessageConverter, 기본 객체를 처리하는 MappingJackson2HttpMessageConverter 등의 여러 HttpMessageConverter가 존재합니다.

profile
알고리즘 풀이 아카이브

0개의 댓글