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 요청이 들어와서 응답이 나가기까지 다음 같이 진행됩니다.

- DispatcherServlet(디스패처 서블릿)이 HTTP 요청을 받으면, HandlerMapping(I)에게 어떤 컨트롤러를 호출해야 하는지 조회합니다.
- (구현체: RequestMappingHandlerMapping)
- HandlerMapping은 요청 URL에 매핑된 컨트롤러 정보를 DispatcherServlet에게 반환합니다.
- DispatcherServlet은 컨트롤러를 직접 실행하는 것이 아니라, 해당 컨트롤러를 처리할 수 있는 HandlerAdapter(I)에게 실행을 위임합니다.
- (구현체: RequestMappingHandlerAdapter)
- HandlerAdapter가 컨트롤러 메서드를 실행하기 위한 준비를 시작합니다.
- [1차 호출] HandlerAdapter는 HttpMessageConverter(I)를 호출하여, HTTP 요청 바디의 데이터를 Java 객체 형식으로 변환합니다.
- (예: @RequestBody를 통해 JSON 데이터를 DTO 객체로 변환)
- RestController(C)가 실행되어 비즈니스 로직을 수행하고, 결과값으로 Java 객체(List<UserDto> 등)를 반환합니다.
- [2차 호출] HandlerAdapter는 반환된 Java 객체를 HTTP 응답 형식으로 변환하기 위해 HttpMessageConverter(I)를 다시 호출합니다. ⭐
- 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 |