[ Spring ] @Controller와 @RestController의 차이

2024. 2. 12. 19:04· BACK-END/└ Spring Boot

 

 

@Controller

  • 전통적인 Spring MVC의 컨트롤러 어노테이션.
  • 주로 HTML View(화면)를 반환하기 위해 사용된다. 
  • 메서드에서 @ResponseBody 어노테이션이나 메서드 자체에 @RestController 어노테이션이 없는 경우 메서드가 반환하는 값은 뷰에 전달되어 렌더링 된다. 
  • 결과를 화면으로 반환하는 컨트롤러

@RestController

  • @Controller + @ResponseBody가 합쳐진 형태로 JSON 또는 XML 형태의 객체데이터를 반환한다.
  • 메서드가 반환하는 값은 직접 클라이언트로 전송되는 데이터이다.
  • 결과를 직접 생성하는 컨트롤러
  • 메서드가 자동으로 @ResponseBody로 표시된 것처럼 간주되어, 메서드의 반환 값이 직접 응답 본문으로 전송된다.

[ 간단한 예제 비교 ]

// @Controller 사용 예제
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MyController {

    @GetMapping("/hello")
    public String hello() {
        return "hello"; // 뷰의 이름인 "hello"를 반환
    }
}

 

// @RestController 사용 예제
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyRestController {

    @GetMapping("/api/hello")
    public String hello() {
        return "Hello, World!"; // 직접 응답으로 전송되는 문자열
    }
}

 


 

사실 이 둘의 차이는 '용도 차이' 정도이다. @Controller가 먼저 나왔고, @RestController가 이후 나온 방식이기 때문이다. 

 

 

 

 

 

 

 

추천 참고 : https://mangkyu.tistory.com/49

 

개인 공부 기록용입니다:) 

많은 분들의 티스토리 참고하였습니다.

728x90