server
[Spring / Java] @RestController / @Controller 어노테이션 차이점
셉인
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