Java

[Java] @Controller 와 @RestController

Castle Bird 2025. 12. 26. 01:39

@Controller와 @RestController의 차이

 

1. @Controller란?

  • @Controller는 전통적인 Spring MVC에서 화면(UI)을 반환하기 위한 컨트롤러이다.
  • 핸들러 메서드는 보통 String(뷰 이름)를 반환하고, 이 때 함께 전달한 Model 데이터는 ViewResolver가 찾은 뷰 템플릿(Thymeleaf, JSP, 등)에 렌더링되어 HTML 화면으로 응답된다.
@Controller
public class HomeController {

    @GetMapping("/home")
    public String home(Model model) {
        model.addAttribute("name", "user");
        return "home";   // 뷰 이름
    }
}
  • 반환값: 뷰 이름
  • 용도: 서버 사이드 렌더링(SSR) 기반의 전통적인 웹 페이지 UI 제공

2. @Controller의 흐름

  1. Controller: 비즈니스 로직 처리 후, 화면의 이름(View Name)과 화면에 뿌릴 데이터(Model 객체)를 반환합니다.
  2. View Resolver: 전달받은 이름을 바탕으로 실제 HTML 파일의 위치를 찾습니다.
  3. View: 데이터를 HTML에 입혀 최종적인 화면(UI)을 생성하여 사용자에게 전달합니다.

3. @RestController란?

  • @RestController“데이터 자체”HTTP 응답 바디로 내려보내기 위한 컨트롤러이다.
  • 기존에는 @Controller + @ResponseBody를 함께 붙여야 메서드 반환값이 뷰가 아닌 응답 바디로 직렬화되었는데, 이 조합을 매번 쓰는 번거로움을 줄이기 위해 두 애노테이션을 합쳐 놓은 것@RestController이다.
// 합치기 전
@Controller
@ResponseBody
public class ApiController { ... }

// 합친 후
@RestController
public class ApiController { ... }
  • 핸들러 메서드가 반환한 객체는 HttpMessageConverter에 의해 JSON, XML 등의 형태로 변환되어 HTTP 응답 바디에 그대로 기록된다.
  • SPA(React, Vue 등) 프론트엔드나 모바일/외부 서비스가 소비하는 API 서버에서 주로 사용되는 방식으로, 화면이 아니라 JSON 기반의 REST API를 만들 때 가장 일반적이다.

4. @RestController의 흐름

  1. RestController: @Controller@ResponseBody가 결합된 형태로, 별도의 설정 없이 응답 객체(Data) 자체를 반환합니다.
  2. HttpMessageConverter: View Resolver 대신 작동하며, 자바 객체를 JSON(JavaScript Object Notation)이나 XML 등의 형식으로 직렬화합니다.
  3. Direct Response: 변환된 데이터를 HTTP 응답 본문에 직접 담아 즉시 전송합니다.

'Java' 카테고리의 다른 글

[Java] ORM의 N+1 문제  (0) 2026.01.13
[Java] @RestController와 HttpMassageConverter  (0) 2026.01.04
[Java] AOP  (0) 2025.12.24
[Java] Spring Boot에서 Bean 등록하는 법  (0) 2025.12.21
[Java] 웹 서버와 WAS  (0) 2025.12.19