✅ 차이 요약
항목 | @Controller | @RestController |
역할 | 뷰(View)를 반환하는 웹 컨트롤러 | JSON, XML 등 데이터를 반환하는 API 컨트롤러 |
기본 반환 방식 | 문자열 반환 시 → ViewResolver가 뷰 이름으로 처리 | 문자열 반환 시 → 그대로 HTTP Response Body에 반환됨 |
@ResponseBody 필요 여부 | 필요함 (데이터 반환하려면 @ResponseBody 명시해야 함) | 자동 포함되어 있음 (항상 데이터 반환) |
사용 용도 | 웹 페이지 렌더링 (JSP, Thymeleaf 등) | REST API 개발 (React, Vue 같은 프론트엔드와 연동 시) |
✅ 코드 예시
1. @Controller 사용 예 (뷰 반환)
@Controller
public class PageController {
@GetMapping("/hello")
public String helloPage(Model model) {
model.addAttribute("name", "ChatGPT");
return "hello"; // → templates/hello.html (Thymeleaf 기준)
}
@GetMapping("/api/hello")
@ResponseBody
public String helloApi() {
return "Hello API"; // @ResponseBody 없으면 뷰 이름으로 인식됨
}
}
2. @RestController 사용 예 (데이터 반환)
@RestController
public class ApiController {
@GetMapping("/api/hello")
public String hello() {
return "Hello REST API"; // → 그대로 문자열 반환 (JSON 아님)
}
@GetMapping("/api/data")
public Map<String, Object> getData() {
Map<String, Object> data = new HashMap<>();
data.put("name", "ChatGPT");
data.put("age", 3);
return data; // → JSON으로 자동 직렬화
}
}
✅ 언제 무엇을 써야 하나?
요구사항 | 어노테이션 |
웹 페이지를 만들어야 할 때 (Thymeleaf, JSP 등) | @Controller |
RESTful API 서버를 만들 때 (프론트 분리) | @RestController |
'WEB' 카테고리의 다른 글
RESTful API란? (0) | 2025.05.27 |
---|---|
서블릿 필터(Filter) / 스프링 인터셉터(Interceptor) 비교 (0) | 2025.05.27 |
Http 동작 방식 (0) | 2025.05.27 |
SOP (0) | 2025.02.18 |
3계층 티어 (0) | 2025.01.21 |