Spring
@Controller 와 @RestController
Chan Dev
2025. 1. 22. 16:32
Spring Framework는 Java 애플리케이션 개발에서 핵심적인 역할을 하며, 특히 웹 애플리케이션에서는 사용자의 요청을 처리하고 적절한 응답을 반환하기 위해 다양한 애노테이션을 제공합니다. 그중 @Controller와 @RestController는 자주 혼동되는 두 가지 애노테이션입니다.
@Controller
@Controller는 Spring MVC에서 컨트롤러 역할을 하는 클래스에 사용되는 애노테이션입니다. 주로 뷰(View)를 반환하는 데 사용되며, HTML 페이지와 같은 템플릿 엔진과 함께 사용됩니다.
@Controller 는 반환 값이 뷰 이름으로 해석됩니다. Spring 은 해당 이름을 기반으로 HTML, JSP 와 같은 뷰 파일을 렌더링 해줍니다. 또한 일반적으로 HTTP 응답 자체를 처리하지 않고 뷰 템플릿을 통해 결과를 반환하는 특징이 있습니다.
@Controller
public class HomeController {
@GetMapping("/")
public String home(Model model) {
model.addAttribute("message", "Welcome to Spring!");
return "home"; // home.html 또는 home.jsp를 반환
}
}
@RestController
Spring 4.0 에서 추가된 애노테이션으로 RESTful 웹 서비스 개발을 위해 설계되었습니다.
@Controller 와 달리 뷰를 반환하지 않고, 데이터를 JSON 또는 XML 형식으로 반환을 합니다.
@RestController 는 내부적으로 모든 메서드에 @ResponseBody 애노테이션이 적용된 것과 동일합니다.
따라서 반환 값이 HTTP 응답 본문으로 직렬화됩니다.
@RestController
public class ApiController {
@GetMapping("/api/message")
public String getMessage() {
return "Hello, REST!";
}
@GetMapping("/api/data")
public Map<String, String> getData() {
Map<String, String> data = new HashMap<>();
data.put("key", "value");
return data;
}
}