[Spring] Controller와 RestController 차이

rekv·2025년 2월 4일

Spring

목록 보기
3/15

Controller

  • 주로 html 페이지를 반환할 때 사용
  • View Resolver를 통해 JSP, Thymeleaf 등의 뷰 템플릿으로 데이터를 전달
@Controller
public class MyController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, Spring!");
        return "hello"; // templates/hello.html로 이동 (Thymeleaf)
    }
}
  • return "hello";는 뷰 이름을 반환
  • 스프링은 resources/templates/hello.html(Thymeleaf) 또는 WEB-INF/views/hello.jsp(JSP)를 찾아 렌더링
  • Model을 통해 데이터를 뷰로 전달

RestController

  • 역할: 주로 JSON, XML, 문자열 데이터를 반환할 때 사용
  • @Controller + @ResponseBody의 기능을 합침
@RestController
public class MyRestController {

    @GetMapping("/api/hello")
    public String hello() {
        return "Hello, REST!"; // 순수 문자열 반환
    }

    @GetMapping("/api/data")
    public Map<String, String> getData() {
        Map<String, String> data = new HashMap<>();
        data.put("key", "value");
        return data; // JSON으로 반환됨: {"key": "value"}
    }
}
  • 문자열, 객체 등을 반환하면 자동으로 JSON 형태로 변환
  • @ResponseBody를 별도로 붙일 필요 없음

정리

구분@Controller@RestController
반환데이터 뷰(View) 페이지 (HTML, JSP 등)JSON, XML, 문자열 등 (데이터 자체)
용도웹 애플리케이션의 UI 렌더링REST API 개발
View Resolver 작동O (뷰 이름을 리턴하면 템플릿 렌더링)X (데이터를 바로 HTTP Response로 반환)
@ResponseBody 필요필요 (@ResponseBody를 추가해야 함)불필요 (@RestController에 내장됨)

Controller
클라이언트한테 응답을 줄 때 view(html 파일)을 찾아서 전송
규모가 조금 작은 곳에서 프론트와 백을 하나의 서버로 만들때 사용
웹 애플리케이션: HTML 렌더링이 필요하면

RestController
클라이언트한테 응답을 줄 때 자신이 직접 내용을 전송
규모가 커졌을 때 프론트 서버를 따로 두고 스프링은 백엔드 서버로만 만들어서 사용할 때
REST API 개발: JSON 같은 데이터만 반환할 경우

대부분의 API 서버 개발에서는 @RestController를 사용하고, 전통적인 MVC 웹 애플리케이션에서는 @Controller를 사용

0개의 댓글