반응형
SMALL
서론
Spring이나 Spring Boot를 사용해 웹 앱 혹은 API를 개발할 때 @Controller와 @RestController라는 두 가지 주요 어노테이션을 사용한다.
하지만 이 둘은 용도가 다르고 동작 방식에도 차이가 있다. 해당 포스팅에서 두 가지의 차이점을 비교해 보자.
@Controller란?
기본 개념
- @Controller는 주로 HTML 페이지를 반환하는 용도로 사용한다.
- Spring MVC 패턴에서 View를 반환할 때 사용한다.
- 메서드의 반환값은 ViewResolver에 의해 해석된다.
MVC 패턴이 어떤 건지 정확히 모른다면 아래 MVC 패턴에 대해 정리한 포스팅을 보고 오자.
2024.11.02 - [Backend/Spring || SpringBoot] - [Spring || SpringBoot] MVC 패턴이란? 스프링 MVC와 Counter 앱 예제
[Spring || SpringBoot] MVC 패턴이란? 스프링 MVC와 Counter 앱 예제
스프링 프레임워크를 경험하면 한 번씩은 들어본 MVC 패턴에 대해서 기록하려고 한다.MVC 패턴은 애플리케이션의 유지보수성과 확장성을 높이기 위해 UI와 비즈니스 로직을 분리하는 아키텍처 패
abuuu.tistory.com
예시 코드
@Controller
public class HomeController {
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Hello, Spring!");
return "home"; // home.html 또는 home.jsp를 반환
}
}
핵심
- @Controller는 뷰 템플릿을 반환한다.
- 데이터 자체를 반환하려면 @ResponseBody를 메서드나 반환 값에 추가해야 한다.
@RestController란?
기본 개념
- @RestController는 RESTful API를 개발할 때 사용한다.
- 메서드의 반환값이 JSON이나 XML 형태로 serialization 된다.
- @Controller와 @ResponseBody가 결합된 형태다.
예시 코드
@RestController
public class ApiController {
@GetMapping("/api/home")
public String apiHome() {
return "Hello, API!";
}
@GetMapping("/api/data")
public Map<String, String> apiData() {
return Map.of("message", "Hello, Data!");
}
}
핵심
- @RestController는 기본적으로 모든 메서드에 @ResponseBody가 포함된다.
- 주로 JSON 데이터를 반환할 때 사용된다.
@Controller와 @RestController 비교하기
특징 | @Controller | @RestController |
주요 용도 | View 반환 | JSON, XML 데이터 반환 |
기본 반환 | 뷰 이름 | 객체나 데이터 |
어노테이션 | @Controller or @Controller + @ResponseBody |
@RestController |
사용 예시 | 웹 페이지 렌더링 | REST API 개발 |
ViewResolver | 사용 | 사용 안 함 |
결론
- View를 렌더링 할 필요가 있다? @Controller
- 데이터를 반환해야 한다? @RestController
반응형
LIST
'Backend > Spring || SpringBoot' 카테고리의 다른 글
[Spring || SpringBoot] MVC 패턴이란? 스프링 MVC와 Counter 앱 예제 (0) | 2024.11.03 |
---|---|
[Spring || SpringBoot] Thymeleaf Layout - 타임리프 레이아웃 적용 하기 (1) | 2024.09.09 |
[Spring || SpringBoot] IPv4 설정 (0) | 2024.09.09 |
[Spring || SpringBoot] Spring에서 @Value로 Properties 값 가져오기 (0) | 2024.09.09 |
[Spring || SpringBoot] Rest API 공통 Response 포맷 구현 (1) | 2024.03.25 |