@Controller VS @RestController

dongbin_Shin·2021년 8월 5일
0

spring mvc

목록 보기
1/1
post-thumbnail

Spring에서 컨트롤러를 지정해주기 위한 어노테이션으로는 @Controller@RestController가 있다.
@Controller는 spring 2.5버전부터 지원됐고
@RestController는 그보다 늦은 spring 4부터 지원을 시작했다.
결론부터 말하자면 @RestController = @Controller + @ResponseBody 이다.

@Controller

Controller - view반환

@Controller는 주로 view를 반환하기 위해 사용한다.
@Controller가 view를 반환하는 과정은 다음과 같다.
1. 사용자가 URI형식으로 웹 서비스에 요청을 보낸다.
2. DispatcherServlet이 요청을 인터셉트하여 mapping되는 Handler를 찾는다.
3. Controller가 요청을 처리한 후 응답을 DispatcherServlet로 반환한다.
4. DispatcherServlet은 응답받은 view를 사용자에게 반환한다.

Controller가 처리한 응답 view를 viewResolver가 렌더링한다.

Controller - 데이터 반환

@Controller에서도 view뿐만 아니라 데이터를 반환하는 경우가 있다.
이때는 @ResponseBody어노테이션을 함께 적어주어 구현할 수 있다.
@Controller가 데이터를 반환하는 과정은 다음과 같다.
1. 사용자가 URI형식으로 웹 서비스에 요청을 보낸다.
2. DispatcherServlet이 요청을 인터셉트하여 mapping되는 Handler를 찾는다.
3. Controller가 요청을 처리한 후 응답을 Json 형태로 반환한다.

Controller가 데이터를 반환할 때는 viewResolver 대신 HttpMessageConverter가 동작한다.
반환하는 데이터에 따른 Converter

  • String: StringHttpMessageConverter
  • 객체: MappingJackson2HttpMessageConverter

spring은 HTTP Accept 헤더, controller의 반환 타입 정보를 조합해 적절한 HttpMessageConverter을 선택한다.

@RestController

안드로이드 앱과 같이 다른 플랫폼에 서버를 렌더링하는 경우가 점점 많아지고, 프론트엔드와 백엔드 전문가가 나뉘어짐에 따라 view보다는 데이터 자체를 넘겨주는 경우가 늘어남에 따라 만들어진 어노테이션이다.
동작은 @Controller@ResponseBody를 함께 사용한 것과 동일하게 수행된다.

결과적으로 controller에 @RestController를 붙이면 모든 핸들러 메소드에 @ResponseBody를 사용할 필요가 없어진다.

"본 포스트는 작성자가 공부한 내용을 바탕으로 작성한 글입니다.
잘못된 내용이 있을 시 언제든 댓글로 피드백 부탁드리겠습니다.
항상 정확한 내용을 포스팅하도록 노력하겠습니다."

profile
멋있는 백엔드 개발자

0개의 댓글