@Controller와 @RestController
1. @Controller
- @Controller 어노테이션은 주로 전통적인 웹 어플리케이션에서 사용된다.
- 이 어노테이션을 사용하는 클래스는 주로 뷰 템플릿을 반환한다. 예를 들어, JSP나 Thymeleaf 같은 HTML 페이지를 반환하는 데 사용된다.
- @Controller를 사용하면, 메서드가 데이터 모델을 반환하거나 뷰 이름을 반환한다. 스프링은 이 정보를 바탕으로 HTTP 응답을 생성한다.
2. @RestController
- @RestController는 RESTful 웹 서비스를 개발할 때 사용된다.
- 이 어노테이션을 사용하는 클래스는 HTTP 응답 본문에 직접 데이터를 반환한다. 주로 JSON이나 XML형태의 데이터를 반환하는 데 사용된다.
- @RestController는 사실상 @Controller와 @ResponseBody를 합친 것으로 생각할 수 있다. 이는 메서드가 반환하는 데이터가 HTTP 응답 본문에 직접 기록된다는 것을 의미한다.
언제 무엇을 쓰면 될까?
-
웹 페이지 반환
- 만약 웹 페이지를 반환하는 전통적인 웹 어플리케이션을 개발하고 있다면 @Controller를 사용하는 것이 좋다. 이는 뷰 템플릿을 이용하여 사용자에게 HTML 페이지를 제공한다.
-
RESTfulAPI 개발
- 반면에, 클라이언트에게 JSON이나 XML같은 데이터 포멧의 RESTfulAPI를 제공하는 경우 @RestController가 더 적합하다. 이는 데이터 중심의 서비스에 적합하며, 웹 서비스나 모바일 어플리케이션과 같은 클라이언트에 데이터를 제공하는 데 사용된다.
결론
웹 페이지를 반환하는 경우 @Controller를, API를 통해 데이터를 반환하는 경우 @RestController를 사용하는 것이 일반적이다.