Spring Framework에서 @RestController
와 @Controller
애너테이션은 컨트롤러의 역할을 정의하는 데 사용되지만, 주로 사용되는 목적과 방식에 차이가 있습니다. 이 두 애너테이션의 주요 차이점은 다음과 같습니다:
@Controller
- MVC 컨트롤러:
@Controller
애너테이션은 Spring MVC의 컨트롤러로 사용됩니다. 이 컨트롤러는 주로 웹 애플리케이션에서 HTML 페이지를 렌더링하는 데 사용됩니다. - 뷰 반환: 메소드가 반환하는 값은 보통 뷰 이름입니다. Spring은 이 뷰 이름을 사용해서 정의된 뷰 리졸버(view resolver)를 통해 해당하는 뷰를 찾고, 모델 데이터를 뷰로 전달한 후 클라이언트에게 HTML 형태로 렌더링합니다.
- ResponseBody 사용: API 응답을 JSON이나 XML 같은 형식으로 반환하고 싶은 경우, 메소드 레벨에서
@ResponseBody
애너테이션을 사용해야 합니다. 이는@Controller
애너테이션이 기본적으로 뷰를 반환하기 위해 설계되었기 때문입니다.
@RestController
- RESTful 컨트롤러:
@RestController
애너테이션은 RESTful 웹 서비스를 개발할 때 사용됩니다. 이는@Controller
와@ResponseBody
를 합친 것과 같아, 메소드가 반환하는 데이터는 HTTP 응답 본문에 직접 쓰입니다. - JSON/XML 반환:
@RestController
로 마크된 컨트롤러의 메소드는 기본적으로 HTTP 응답의 본문에 데이터를 반환합니다. 대부분의 경우, Java 객체는 자동으로 JSON 또는 XML 형식으로 직렬화됩니다. 이는 Spring MVC가 내부적으로 사용하는HttpMessageConverter
인터페이스 덕분입니다. - 뷰 없음:
@RestController
는 직접적으로 뷰를 반환하지 않습니다. 따라서 이를 사용할 때는 데이터를 클라이언트에게 직접 전달하기 위한 목적으로만 사용됩니다.
요약하자면, @Controller
는 주로 웹 페이지를 렌더링하는 데 사용되며, @RestController
는 RESTful 서비스를 구축할 때 사용되어 JSON이나 XML 같은 형식의 데이터를 HTTP 응답에 직접 반환합니다. 따라서 개발하고자 하는 애플리케이션의 유형(웹 사이트 vs API 서버)에 따라 적절한 애너테이션을 선택해야 합니다.
'Dev Framework > Spring' 카테고리의 다른 글
[Spring Security] 02. Http Basic이 아닌 OAuth2를 사용하는 이유 (0) | 2024.03.07 |
---|---|
[Spring Security] 01. Spring Security에 대해서 (0) | 2024.03.07 |
[Spring]Caused by: com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed 해결 방법 (0) | 2024.03.05 |
[Spring][완독] 스프링 부트3 자바 백엔드 개발 입문 - 출판사 길벗 (0) | 2024.03.02 |
[Spring] REST API에 대해서 (0) | 2024.03.02 |