1. 응답 방식의 근본적인 차이
- @Controller
이 어노테이션이 붙은 클래스는 전통적인 Spring MVC 컨트롤러 역할을 합니다. 주요 목적은 Model 객체에 데이터를 담아 View(예: HTML, JSP)를 찾아 반환하는 것입니다. 즉, 서버 사이드 렌더링(SSR) 방식의 웹 애플리케이션에서 주로 사용되며, 클라이언트에게 완전한 웹 페이지를 전달합니다. - @RestController
이 어노테이션은 RESTful 웹 서비스를 구축하는 데 특화된 컨트롤러입니다. @Controller와 달리 View를 찾지 않고, 메서드가 반환하는 객체 데이터를 HTTP 응답 본문에 직접 담아 전송합니다. 주로 JSON이나 XML 형식으로 데이터를 주고받는 API 서버(백엔드)에서 사용되며, 클라이언트(프론트엔드, 모바일 앱 등)는 이 데이터를 받아 자체적으로 화면을 구성합니다. @RestController는 내부적으로 @Controller와 @ResponseBody 어노테이션을 합쳐놓은 것과 같습니다.
2. 어노테이션의 역사와 구성
- @Controller
Spring이 어노테이션을 지원하기 시작하면서부터 존재했으며, 공식적으로 Spring 2.5 버전에서 추가되었습니다. 내부적으로는 @Component 어노테이션이 달려 있어 Spring의 컴포넌트 스캔 대상이 됩니다. - @RestController
Spring 4.0에서 RESTful 웹 서비스 개발을 더욱 편리하게 하기 위해 추가되었습니다.
이는 @Controller와 @ResponseBody를 결합한 편의(Convenience) 어노테이션입니다.
3. 메서드 반환 값 처리 방식
- @Controller
일반적으로 메서드가 String을 반환하면 View의 논리적인 이름을 의미하여 해당 View를 찾아 렌더링합니다. Model 객체를 파라미터로 받아 데이터를 View에 전달할 수 있습니다. - @RestController
이 어노테이션이 클래스 레벨에 붙으면, 해당 컨트롤러 내의 모든 메서드에 @ResponseBody가 자동으로 적용됩니다. 따라서 메서드가 객체를 반환하면 스프링이 해당 객체를 HTTP 응답 본문으로 직렬화(Serialization)하여 JSON 또는 XML 형태로 클라이언트에 전송합니다. ViewResolver를 거치지 않습니다.
요약
| 주요 목적 | View 반환 (서버 사이드 렌더링) | 객체 데이터 반환 (RESTful API) |
| 내부 구성 | @Component | @Controller + @ResponseBody |
| 메서드 처리 | View 이름 반환, Model 데이터 전달 | 메서드 반환 객체를 HTTP 응답 본문으로 직렬화 |
| 등장 시기 | Spring 2.5 | Spring 4.0 |
| 주 사용처 | 전통적인 웹 애플리케이션 (HTML, JSP 등) | RESTful API 서버, 모바일/프론트엔드 백엔드 |

'Spring' 카테고리의 다른 글
| [Spring JPA] 즉시로딩과 지연로딩 (0) | 2025.06.21 |
|---|---|
| [Spring] Spring MVC란 무엇인가? (0) | 2025.06.05 |