[Spring || SpringBoot] Controller와 RestController 란?

반응형
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