WEB
@RestController 와 @Controller 차이
2025. 5. 27. 15:39

✅ 차이 요약

항목 @Controller @RestController
역할 뷰(View)를 반환하는 웹 컨트롤러 JSON, XML 등 데이터를 반환하는 API 컨트롤러
기본 반환 방식 문자열 반환 시 → ViewResolver가 뷰 이름으로 처리 문자열 반환 시 → 그대로 HTTP Response Body에 반환됨
@ResponseBody 필요 여부 필요함 (데이터 반환하려면 @ResponseBody 명시해야 함) 자동 포함되어 있음 (항상 데이터 반환)
사용 용도 웹 페이지 렌더링 (JSP, Thymeleaf 등) REST API 개발 (React, Vue 같은 프론트엔드와 연동 시)

✅ 코드 예시

1. @Controller 사용 예 (뷰 반환)

@Controller
public class PageController {
    @GetMapping("/hello")
    public String helloPage(Model model) {
        model.addAttribute("name", "ChatGPT");
        return "hello";  // → templates/hello.html (Thymeleaf 기준)
    }

    @GetMapping("/api/hello")
    @ResponseBody
    public String helloApi() {
        return "Hello API";  // @ResponseBody 없으면 뷰 이름으로 인식됨
    }
}

 

2. @RestController 사용 예 (데이터 반환)

@RestController
public class ApiController {
    @GetMapping("/api/hello")
    public String hello() {
        return "Hello REST API";  // → 그대로 문자열 반환 (JSON 아님)
    }

    @GetMapping("/api/data")
    public Map<String, Object> getData() {
        Map<String, Object> data = new HashMap<>();
        data.put("name", "ChatGPT");
        data.put("age", 3);
        return data;  // → JSON으로 자동 직렬화
    }
}

 

✅ 언제 무엇을 써야 하나?

요구사항 어노테이션
웹 페이지를 만들어야 할 때 (Thymeleaf, JSP 등) @Controller
RESTful API 서버를 만들 때 (프론트 분리) @RestController
 

 

'WEB' 카테고리의 다른 글

RESTful API란?  (0) 2025.05.27
서블릿 필터(Filter) / 스프링 인터셉터(Interceptor) 비교  (0) 2025.05.27
Http 동작 방식  (0) 2025.05.27
SOP  (0) 2025.02.18
3계층 티어  (0) 2025.01.21