@Controller와 @RestController의 차이점

2024. 5. 17. 17:35개인 공부

@Controller와 @RestController는 모두 스프링 MVC에서 사용되는 애너테이션으로, 웹 요청을 처리하는 컨트롤러 클래스를 정의하는 데 사용됩니다. 그러나 두 애너테이션의 사용 목적과 동작 방식에는 몇 가지 중요한 차이점이 있습니다.

@Controller

@Controller는 전통적인 스프링 MVC 컨트롤러를 정의하는 데 사용됩니다. 주로 HTML 뷰를 반환할 때 사용되며, JSP, Thymeleaf 등 템플릿 엔진을 통해 서버 측에서 뷰를 생성합니다. 주로 웹 애플리케이션의 프론트엔드와 백엔드 간의 상호작용에서 사용됩니다.

주요 특징:

  • 뷰 리졸버 사용: @Controller는 문자열을 반환하면 해당 문자열이 뷰 이름으로 해석됩니다. 스프링의 뷰 리졸버(View Resolver)가 이 뷰 이름을 해석하여 실제 뷰 페이지를 찾고 렌더링합니다.
  • 모델과 뷰: Model 객체를 사용하여 뷰에 데이터를 전달할 수 있습니다.
@Controller
public class MyController {
    
    @GetMapping("/welcome")
    public String welcome(Model model) {
        model.addAttribute("message", "Welcome to Spring MVC!");
        return "welcome"; // 뷰 이름
    }
}

 

위 코드에서 welcome은 뷰 이름이며, 뷰 리졸버에 의해 /WEB-INF/views/welcome.jsp와 같은 실제 뷰 페이지로 매핑될 수 있습니다.

@RestController

@RestController는 RESTful 웹 서비스를 만들기 위해 사용됩니다. @Controller와 @ResponseBody가 결합된 형태로, 메서드에서 반환하는 값은 뷰가 아닌 HTTP 응답 본문으로 직접 변환됩니다. 주로 JSON 또는 XML 형태의 데이터를 반환하는 API를 개발할 때 사용됩니다.

주요 특징:

  • 자동 JSON 변환: 반환되는 객체는 자동으로 JSON 형식으로 변환되어 HTTP 응답 본문에 포함됩니다. 스프링은 이를 위해 Jackson 라이브러리를 사용합니다.
  • RESTful 웹 서비스: 주로 RESTful API 엔드포인트를 정의하는 데 사용됩니다.
@RestController
public class MyRestController {
    
    @GetMapping("/api/message")
    public String getMessage() {
        return "Hello, World!";
    }
    
    @GetMapping("/api/user")
    public User getUser() {
        return new User("John", "Doe");
    }
}

 

위 코드에서 /api/message 엔드포인트는 단순 텍스트 응답을 반환하고, /api/user 엔드포인트는 User 객체를 JSON 형식으로 반환합니다.

요약

  • @Controller는 주로 HTML 뷰를 반환하며, 뷰 리졸버를 통해 템플릿 엔진을 사용하여 서버 측에서 뷰를 렌더링합니다.
  • @RestController는 RESTful 웹 서비스용 컨트롤러로, 주로 JSON 또는 XML 형식의 데이터를 반환합니다. @ResponseBody 애너테이션이 결합된 형태로, 반환 값은 HTTP 응답 본문으로 직렬화됩니다.

두 애너테이션은 사용 목적에 따라 적절히 선택되어야 하며, 스프링 MVC 애플리케이션과 RESTful API를 각각 구현하는 데 중요한 역할을 합니다.

'개인 공부' 카테고리의 다른 글

바인딩 어노테이션 정리  (0) 2025.04.10
CS 공부 - 3  (1) 2024.05.21
CS 공부 - 2  (0) 2024.05.13
CS 공부 - 1  (0) 2024.05.08
java stream()이란?  (0) 2024.03.13