상세 컨텐츠

본문 제목

[Spring / Java] @RestController / @Controller 어노테이션 차이점

server

by 셉인 2024. 4. 15. 12:37

본문

728x90

[Spring / Java] @RestController / @Controller 어노테이션 차이점

@Controller

@Controller 어노테이션은 전통적인 Spring MVC의 컨트롤러로 사용된다. 이 어노테이션은 주로 뷰 템플릿을 반환하는데 사용되며, 클라이언트의 요청을 처리한 후에 뷰 이름을 반환한다. 이 반환된 뷰 이름을 통해 뷰 리졸버(view resolver)가 실제 뷰를 찾아 클라이언트에게 응답을 제공한다. @Controller를 사용할 때는 메소드가 데이터와 뷰를 함께 다루기 때문에, @ResponseBody 어노테이션을 사용하여 메소드의 반환값을 HTTP 응답 본문으로 직접 전송할 수 있다.

@Controller
public class MyController {
    @RequestMapping("/home")
    public String home() {
        return "home";  // 뷰 이름을 반환 (예: home.html)
    }
}

@RestController

@RestController@Controller@ResponseBody를 결합한 것이다. 이 어노테이션은 RESTful 웹 서비스를 만들 때 사용되며, 모든 메소드의 반환값을 HTTP 응답 본문에 직접 작성한다. 즉, 주로 JSON이나 XML과 같은 데이터 포맷으로 클라이언트에게 데이터를 반환하는 데 사용된다. @RestController는 데이터만 반환하고 뷰를 처리하지 않기 때문에, API 구축에 적합하다.

@RestController
public class MyRestController {
    @GetMapping("/data")
    public Map<String, Object> getData() {
        return Collections.singletonMap("key", "value");  // JSON 형태로 반환
    }
}

 

정리

  • @Controller: 주로 뷰를 반환하며, 웹 페이지를 렌더링하는 데 사용된다. 데이터를 반환하려면 **@ResponseBody**를 각 메소드에 적용해야 한다.
  • @RestController: 모든 메소드가 기본적으로 **@ResponseBody**를 가지므로, 데이터(주로 JSON, XML)를 직접 반환한다. API 개발에 주로 사용된다.
728x90

관련글 더보기

댓글 영역