@Controller 와 @RestController 의 차이점에 대해 알아보겠습니다.
요즘은 프론트앤드로 React, Vue, Svelte 등을 사용하기 때문에 Controller 보다는 RestController 를 더 사용할 것 같습니다.
이들은 HTTP 요청을 처리하는 클래스를 정의하는 데 사용됩니다.
@Controller
@Controller 어노테이션은 스프링 MVC에서 컨트롤러를 정의하는 데 사용됩니다.
@Controller가 붙은 클래스는 보통 View를 반환합니다. HTML 파일을 사용하거나, JSP 등을 사용할 때 주로 쓰게 됩니다.
@Controller
public class TestController {
@RequestMapping("/")
public String index() {
return "index"; // View 이름을 반환합니다.
}
}
위 코드에서 MyController 클래스에 있는 index 메서드가 "/" 경로로 들어오는 HTTP 요청을 처리하게 됩니다.
그리고 "index"라는 이름의 View(예: JSP 파일)를 반환하게 됩니다.
@RestController
@RestController 어노테이션은 @Controller와 비슷하지만, 이 어노테이션은 주로 RESTful (Get, Post, Put, Delete) 컨트롤러를 만드는 데 사용됩니다.
@RestController가 붙은 클래스의 메서드들은 기본적으로 HTTP 응답 본문(Body)에 직접 쓰여집니다.
따라서 주로 데이터 자체(JSON, XML 등)를 반환하는데 사용됩니다.
프론트앤드 프레임워크를 사용할 때 사용할 탠데, React 등에서 Fetching 을 통해 요청한 정보들을 JSON 형태로 반환하고 이를 이용하여 데이터를 화면에 보여주게 됩니다.
@RestController
public class TestRestController {
@RequestMapping("/hello")
public String hello() {
return "Hello World"; // 문자열이 HTTP 응답 본문에 직접 쓰여집니다.
}
}
위 코드에서 MyRestController 클래스에 있는 hello 메서드가 "/hello" 경로로 들어오는 HTTP 요청을 처리하게 되고, "Hello World"라는 문자열을 HTTP 응답 본문으로 직접 반환하게 됩니다.