@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의 흐름
Controller: 비즈니스 로직 처리 후, 화면의 이름(View Name)과 화면에 뿌릴 데이터(Model 객체)를 반환합니다.
View Resolver: 전달받은 이름을 바탕으로 실제 HTML 파일의 위치를 찾습니다.
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의 흐름
RestController:@Controller에 @ResponseBody가 결합된 형태로, 별도의 설정 없이 응답 객체(Data) 자체를 반환합니다.
HttpMessageConverter:View Resolver 대신 작동하며, 자바 객체를 JSON(JavaScript Object Notation)이나 XML 등의 형식으로 직렬화합니다.
Direct Response: 변환된 데이터를 HTTP 응답 본문에 직접 담아 즉시 전송합니다.