@Controller와 @RestController 의 설명 과 차이
2024. 6. 24. 16:34ㆍJava/Spring
@Controller와 @RestController는 Spring 프레임워크에서 사용되는 어노테이션으로, 둘 다 Spring MVC 아키텍처에서 컨트롤러 역할을 하지만, 주로 사용하는 목적과 반환 방식에 차이가 있습니다.
@Controller
- 일반적인 Spring MVC 컨트롤러를 나타내며, 주로 뷰(View)를 반환하는 데 사용됩니다. 이 어노테이션은 MVC 패턴에서의 컨트롤러 역할을 수행하며, 요청을 처리하고 모델 데이터를 준비하여 적절한 뷰로 전달합니다.
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MyController {
@GetMapping("/hello")
public String sayHello(Model model) {
model.addAttribute("message", "Hello, World!");
return "helloView"; // "helloView"라는 이름의 뷰를 반환
}
}
- 특징
- 뷰 리졸버: @Controller는 문자열을 반환하면 뷰 리졸버(View Resolver)가 이를 해석하여 JSP, Thymeleaf, Freemarker 등의 템플릿 엔진을 통해 HTML 뷰로 렌더링합니다.
- Model 객체: 컨트롤러 메서드는 Model 객체를 사용하여 뷰에 데이터를 전달할 수 있습니다.
@RestController
- @RestController는 RESTful 웹 서비스를 개발하기 위해 Spring 4.0에서 도입된 어노테이션입니다. @RestController는 @Controller와 @ResponseBody를 결합한 형태로, 컨트롤러 메서드가 반환하는 데이터 자체를 HTTP 응답 본문에 직접 쓰도록 합니다.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyRestController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, World!"; // "Hello, World!" 문자열을 응답 본문으로 반환
}
}
특징
- 자동 변환: 반환된 객체는 자동으로 JSON 또는 XML로 변환되어 HTTP 응답 본문에 작성됩니다. 이를 위해 Jackson 라이브러리와 같은 JSON 변환 라이브러리가 필요합니다.
- 데이터 중심: 뷰를 반환하지 않고, 주로 JSON 데이터를 반환하여 클라이언트와 통신합니다.
차이점
@Controller | @RestController | |
사용 목적 | 뷰(View) 반환 | JSON/XML 데이터 반환 |
반환 값 | 뷰 이름 (String) | 데이터 객체 ( 객체 (json , bigint 등등), 문자열 |
기본 동작 | 반환 값은 뷰 리졸버가 해석하여 뷰로 렌더링 | 반환 값은 HTTP 응답 본문에 직접 작성 |
자동 변환 | 없음 | JSON/XML 변환 |
조합 어노테이션 | 기본 jpa | @Controller + @ResponseBody |
사용 시나리오 | 웹 애플리케이션의 프론트엔드 뷰 렌더링 | RESTful API 제공, 데이터 중심의 웹 서비스 |
3줄 요약
- @Controller는 주로 웹 애플리케이션에서 뷰를 반환하는 데 사용되며, JSP나 Thymeleaf 같은 템플릿 엔진과 함께 사용됩니다.
- @RestController는 RESTful 웹 서비스에서 JSON이나 XML 같은 데이터를 반환하는 데 사용되며, 프론트엔드와의 데이터 통신을 쉽게 할 수 있습니다.
- 최근엔 RESTful 개발하는 경우가 많아서 @RestController를 주로 사용하지만 SEO나 서버 사이드 렌더링등을 쓸때는 @Controller 를 쓴다.
'Java > Spring' 카테고리의 다른 글
영속성 컨텍스트 (0) | 2024.06.24 |
---|---|
DTO, DAO, VO, Record 개념 및 차이 (0) | 2024.06.24 |
@Transactional (0) | 2024.06.24 |
Entity 맵핑 @어노테이션 (0) | 2024.06.19 |
BLOB 이용한 멀티미디어 저장 (0) | 2024.06.19 |