본문 바로가기

프레임워크/Spring boot Annotation

@RestController와 @ResponseBody의 상관관계

HTTP 통신

HTTP통신은 Header와 Body로 정보를 주고 받으면 통신을 한다. 여기서 ResponseBody란 Body에 해당 정보를 넣어서 응답을 하겠다는 의미이다.

현재는 주로 JSON Format을 활용한 방식이 주가 되었다.

 

Spring MVC 흐름

@RestContoller를 설명하기전에 스프링에서 데이터가 송수신되는 과정을 살펴보자.

1. 클라이언트는 웹서버에 요청을 보내게 된다.

2. Dispatcher Servlet을 Front controller로써, 그 요청을 받게되고 요청을 처리할 Hanlder Mapping을 찾게 된다.

3. Hadler Mapping을 찾고, Handler Mapping에 의해 적합한 Controller을 찾고 Controller은 작업후 결과를 반환하게 된다. 4. 이때 Dispatcher Servlet은 다시 View로 결과를 보내고 응답을 받은걸 반환하게 된다.

@ResponseBody

 

메소드에서 @ResponseBody annotation을 사용하면, Spring은 정해진 format에 맞게 응답값을 변환합니다.

그리고 HTTP Response body에 해당값을 적재 한후 클라이언트에 응답해주게 됩니다.

@RestController

Spring 4.0이상에서의 RestController을 살펴보게 되면 확인할수 있는게 @Controller와 @ResponseBody 어노테이션이 동시에 들어있는걸 확인할수 있습니다.

즉, 기존에 함께 사용하던 @Contoller와 @ResponseBody를 묶어서 좀더 RestFul하게 작동하도록 의도한것임을 알수 있습니다.

결론

Controller에서 정해진 포멧을 이용해 Body에 응답을 보낸다고 할때, 좀더 RestFul하게 사용하기 위해 @RestController을 사용하자 !