@Controller와 @RestController 는 무슨 차이?

띠용·2025년 4월 18일

우테코 7기 BE

목록 보기
4/15

@Controller : 전통적인 스프링 MVC Controller
@RestController : Restful 웹서비스 Controller

RESTful이란?
  • REST 아키텍처를 구현하는 웹 서비스 (“REST하다!”)
REST란?
  • URI로 자원을 표현하고 HTTP Method (GET / POST / PUT / DELETE)로 행위를 표현
  • JSON 또는 XML로 데이터 교환
  • 기존 HTTP 인프라를 그대로 활용 → 모든 HTTP 플랫폼에서 사용 가능
  • 일반적인 컨벤션으로 API 이해도와 호환성 향상
  • RESTful하지 못한 예
    • CRUD를 모두 POST로만 처리하는 API
    • 경로에 resource·id 외의 정보가 들어가는 경우
      예) /students/updateName

@Controller 이해하기

1. Controller는 View 를 반환할 수 있음

  1. Client가 URI 형식으로 웹 서비스에 요청
  2. DispatcherServlet 어쩌구 ~ 생략
  3. Controller가 요청을 처리한 후 ViewName을 반환
  4. DispatcherServlet 어쩌구 ~ 생략
  5. ViewResolver가 ViewName에 해당하는 View를 찾아 사용자에게 반환

2. Controller는 Data 를 반환할 수 있음

  1. Client가 URI 형식으로 웹 서비스에 요청
  2. DispatcherServlet 어쩌구 ~ 생략
  3. Controller가 요청을 처리한 후 객체를 반환 (@ResponseBody 필요)
  4. 반환되는 객체는 Json으로 Serialize 되어 사용자에게 반환된다.
  • 객체를 반환할 때는 일반적으로 ResponseEntity로 감싸서 반환한다.
  • 객체를 반환하기 위해서는 ViewResolver 대신 HttpMessageConverter가 동작함.
  • Spring은 클라이언트의 HTTP Accept 헤더와 서버의 클라이언트 컨트롤러 반환 타입 정보를 조합해 적절한 Converter를 선택
HttpMessageConverter
  • 내부에 다양한 Converter가 존재
  • 단순 문자열 → StringHttpMessageConverter
  • 객체 → MappingJackson2HttpMessageConverter

2. @RestController 이해하기

@RestController = @Controller + @ResponseBody

→ Json 형태로 객체 데이터 반환


결론

  1. @Controller는 ViewName을 반환할 수 있다.
  2. @Controller가 객체를 반환하려면 @ResponseBody 어노테이션이 필요하고, 반환형태는 Json으로 Serialize된다.
  3. @RestController는 2.(@Controller+@ResponseBody)와 완전히 동일하다.
    1. 기능은 같지만 REST API 제공 의도를 명시적으로 드러냄

뭔가 김새지만 대단한 차이가 없었다.


참고블로그

0개의 댓글