Java

[Java] @RestController와 HttpMassageConverter

Castle Bird 2026. 1. 4. 19:48

1. @RestController란?

@Controller + @ResponseBody를 합친 어노테이션으로, JSON API 개발에 최적화되어 있습니다.

 

1-1. 만들어진 이유

기존 방식의 문제점(코드 중복)

@Controller  // View(JSP, Thymeleaf) 반환용
@ResponseBody  // JSON 반환용 ← 매번 붙여야 함 ❌
@GetMapping("/api/users")
public List<User> getUsers() {
    return userService.findAll();
}

 

@RestController로 중복코드 해결

@RestController  // = @Controller + @ResponseBody ✅
@GetMapping("/api/users")
public List<User> getUsers() {
    return userService.findAll();  // 자동 JSON 변환!
}

 

1-2. 현대 웹 개발 트렌드

프론트(React/Vue) ↔ 백엔드 API(JSON) 분리 개발이 표준
          ↓
View(JSP) 대신 JSON 데이터 교환 필요
          ↓
@RestController = API 전용 컨트롤러

2. @RestController를 사용할 때의 데이터처리 흐름

HTTP 요청이 들어와서 응답이 나가기까지 다음 같이 진행됩니다.

HttpMessageConverter의 호출 순서와 RestController의 사용 흐름

  1. DispatcherServlet(디스패처 서블릿)이 HTTP 요청을 받으면, HandlerMapping(I)에게 어떤 컨트롤러를 호출해야 하는지 조회합니다.
    • (구현체: RequestMappingHandlerMapping)
  2. HandlerMapping은 요청 URL에 매핑된 컨트롤러 정보를 DispatcherServlet에게 반환합니다.
  3. DispatcherServlet은 컨트롤러를 직접 실행하는 것이 아니라, 해당 컨트롤러를 처리할 수 있는 HandlerAdapter(I)에게 실행을 위임합니다.
    • (구현체: RequestMappingHandlerAdapter)
  4. HandlerAdapter가 컨트롤러 메서드를 실행하기 위한 준비를 시작합니다.
  5. [1차 호출] HandlerAdapterHttpMessageConverter(I)를 호출하여, HTTP 요청 바디의 데이터를 Java 객체 형식으로 변환합니다.
    • (예: @RequestBody를 통해 JSON 데이터를 DTO 객체로 변환)
  6. RestController(C)가 실행되어 비즈니스 로직을 수행하고, 결과값으로 Java 객체(List<UserDto> 등)를 반환합니다.
  7. [2차 호출] HandlerAdapter는 반환된 Java 객체를 HTTP 응답 형식으로 변환하기 위해 HttpMessageConverter(I)를 다시 호출합니다. ⭐
  8. HttpMessageConverter는 등록된 컨버터들의 우선순위를 확인하여 적절한 구현체를 선택하고 변환을 완료합니다.
    • MappingJackson2HttpMessageConverter: Java 객체 → JSON 변환 ⭐
    • StringHttpMessageConverter: 문자열 처리
    • ByteArrayHttpMessageConverter: 바이너리 데이터 처리
    • MappingJackson2XmlHttpMessageConverter: Java 객체 → XML 변환

'Java' 카테고리의 다른 글

[Java] 모니터링 - Prometheus와 Grafana  (0) 2026.02.01
[Java] ORM의 N+1 문제  (0) 2026.01.13
[Java] @Controller 와 @RestController  (0) 2025.12.26
[Java] AOP  (0) 2025.12.24
[Java] Spring Boot에서 Bean 등록하는 법  (0) 2025.12.21