HTTP 요청은 크게 헤더(Header)와 본문(Body)로 구성된다
Content-Type, Authorization 등)POST, PUT, PATCH에서 사용된다✅Example
POST /login HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 50
{
"username": "mole",
"password": "1234"
}
🔹 여기서 본문(Body)는 {username" : "soyun", "password": "1234" } 이다
🔹 @RequestBody는 이 데이터를 자바 객체로 변환해주는 역할을 한다
GET요청이란?GET요청은 서버에서 데이터를 조회(읽기)할 때 사용하는 HTTP 메서드이다
RESTful API 설계에서 리소스를 변경하지 않고 조회만 해야하는 경우에 사용한다.
✅ GET 요청의 특징
🔹 목적: 리로스 조회(읽기)
🔹 요청 본문(Body): 없다(표준적으로 허용되지 않는다)
🔹 멱등성: 동일한 요청을 여러번 보내도 서버 상태 변화가 없어야한다
🔹 캐싱 가능: 브라우저/프록시에서 캐싱 가능
🔹 데이터 전달 방식: 쿼리 파라미터 또는 URL 사용
@RequestBody의 역할스프링에서 @RequestBody는 HTTP 요청의 본문(Body)을 컨트롤러 메서드의 매개변수로 변환해준다
HttpMessageConverter를 사용해서 요청 본문을 자바 객체로 변환한다✅Example
@RestController
@RequestMapping("/users")
public class UserController{
@PostMapping("/create")
public String createUser(@RequestBody User user){
return "User created: " + user.getUsername();
}
}
public class User{
private String username;
private String password;
//GETTER, SETTER 필수
⬇️클라이언트가 아래와 같은 JSON 요청을 보내면
POST /users/create
Content-Type: application/json
{
"username": "soyun",
"password": "1234"
}
➡️@RequestBody가 본문을 User 객체로 변환해준다
@RequestBody를 GET에서 쓰면 안되는 이유(1) GET 요청은 일반적으로 본문이 없다
@RequestBody를 쓰더라도 요청 본문을 받을 수 없는 경우가 많다(2) 캐싱이 안된다
(3) HTTP 스펙 위반 가능
🔹그러면 데이터를 보내야할 때는?
1. 조회용이면 쿼리 파라미터(@RequestParam)이나 URL Path(@PathVariable) 사용
2. 본문 데이터가 필요하면 POST, PUT, PATCH 요청 사용
✅Example
1. 쿼리 파라미터 사용
@GetMapping("/products")
public List<Product? getProducts(@RequestParam String category){
return productService.getProductsByCategory(category);
}
➡️ Get /products?category=book
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id){
return userService.getUserById(id);
}
➡️ GET /users/123
GET 요청에서 @RequestBody를 쓰는 것은 비추천한다!
✅ GET 요청에서 데이터를 보내야 한다면, URL 파라미터로 전달하는 것이 RESTful한 설계 방식이다!!!!