안녕하세요, 여러분! 오늘은 Spring Framework에서 많이 볼 수 있는 두 어노테이션, @Controller와 @RestController에 대해 깊게 탐구해보겠습니다. 이 두 어노테이션은 서로 다른 목적과 사용 사례를 가지고 있기 때문에, 여러분의 Spring 프로젝트에서 효과적으로 사용하기 위해 그 차이를 정확히 이해하는 것이 중요합니다.
1. @Controller
@Controller는 전통적인 Spring MVC 컨트롤러로서 주로 웹 페이지를 반환하는데 사용됩니다.
메서드가 반환하는 값은 기본적으로 뷰 이름으로 해석됩니다. 예를 들어, 메서드가 "home" 문자열을 반환하면, 설정된 뷰 리졸버에 따라 "home.jsp"나 "home.html" 등의 뷰 페이지로 렌더링됩니다.
웹 응답으로 데이터(예: JSON)를 직접 반환하려면 @ResponseBody 어노테이션을 메서드에 추가해야 합니다.
예시:
@Controller
public class MyWebController {
@RequestMapping("/page")
public String showPage() {
return "myPage"; // myPage.jsp 또는 myPage.html로 렌더링됩니다.
}
}
2. @RestController
@RestController는 Spring 4에서 도입된 어노테이션으로, @Controller와 @ResponseBody의 조합과 같습니다.
주로 RESTful 웹 서비스를 구현하는데 사용됩니다.
메서드가 반환하는 값은 HTTP 응답 본문으로 직렬화됩니다. 객체를 반환하면 기본적으로 JSON 형식으로 클라이언트에 전송됩니다.
별도의 @ResponseBody 어노테이션을 사용할 필요가 없습니다.
예시:
@RestController
public class MyApiController {
@RequestMapping("/data")
public MyData getData() {
return new MyData("example", 123); // JSON 형식으로 응답됩니다.
}
}
정리
@Controller와 @RestController의 주요 차이는 응답 방식에 있습니다. 전자는 웹 페이지의 렌더링에 중점을 둔 반면, 후자는 RESTful API 응답에 중점을 둡니다. 프로젝트의 요구 사항에 따라 적절한 어노테이션을 선택하여 사용하면 됩니다.
그럼, 다음 포스트에서 또 만나요! 😊