1. IDE
Intellij
2. 오늘 공부 내용
@RestController, @Controller
- @RestController
- 기능: @RestController는 RESTful 웹 서비스 개발에 사용됩니다. 이 어노테이션이 붙은 클래스의 메서드는 HTTP 응답 본문(body)에 직접 데이터를 반환합니다. 주로 JSON, XML 등과 같은 포맷으로 데이터를 반환합니다.
- @ResponseBody의 포함: @RestController는 @Controller와 @ResponseBody를 결합한 것과 같습니다. 따라서 메서드에서 반환된 데이터는 자동으로 JSON 또는 XML로 직렬화(serialization)되어 클라이언트에게 전달됩니다.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ApiController {
@GetMapping("/api/message")
public String getMessage() {
return "Hello, World!";
}
}
- @Controller
- 기능: @Controller는 주로 HTML 페이지를 반환하는 데 사용됩니다. Spring MVC에서는 이 어노테이션이 붙은 클래스의 메서드가 JSP, Thymeleaf와 같은 뷰(View) 템플릿을 반환하도록 설정됩니다.
- 뷰 리졸버(View Resolver): @Controller에서 반환된 문자열은 뷰 리졸버가 처리하며, 지정된 뷰를 찾아서 클라이언트에게 렌더링된 HTML로 반환합니다.
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class WebController {
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Hello, World!");
return "home"; // home.html 또는 home.jsp 등을 찾습니다.
}
}
차이점
- 응답 방식:
@Controller는 뷰 페이지(JSP, Thymeleaf 등)를 반환하여 HTML을 렌더링합니다.
@RestController는 JSON, XML 등의 데이터를 반환하여 RESTful 웹 서비스의 응답을 처리합니다.
- 기본 반환 타입:
@Controller는 문자열을 반환하면 뷰 리졸버에 의해 처리되며, 뷰 페이지가 렌더링됩니다.
@RestController는 문자열을 반환하면 그 값이 그대로 HTTP 응답 본문으로 전달됩니다.
- 사용 시점:
@Controller는 웹 애플리케이션에서 동적 웹 페이지를 생성해야 할 때 사용합니다.
@RestController는 클라이언트에 데이터를 제공하는 API를 개발할 때 사용합니다.