2024. 5. 17. 17:35ㆍ개인 공부
@Controller와 @RestController는 모두 스프링 MVC에서 사용되는 애너테이션으로, 웹 요청을 처리하는 컨트롤러 클래스를 정의하는 데 사용됩니다. 그러나 두 애너테이션의 사용 목적과 동작 방식에는 몇 가지 중요한 차이점이 있습니다.
@Controller
@Controller는 전통적인 스프링 MVC 컨트롤러를 정의하는 데 사용됩니다. 주로 HTML 뷰를 반환할 때 사용되며, JSP, Thymeleaf 등 템플릿 엔진을 통해 서버 측에서 뷰를 생성합니다. 주로 웹 애플리케이션의 프론트엔드와 백엔드 간의 상호작용에서 사용됩니다.
주요 특징:
- 뷰 리졸버 사용: @Controller는 문자열을 반환하면 해당 문자열이 뷰 이름으로 해석됩니다. 스프링의 뷰 리졸버(View Resolver)가 이 뷰 이름을 해석하여 실제 뷰 페이지를 찾고 렌더링합니다.
- 모델과 뷰: Model 객체를 사용하여 뷰에 데이터를 전달할 수 있습니다.
@Controller
public class MyController {
@GetMapping("/welcome")
public String welcome(Model model) {
model.addAttribute("message", "Welcome to Spring MVC!");
return "welcome"; // 뷰 이름
}
}
위 코드에서 welcome은 뷰 이름이며, 뷰 리졸버에 의해 /WEB-INF/views/welcome.jsp와 같은 실제 뷰 페이지로 매핑될 수 있습니다.
@RestController
@RestController는 RESTful 웹 서비스를 만들기 위해 사용됩니다. @Controller와 @ResponseBody가 결합된 형태로, 메서드에서 반환하는 값은 뷰가 아닌 HTTP 응답 본문으로 직접 변환됩니다. 주로 JSON 또는 XML 형태의 데이터를 반환하는 API를 개발할 때 사용됩니다.
주요 특징:
- 자동 JSON 변환: 반환되는 객체는 자동으로 JSON 형식으로 변환되어 HTTP 응답 본문에 포함됩니다. 스프링은 이를 위해 Jackson 라이브러리를 사용합니다.
- RESTful 웹 서비스: 주로 RESTful API 엔드포인트를 정의하는 데 사용됩니다.
@RestController
public class MyRestController {
@GetMapping("/api/message")
public String getMessage() {
return "Hello, World!";
}
@GetMapping("/api/user")
public User getUser() {
return new User("John", "Doe");
}
}
위 코드에서 /api/message 엔드포인트는 단순 텍스트 응답을 반환하고, /api/user 엔드포인트는 User 객체를 JSON 형식으로 반환합니다.
요약
- @Controller는 주로 HTML 뷰를 반환하며, 뷰 리졸버를 통해 템플릿 엔진을 사용하여 서버 측에서 뷰를 렌더링합니다.
- @RestController는 RESTful 웹 서비스용 컨트롤러로, 주로 JSON 또는 XML 형식의 데이터를 반환합니다. @ResponseBody 애너테이션이 결합된 형태로, 반환 값은 HTTP 응답 본문으로 직렬화됩니다.
두 애너테이션은 사용 목적에 따라 적절히 선택되어야 하며, 스프링 MVC 애플리케이션과 RESTful API를 각각 구현하는 데 중요한 역할을 합니다.
'개인 공부' 카테고리의 다른 글
| 바인딩 어노테이션 정리 (0) | 2025.04.10 |
|---|---|
| CS 공부 - 3 (1) | 2024.05.21 |
| CS 공부 - 2 (0) | 2024.05.13 |
| CS 공부 - 1 (0) | 2024.05.08 |
| java stream()이란? (0) | 2024.03.13 |