@RestController의 HTTP 요청 처리와 응답 과정

썬쑨·2025년 4월 6일

Spring

목록 보기
6/12

✅ @Controller와 @RestController

  • @Controller: 전통적인 MVC 패턴에서 컨트롤러 역할을 한다. 주로 HTML 페이지 or 템플릿 뷰(JSP, Thymeleaf 등)를 반환할 때 사용된다.
    - 특징:
    1. 리턴 값이 View 이름으로 해석된다.
    2. 데이터를 반환할 때는 @ResponseBody와 함께 사용해야 JSON 또는 XML 형태로 응답된다.
    @Controller
	public class MyController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("name", "Spring");
        return "hello"; // hello.html (뷰 이름)
    }
  • @RestController: @Controller + @ResponseBody 를 합친 어노테이션으로, JSON, XML, 문자열 등의 데이터 자체를 바로 반환하는 RESTful 웹 서비스를 만들 때 사용된다.
    - 특징:
    1. 모든 메서드의 리턴 값이 HTTP 응답 본문(Response Body)에 직접 들어간다.
      2. 별도로 @ResponseBody를 붙이지 않아도 된다.

✅ Spring Boot에서 @RestController로 들어온 HTTP 요청 처리 과정

Spring Boot에서 @RestController를 사용한 HTTP 요청 처리 과정은 클라이언트의 요청을 객체로 변환하고, 비즈니스 로직 실행 후 결과를 다시 HTTP 응답으로 변환하는 구조로 이루어진다. 이 과정에서 HttpMessageConverter가 핵심적인 역할을 수행한다.

  • <전체 처리 흐름⭐>
  1. 클라이언트가 HTTP 요청 전송.
    • ex: GET /api/user
  2. DispatcherServlet이 요청을 수신
    • 스프링의 프론트 컨트롤러로서 모든 요청을 가장 먼저 받는다.
    • 해당 요청을 처리할 수 있는 Handler(컨트롤러 메서드)를 찾아서 위임한다.
  3. HandlerMapping이 적절한 컨트롤러(@RestController)를 매핑
    • ex: /api/user 요청은 @GetMapping("/api/user")가 붙은 메서드로 연결된다.
  4. HandlerAdapter가 컨트롤러 메서드를 실행
    • 컨트롤러 메서드가 실행되어 Java 객체를 반환한다.
      ex: return new User("길동", 30);
  5. HttpMessageConverter가 작동
    • 컨트롤러 메서드가 반환한 객체(User 객체 등)는 그대로는 HTTP 응답에 쓸 수 없다. -> HTTP 응답은 문자열(byte)기반이기 때문이다. 자바 객체는 메모리 상에 존재하는 클래스 인스턴스이니 브라우저나 네트워크에선 전혀 이해할 수 없다. 따라서 이를 client가 이해할 수 있는 형식으로 직렬화를 해줘야 함. 이 역할을 HttpMessageConverter가 담당해줌!
    • Spring은 내부적으로 등록된 여러 HttpMessageConverter 중에서, 요청의 Accept 헤더와 반환 객체의 타입을 참고하여 적절한 컨버터를 선택한다. ex: client가 application/json을 원하면 MappingJackson2HttpMessageConverter가 작동하여 객체를 JSON 문자열로 변환한다.
  6. 변환된 데이터가 HTTP 응답 본문(Response Body)에 쓰임
    • 변환된 JSON이 응답의 Body에 포함되어 client에 전달된다.
    • 응답 헤더의 Content-Type은 ex: application/json;charset=UTF-8 으로 자동 설정된다.

=> @RestController는 반환값을 View로 해석하지 않고 HTTP 응답 본문에 직접 작성한다. 그리고 이 반환 객체를 실제 HTTP응답으로 변환해주는 핵심이 바로 HttpMessageConverter! 이 converter는 Spring이 자동으로 구성해주며, JSON 변환엔 보통 Jackson 라이브러리가 사용된다.


<참고 자료>
https://symflower.com/en/company/blog/2024/controller-restcontroller-spring-boot/
https://rebugs.tistory.com/635
https://happiness-life.tistory.com/entry/1-Controller-ResponseBody-RestController-%EB%A5%BC-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

profile
천천히 굴러갑니다!

0개의 댓글