@Controller와 @RestController 의 설명 과 차이

2024. 6. 24. 16:34Java/Spring

@Controller@RestController는 Spring 프레임워크에서 사용되는 어노테이션으로, 둘 다 Spring MVC 아키텍처에서 컨트롤러 역할을 하지만, 주로 사용하는 목적과 반환 방식에 차이가 있습니다.

 

@Controller

  • 일반적인 Spring MVC 컨트롤러를 나타내며, 주로 뷰(View)를 반환하는 데 사용됩니다. 이 어노테이션은 MVC 패턴에서의 컨트롤러 역할을 수행하며, 요청을 처리하고 모델 데이터를 준비하여 적절한 뷰로 전달합니다.
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MyController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, World!");
        return "helloView"; // "helloView"라는 이름의 뷰를 반환
    }
}

 

  • 특징
    • 뷰 리졸버: @Controller는 문자열을 반환하면 뷰 리졸버(View Resolver)가 이를 해석하여 JSP, Thymeleaf, Freemarker 등의 템플릿 엔진을 통해 HTML 뷰로 렌더링합니다.
    • Model 객체: 컨트롤러 메서드는 Model 객체를 사용하여 뷰에 데이터를 전달할 수 있습니다.

 

@RestController

  • @RestController는 RESTful 웹 서비스를 개발하기 위해 Spring 4.0에서 도입된 어노테이션입니다. @RestController는 @Controller와 @ResponseBody를 결합한 형태로, 컨트롤러 메서드가 반환하는 데이터 자체를 HTTP 응답 본문에 직접 쓰도록 합니다.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyRestController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!"; // "Hello, World!" 문자열을 응답 본문으로 반환
    }
}

 

특징

  • 자동 변환: 반환된 객체는 자동으로 JSON 또는 XML로 변환되어 HTTP 응답 본문에 작성됩니다. 이를 위해 Jackson 라이브러리와 같은 JSON 변환 라이브러리가 필요합니다.
  • 데이터 중심: 뷰를 반환하지 않고, 주로 JSON 데이터를 반환하여 클라이언트와 통신합니다.

 

차이점

  @Controller @RestController
사용 목적 뷰(View) 반환 JSON/XML 데이터 반환
반환 값 뷰 이름 (String) 데이터 객체 ( 객체 (json , bigint 등등), 문자열
기본 동작 반환 값은 뷰 리졸버가 해석하여 뷰로 렌더링 반환 값은 HTTP 응답 본문에 직접 작성
자동 변환 없음 JSON/XML 변환
조합 어노테이션 기본 jpa @Controller + @ResponseBody
사용 시나리오 웹 애플리케이션의 프론트엔드 뷰 렌더링 RESTful API 제공, 데이터 중심의 웹 서비스

 

3줄 요약

 

  • @Controller는 주로 웹 애플리케이션에서 뷰를 반환하는 데 사용되며, JSP나 Thymeleaf 같은 템플릿 엔진과 함께 사용됩니다.
  • @RestController는 RESTful 웹 서비스에서 JSON이나 XML 같은 데이터를 반환하는 데 사용되며, 프론트엔드와의 데이터 통신을 쉽게 할 수 있습니다.
  • 최근엔 RESTful 개발하는 경우가 많아서 @RestController를 주로 사용하지만 SEO나 서버 사이드 렌더링등을 쓸때는 @Controller 를 쓴다.

 

'Java > Spring' 카테고리의 다른 글

영속성 컨텍스트  (0) 2024.06.24
DTO, DAO, VO, Record 개념 및 차이  (0) 2024.06.24
@Transactional  (0) 2024.06.24
Entity 맵핑 @어노테이션  (0) 2024.06.19
BLOB 이용한 멀티미디어 저장  (0) 2024.06.19