@Controller와 @RestController는 둘 다 Spring MVC에서 클라이언트 요청을 처리하는 컨트롤러 클래스를 나타내지만, 응답 방식에서 중요한 차이가 있습니다.
✅ 간단 비교
항목 @Controller @RestController
| 응답 방식 | 뷰(View) 반환 | 데이터(JSON) 반환 |
| 주 용도 | JSP/Thymeleaf 등의 화면 렌더링 | REST API 응답 (React, Vue 등과 연동 시) |
| 내부 구성 | @Component + @ResponseBody(X) | @Controller + @ResponseBody(자동) |
| 예시 응답 | HTML 페이지 | JSON, 문자열, 객체 등 |
✅ 1. @Controller
- 주로 HTML 페이지를 반환할 때 사용
- 템플릿 엔진(JSP, Thymeleaf 등)과 함께 사용
- 뷰 이름을 반환하면 DispatcherServlet → ViewResolver가 HTML을 찾아서 렌더링
📌 예시
@Controller
public class PageController {
@GetMapping("/hello")
public String helloPage(Model model) {
model.addAttribute("name", "홍길동");
return "hello"; // => /templates/hello.html 렌더링
}
}
✅ 2. @RestController
- REST API 개발 시 사용
- 반환값이 뷰가 아니라 **객체나 문자열(JSON 형태)**로 응답됨
- 내부적으로 @ResponseBody가 포함되어 있어서 객체 → JSON 자동 변환
📌 예시
@RestController
public class ApiController {
@GetMapping("/api/hello")
public String helloApi() {
return "Hello, JSON";
}
@GetMapping("/api/member")
public Member getMember() {
return new Member("홍길동", 30); // 자동으로 JSON 변환됨
}
}
🔁 응답 형태
{
"name": "홍길동",
"age": 30
}
✅ 내부적으로 무슨 차이?
@Controller
@Controller
public class Example {
@GetMapping("/test")
public String test() {
return "home"; // → ViewResolver → home.html
}
}
@RestController = @Controller + @ResponseBody
@RestController
public class Example {
@GetMapping("/test")
public String test() {
return "home"; // → "home"이라는 문자열 자체를 응답 (JSON 또는 text)
}
}
✅ 어떤 걸 언제 써야 하나요?
사용 상황 선택
| 웹 페이지 렌더링 (JSP, Thymeleaf 등) | @Controller |
| JSON 데이터 응답 (React, Vue, 모바일 앱 등과 연동) | @RestController |
| REST API 서버 구축 | @RestController |
✅ 결론
요약 설명
| @Controller | 뷰(View)를 반환하는 전통적인 웹 방식 |
| @RestController | JSON 등의 데이터만 반환하는 API 방식 |
'탐구하기' 카테고리의 다른 글
| Dispatcher Servlet은 무엇일까? (0) | 2025.07.02 |
|---|---|
| 인터셉터(Interceptor)와 필터(Filter) (1) | 2025.07.02 |
| JPA와 MyBatis의 차이점 (0) | 2025.07.01 |
| JPA란 무엇일까? (0) | 2025.07.01 |
| MyBatis란 무엇일까? (0) | 2025.06.30 |