스프링 프레임워크는 웹 애플리케이션을 개발할 때 매우 유용한 다양한 어노테이션을 제공합니다.
그중에서도 @Controller와 @RestController는 웹 요청을 처리하는 데 사용되는 핵심 어노테이션입니다.
이 두 어노테이션의 차이를 이해하는 것은 스프링 MVC를 효과적으로 활용하는 데 필수적입니다.
⭐ 기본 개념
- @Controller: 이 어노테이션은 스프링 MVC에서 일반적으로 사용하는 컨트롤러를 정의합니다. 주로 HTML 페이지를 반환하거나 뷰 템플릿과 함께 사용할 때 사용됩니다.
- @RestController: 이 어노테이션은 @Controller와 @ResponseBody를 결합한 것입니다. 주로 RESTful 웹 서비스를 구축할 때 사용되며, JSON이나 XML 형태의 데이터를 반환합니다.
⭐ 반환값의 차이
- @Controller: 메서드의 반환값은 일반적으로 뷰 이름이며, 스프링은 이를 기반으로 적절한 뷰 템플릿을 찾아서 렌더링합니다. 예를 들어, return "index"라고 하면 index.html과 같은 뷰를 찾아 반환합니다.
- @RestController: 메서드의 반환값은 직접 클라이언트에게 전달되는 데이터입니다. 스프링은 이 데이터를 자동으로 JSON 또는 XML 형식으로 변환하여 응답합니다. 따라서 return new User("John", "Doe")와 같은 경우, 사용자 객체는 JSON 형태로 변환되어 클라이언트에 전달됩니다.
⭐ 사용 예
✅ @Controller 예시
@Controller
public class HomeController {
@GetMapping("/home")
public String home() {
return "home"; // home.html로 렌더링
}
}
✅ @RestController 예시
@RestController
public class UserController {
@GetMapping("/user")
public User getUser() {
return new User("John", "Doe"); // JSON 형식으로 반환
}
}
⭐ 추가 고려사항
- 에러 처리: @RestController는 REST API에서 자주 발생하는 오류를 처리하는 데 유용한 전역 예외 처리 기능을 구현할 수 있습니다. @ControllerAdvice와 결합하여 사용할 수 있습니다.
- HTTP 상태 코드: @RestController를 사용하면 반환값과 함께 HTTP 상태 코드를 쉽게 설정할 수 있습니다. 예를 들어, ResponseEntity를 사용하여 응답 본문과 상태 코드를 모두 설정할 수 있습니다.
- 미들웨어와 필터: 두 어노테이션 모두 필터나 인터셉터와 함께 사용할 수 있습니다. 인증이나 로깅과 같은 공통 기능을 적용할 수 있어, 아키텍처의 일관성을 유지하는 데 도움이 됩니다.
🚩 결론
@Controller와 @RestController는 각각의 목적에 맞게 사용해야 합니다. 웹 페이지를 렌더링할 때는 @Controller, RESTful API를 구축할 때는 @RestController를 사용하는 것이 일반적입니다.
이 두 어노테이션의 차이를 명확히 이해하고 적절하게 활용하면 스프링 MVC를 더욱 효과적으로 사용할 수 있습니다.
'기술 지식 쌓아가기 📚 > Backend 🍔' 카테고리의 다른 글
[Spring] Java Message Service (JMS) 이해하기 : 비동기 메시징 🍃 (1) | 2024.10.06 |
---|---|
[Spring] REST vs SOAP: 두 웹 서비스 아키텍처의 비교 🍃 (0) | 2024.10.06 |
[Cloud] MSA vs 모놀리: 당신의 프로젝트에 적합한 아키텍처는? (1) | 2024.10.03 |
[Spring] 웹 소켓, R 소켓, STOMP: 실시간 통신의 모든 것 🍃 (3) | 2024.10.02 |
[Spring] 웹 애플리케이션 테스트를 위한 Spring의 두 가지 도구: MockMvc와 WebTestClient 🍃 (0) | 2024.09.28 |