✅ 차이 요약
| 항목 | @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' 카테고리의 다른 글
| HTTP 코드별 특징 (0) | 2025.10.16 | 
|---|---|
| RESTful API란? (0) | 2025.05.27 | 
| 서블릿 필터(Filter) / 스프링 인터셉터(Interceptor) 비교 (0) | 2025.05.27 | 
| Http 동작 방식 (0) | 2025.05.27 | 
| SOP (0) | 2025.02.18 |