
@Controller와 @RestController는 Spring Framework에서 웹 요청을 처리하는 두 가지 어노테이션이다. 이 두 어노테이션은 유사한 기능을 제공하지만, 주로 사용되는 목적과 반환되는 응답 형식에서 차이가 있다.
일반적인 MVC(Model-View-Controller) 패턴을 사용하는 웹 애플리케이션에서 뷰를 반환하는 데 사용된다.
@Controller는 메서드가 반환하는 문자열을 뷰 이름으로 간주하여, 해당 이름에 해당하는 HTML 파일을 렌더링한다.return "articleList";와 같이 반환하면, articleList.html이라는 뷰를 찾고 이를 클라이언트에 전달한다.import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class WebPageController {
// 웹 브라우저에서 /greeting URL을 요청하면, greeting.html 파일을 렌더링
@GetMapping("/greeting")
public String greeting(Model model) {
model.addAttribute("message", "Hello, World!");
return "greeting"; // greeting.html 파일을 반환 (뷰 이름)
}
}
@Controller는 HTML 뷰를 반환한다.greeting() 메서드는 greeting.html이라는 템플릿 파일을 찾아 렌더링한다.Model을 사용하여 뷰에 데이터를 전달한다. 여기서는 "message"라는 이름으로 "Hello, World!" 문자열을 전달하고 있다.데이터를 반환하기 위해 사용된다. 보통 JSON 또는 XML 형식으로 클라이언트에게 응답을 보내는 RESTful API를 개발할 때 사용된. 이는 @Controller와 @ResponseBody를 결합한 형태이다.
@RestController는 메서드의 반환 값을 자동으로 JSON 또는 XML로 변환한다. 즉, return한 객체는 HTTP 응답 본문으로 직접 전달된다.@RestController는 @Controller와 @ResponseBody를 결합한 것으로, 각 메서드에 대해 반환된 값이 자동으로 바디에 작성된다.import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ApiController {
// 클라이언트가 /api/greeting URL로 요청하면 JSON 형식의 응답을 반환
@GetMapping("/api/greeting")
public String greeting() {
return "Hello, World!"; // 이 문자열이 JSON 형식으로 클라이언트에게 반환됨
}
}
@RestController는 JSON 또는 XML 데이터를 반환한다.greeting() 메서드는 "Hello, World!"라는 문자열을 반환하지만, 브라우저에는 JSON 응답으로 표시된다.@Controller: 주로 뷰(HTML 파일)를 반환하여 클라이언트에게 웹 페이지를 보여준다./greeting으로 요청하면, 서버는 greeting.html 페이지를 렌더링해 사용자에게 보낸다.@RestController: 주로 데이터(JSON 또는 XML)를 반환하여 클라이언트에게 API 응답을 제공한다./api/greeting으로 요청하면, 서버는 {"message": "Hello, World!"}와 같은 JSON 데이터를 클라이언트에게 응답으로 보낸다.@Controller: 일반적인 웹 애플리케이션에서 UI를 처리하는 데 사용된다.@RestController: RESTful API를 구현하여 클라이언트와 데이터 통신을 위한 엔드포인트를 제공한다.@Controller를 사용한다.@RestController를 사용한다.// @Controller로 HTML 페이지 반환
@Controller
public class HomeController {
@GetMapping("/home")
public String homePage(Model model) {
model.addAttribute("title", "Welcome to the Home Page");
return "home"; // home.html을 렌더링
}
}
// @RestController로 JSON 데이터 반환
@RestController
public class HomeApiController {
@GetMapping("/api/home")
public Map<String, String> homeApi() {
Map<String, String> response = new HashMap<>();
response.put("title", "Welcome to the API Home Page");
return response; // JSON 형식으로 응답 {"title": "Welcome to the API Home Page"}
}
}
컨트롤러 메서드에서 데이터를 직접 반환하기 위한 어노테이션이다. 주로 JSON 또는 XML과 같은 형식의 데이터를 반환할 때 사용되며, 이는 보통 RESTful API에서 응답으로 사용된다.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.stereotype.Controller;
@Controller
public class ApiController {
// 클라이언트가 "/api/data" URL로 GET 요청을 보냈을 때
@GetMapping("/api/data")
@ResponseBody
public String getData() {
// JSON 형식의 데이터를 반환
return "{\"message\":\"This is some JSON data\"}";
}
}
ResponseBody는 메서드의 반환 값이 직접 HTTP 응답 본문에 포함되도록 한다./api/data 경로로 요청이 들어오면, 서버는 JSON 형식의 데이터를 클라이언트에게 전달한다.Spring에서는 @RestController라는 어노테이션도 존재하는데, 이는 사실 @Controller와 @ResponseBody를 결합한 것이다.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ApiRestController {
// 클라이언트가 "/api/message" URL로 GET 요청을 보냈을 때
@GetMapping("/api/message")
public String getMessage() {
// JSON 데이터로 응답
return "{\"message\":\"Hello from the REST API!\"}";
}
}
@RestController는 데이터만 반환하는 RESTful API를 만들 때 주로 사용되며, 자동으로 모든 메서드가 @ResponseBody를 적용받는다.@RestController를 사용하면 메서드마다 따로 @ResponseBody를 붙일 필요가 없다.Representational State Transfer (REST)라는 아키텍처 스타일을 따르는 웹 서비스의 API를 말한다. REST는 네트워크 상에서 클라이언트와 서버가 서로 통신하는 방식을 정의하는 규칙이다. RESTful API는 이 REST의 원칙을 준수하여 클라이언트가 서버의 리소스에 접근할 수 있도록 설계된 인터페이스이다.
RESTful API는 REST의 원칙을 따라 자원을 HTTP를 통해 제공하는 인터페이스이다. 클라이언트는 HTTP 메서드를 사용해 서버에 요청을 보내고, 서버는 요청에 대한 응답으로 데이터를 반환하거나 리소스를 조작한다. RESTful API는 웹 애플리케이션과 서비스 간의 통신을 효율적으로 처리할 수 있게 도와준다.
/articles, /users/{id}GET: 자원 조회
POST: 자원 생성
PUT: 자원 전체 수정 (덮어쓰기)
PATCH: 자원 일부 수정
DELETE: 자원 삭제
예를 들어, 블로그에서 게시글을 조회, 생성, 수정, 삭제하는 작업은 각각 다음과 같이 이루어질 수 있다.
GET /articles : 게시글 목록 조회
POST /articles : 새 게시글 생성
PUT /articles/1 : ID가 1인 게시글 수정
DELETE /articles/1 : ID가 1인 게시글 삭제
/articles로 요청을 보냈을 때, 게시글 목록을 JSON 형식으로 받을 수 있다.블로그 시스템의 RESTful API를 예로 들어 설명하면,
GET /articles[
{
"id": 1,
"title": "RESTful API란?",
"content": "RESTful API는..."
},
{
"id": 2,
"title": "Spring Boot 시작하기",
"content": "Spring Boot는..."
}
]
POST /articles{
"title": "새로운 게시글",
"content": "이것은 새로운 게시글의 내용입니다."
}
{
"id": 3,
"title": "새로운 게시글",
"content": "이것은 새로운 게시글의 내용입니다."
}
GET /articles/1{
"id": 1,
"title": "RESTful API란?",
"content": "RESTful API는..."
}
PUT /articles/1{
"title": "RESTful API 설명",
"content": "RESTful API는 대표적인 웹 서비스 아키텍처 스타일입니다."
}
{
"id": 1,
"title": "RESTful API 설명",
"content": "RESTful API는 대표적인 웹 서비스 아키텍처 스타일입니다."
}
DELETE /articles/1