🗣️ 간단하게 말하자면,
@Controller는 view를 반환하고, @RestController는 Json 형식의 HTTP 응답을 직접 반환한다.
따라서 서버의 목적에 따라 골라서 사용하면 되겠다.
@Controller는 웹서버에서 사용하기 적당해보이고, @RestController는 API 서버에서 사용하기 적당해보인다.
❓웹서버랑 API 서버의 차이는?
웹서버는 jsp등의 브라우저가 읽을 페이지를 반환하는 서버이고,
API 서버는 웹서버가 따로 있는 경우, 혹은 Server to Server로 통신하는 경우 json등의 포맷으로 값을 전달하는 서버이다.
📄@Controller의 Document를 확인하면 아래와 같다.
Indicates that an annotated class is a "Controller" (e.g. a web controller).
This annotation serves as a specialization of @Component, allowing for implementation classes to be autodetected through classpath scanning.
It is typically used in combination with annotated handler methods based on the org.springframework.web.bind.annotation.RequestMapping annotation.
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
/**
* The value may indicate a suggestion for a logical component name,
* to be turned into a Spring bean in case of an autodetected component.
* @return the suggested component name, if any (or empty String otherwise)
*/
@AliasFor(annotation = Component.class)
String value() default "";
}
이 어노테이션이 달린 클래스는 "컨트롤러"(예: 웹 컨트롤러)임을 나타냅니다.
이 어노테이션은 클래스 경로 검색을 통해 구현 클래스를 자동으로 검색할 수 있는 @Component의 일부 역할을 합니다.
일반적으로 org.springframework.web.bind.anotation.RequestMapping 어노테이션에 기반한 handler methods와 함께 사용됩니다.
📄@RestController의 Document를 확인하면 아래와 같다.
A convenience annotation that is itself annotated with @Controller and @ResponseBody.
Types that carry this annotation are treated as controllers where @RequestMapping methods assume @ResponseBody semantics by default.
NOTE: @RestController is processed if an appropriate HandlerMapping-HandlerAdapter pair is configured such as the RequestMappingHandlerMapping-RequestMappingHandlerAdapter pair which are the default in the MVC Java config and the MVC namespace.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
/**
* The value may indicate a suggestion for a logical component name,
* to be turned into a Spring bean in case of an autodetected component.
* @return the suggested component name, if any (or empty String otherwise)
* @since 4.0.1
*/
@AliasFor(annotation = Controller.class)
String value() default "";
}
@Controller과 @ResponseBody를 포함한 편리한 어노테이션입니다.
이 어노테이션을 사용하는 유형은 기본적으로 @RequestMapping 메소드가 @ResponseBody 의미를 취하는 controller로 간주됩니다.
참고: @RestController는 MVC Java 구성 및 MVC 네임스페이스의 기본값인 RequestMappingHandlerMapping-RequestMappingHandlerAdapter pair와 같이 적절한 HandlerMapping-HandlerAdapter pair로 구성된 경우 @RestController가 처리됩니다.
😕@Controller를 @RestController처럼 사용하기
@RestController는 결국 @Controller + @ResponseBody니까
@Controller 어노테이션과 @ResponseBody 어노테이션 두 개 다 작성해주면 View가 아닌 Json형식의 response값을 반환할 수 있다.
'개발 > Spring Boot Framework' 카테고리의 다른 글
spring boot에서 euc-kr 요청 받기 (0) | 2023.10.12 |
---|---|
웹 애플리케이션 컨테이너 (0) | 2019.12.18 |
Spring, Spring Boot란? (0) | 2019.12.11 |