스프링Spring

@controller @restcontroller 차이

개린이9999 2025. 1. 9. 15:27
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