spring

[spring] @Controller VS @RestController 차이점

엄지성 2024. 4. 3. 14:10

spring에는 두 가지의 컨트롤러 정의하는 방법이 있다.

 

첫 번째는 Spring MVC의 컨트롤러인 @Controller가 있고

두 번째는 RestfulAPI의 컨트롤러인 @RestController가 존재한다.

 

앞서 말한 두 컨트롤러의 차이점을 간단히 말하자면 @Controller는 View를 반환하고

@RestController는 HTTP Response를 반환한다는 차이점이 존재한다.

 

조금 더 자세히 말하자면

@Controller와 @RestController의 동작방식

 

위에 있는 그림이 @Controller의 동작 방식이다.

보다시피 View와 View Resolver가 있는 걸 볼 수 있다.

 

하지만 @RestController의 동작방식은

 

view와 view Resolver가 존재하지 않고 그 대신에 @ResponseBody가 작동하면서 

HttpMessageConverter에서 반환데이터에 맞는 Converter가 작동되어 반환된다.

 

정리

  1. @Controller와 @RestController의 선택의 기준은 용도에 따라 선택된다는 차이점이 존재한다.
  2. @Controller 어노테이션은 spring 2.5에 추가된 어노테이션이고 @RestController는 spring 4.0에 추가되었다.
  3. 과거에는 JSP와 HTML 등 직접 view를 반환하는 경우가 많았지만 지금은 FE/BE로 나뉘어서 개발하는 경우가 많아 JSON으로만 전달하기 때문에 @RestController를 더 많이 사용한다.