@Controller, @RestController, @Responsebody 헷갈릴때

김윤준·2024년 4월 9일

@Controller

이 친구는 주로 View(화면)을 반환하기 위해 사용한다.

Controller로 View 반환 과정

  1. Client는 URL 형식으로 요청을 보냄
  2. DispatcherServlet이 요청을 위임할 handler Mapping을 찾는다. ➡️ DispatcherServlet이란?
  3. Handler Mapping을 통해 요청을 Controller로 위임한다.

    Handler Mapping
    Spring MVC의 중심 구성요소 중 하나로, 클라이언트의 요청을 적절한 컨트롤러로 라우팅하는 역할.
    Handler Mapping은 클라이언트 요청 URL을 분석하여 해당 URL에 매핑되는 컨트롤러 메소드를 찾는다. 이를 위해
    @RequestMapping, @GetMapping, @PostMapping등의 메소드 레벨 어노테이션을 사용하여 컨트롤러 메소드를 정의한다.

  4. Controller는 요청을 처리한 후 View Name을 Handler Adapter한테 반환한다.
  5. Handler Adapter는 이걸 DispatcherServlet한테 반환한다.
  6. DispatcherServlet은 View Resolver를 통해 View Name에 해당하는 View를 찾아서 Client한테 반환.

하지만 컨트롤러로 데이터를 반환하고 싶으면?

컨트롤러에서 Data를 반환하고 싶을때는 @ResponseBody 를 활용해서 JSON 형태로 반환할 수 있다.

Controller로 data 반환 과정

  1. Client는 URL 형식으로 요청을 보낸다.
  2. DispatcherServlet이 요청을 위임할 Handler Mapping을 찾는다.
  3. Handler Mapping을 통해 요청을 Controller로 위임한다.
  4. Controller는 요청을 처리한 후 객체를 반환한다.
  5. 반환되는 객체는 JSON으로 직렬화돼서 Client에게 반환된다.

@ResponseBody로 반환하게 되면 ResponseEntity로 감싸서 반환된다.
그리고 View를 반환할때 사용된 View Resolver 대신 HttpMessageConverter가 동작한다.
이는 반환되는 데이터에 따라 다른 Converter가 동작한다.

  • 문자열 : StringHttpMessageConverter
  • 객체 : MappingJackson2HttpMessageConveter

@RestController

Controller + ResponseBody가 합쳐진 형태로 JSON 형태의 객체 데이터를 반환한다.
Restful Web Service에서 사용되는 컨트롤러 어노테이션

RestContrller가 RESTful한 이유
RESTful 웹 서비스는 자원의 자체 표현 적이라 요청과 응답은 표현적이어야 한다. 따가서 반환되는 데이터 자체가 어떤 자원을 나타내는지, 어떤 상태인지 명시적으로 나타내야 하기 때문에 RestController가 RESTful 한 것.

또한 RESTful 웹 서비스는 클라이언트에게 직접 데이터를 제공하는 방식을 사용한다.
따라서 서버는 DB에 게시글 정보를 불러와 JSON or XML 형식의 데이터로 변환 후, 데이터를 HTTP 응답 본문에 포함시켜 클라이언트에게 반환한다.

옛날 웹 어플리케이션에서는 주로 View만 반환하는 방식으로 작동을 많이 했다.
게시글 조회와 같은 기능은 DB에서 게시글 정보를 불러와 뷰에 바인딩하고 이 뷰를 클라이언트에게 반환했다.

0개의 댓글