@Controller와 @RestController

양성준·2025년 3월 24일

스프링

목록 보기
20/49

@Controller

  • 화면(View)를 반환
  • 반환값을 View 이름으로 인식하여 템플릿을 렌더링
  • JSON 형식으로 응답 시, @ResponseBody를 붙여야함
  • View 이름을 반환하면, ViewResolver가 동작하여 해당 View 이름에 맞는 템플릿 (HTML, JSP 등) 렌더링
  • Thymeleaf, JSP 등 View 템플릿과 함께 사용

처리 과정 (View 반환)

1. 클라이언트가 URI 형식으로 요청을 보냄
2. DispatcherServlet이 HandlerMapping의 Controller URL 매핑정보를 보고, 적절한 Controller의 메서드를 찾음
3. DispatcherServlet은 실행 방식을 모르므로, 실행 방식을 아는 HandlerAdapter를 통해 요청을 Controller로 위임하여 메서드를 실행시킨다.
4. Controller는 요청을 처리하고 ViewName을 반환한다.
5. DispatcherServlet이 ViewResolver를 통해 ViewName에 해당하는 View를 찾아 렌더링하여 사용자에게 반환한다.

처리 과정 (@ResponseBody를 통해 JSON 반환)
=> @RestController의 처리 과정과 동일

@RestController

  • JSON, XML 등 데이터를 반환 (REST API)
  • 반환값을 객체 그대로 응답 바디에 직렬화
  • 자동으로 @ResponseBody가 적용되어, JSON 형식으로 반환됨
  • 즉, @Controller + @ResponseBody인 것
  • 값을 반환하면 HttpMessageConverter가 동작하여 객체를 요청 헤더에 따라 알맞은 변환기를 골라 변환하여 응답
    (보통은 application/json -> MappingJackson2HttpMessageConverter 선택하여 JSON 문자열로 반환)

처리 과정 (JSON 반환)

1. 클라이언트가 URI 형식으로 요청을 보냄
2. DispatcherServlet이 HandlerMapping의 Controller URL 매핑정보를 보고, 적절한 Controller의 메서드를 찾음
3. DispatcherServlet은 실행 방식을 모르므로, 실행 방식을 아는 HandlerAdapter를 통해 요청을 Controller로 위임하여 메서드를 실행시킨다. (이 때 @RequestBody가 있다면 HttpMessageConverter가 동작하여 메시지를 객체로 역직렬화)
4. Controller는 요청을 처리하고 객체를 반환한다.
5. 반환되는 객체는 DispatcherServlet이 받아 적절한 HttpMessageConverter를 선택하여 객체를 직렬화하여 반환한다.

참고 - https://mangkyu.tistory.com/49

profile
백엔드 개발자를 꿈꿉니다.

0개의 댓글