728x90
@Controller와 @RestController는 둘 다 Spring Framework에서 사용되는 어노테이션으로, 주된 차이점은 HTTP 요청에 대한 응답 형식과 목적에 있습니다.
1. @Controller
- 주요 목적:
- Spring MVC의 전통적인 컨트롤러로, **뷰(template)**를 반환하는 데 사용됩니다.
- HTML, JSP 등 뷰를 렌더링하기 위한 데이터를 모델에 추가한 후, 뷰 이름을 반환합니다.
- 동작 원리:
- 메서드에서 반환된 값은 뷰 이름으로 간주됩니다.
- 데이터를 뷰에 전달하기 위해 Model 객체를 사용합니다.
- 예시:
java코드 복사@Controller public class ExampleController { @GetMapping("/example") public String example(Model model) { model.addAttribute("message", "Hello, World!"); return "exampleView"; // exampleView.jsp 또는 exampleView.html } }
- 브라우저는 HTML 페이지(예: exampleView.jsp)를 받습니다.
2. @RestController
- 주요 목적:
- RESTful API를 구현하는 데 사용됩니다.
- HTTP 요청에 대해 JSON 또는 XML 형식의 데이터를 직접 반환합니다.
- 동작 원리:
- @RestController는 @Controller와 @ResponseBody를 합친 것과 동일한 동작을 합니다.
- 모든 메서드의 반환값은 **응답 본문(body)**에 직렬화되어 클라이언트로 전송됩니다.
- 예시:
java코드 복사@RestController public class ExampleRestController { @GetMapping("/example") public Map<String, String> example() { Map<String, String> response = new HashMap<>(); response.put("message", "Hello, World!"); return response; // {"message": "Hello, World!"} } }
- 브라우저나 클라이언트는 JSON 데이터를 받습니다.
3. 차이점 요약
특징@Controller@RestController
주된 용도 | 뷰 반환 (HTML, JSP) | JSON 또는 XML 데이터를 반환 |
기본 반환 동작 | 뷰 이름으로 처리 | HTTP 응답 본문(body)로 반환 |
뷰 템플릿 사용 여부 | 사용 가능 (JSP, Thymeleaf 등) | 사용하지 않음 |
결합 어노테이션 | @Controller | @Controller + @ResponseBody |
예제 응답 형식 | HTML 페이지 (예: JSP, Thymeleaf) | JSON 데이터 (RESTful API 응답) |
4. 언제 사용해야 하나요?
- @Controller:
- 서버에서 렌더링된 **뷰(HTML, JSP 등)**를 반환해야 하는 경우.
- 웹 애플리케이션의 전통적인 MVC 아키텍처를 구현할 때.
- @RestController:
- RESTful API를 개발하거나, 클라이언트와 데이터를 JSON/XML 형식으로 주고받아야 할 때.
- 프론트엔드(React, Vue.js 등)가 백엔드 API와 통신해야 할 때.
728x90
'스프링Spring' 카테고리의 다른 글
@RequestParam, 쿼리스트링 (0) | 2024.01.12 |
---|---|
@Resource 와 @Autowired (0) | 2024.01.12 |
@RequestBody , @ResponseBody/@RestController (1) | 2024.01.11 |
HikariCP에 대해 알아보기 (0) | 2023.09.04 |
Model,ModelAndView (0) | 2023.08.29 |