생계형 개발자.

[spring] @RequestBody/@ResponseBody, @RequestParam 이란?


RequestBody와 ResponseBody?

  • Spring에서 비동기 처리를 위해 @RequestBody와 @ResponseBody를 주로 사용
  • @RequestBody는 HTTP 요청의 본문에 포함된 데이터를 읽어와서 매개변수에 바인딩하는 데 사용
  • @ResponseBody는 메서드의 반환 값을 HTTP 응답의 본문에 쓰기 위해 사용
  • 두 어노테이션을 함께 사용하면 비동기적인 요청과 응답을 처리할 수 있습니다.
  • 스프링 4.0 버전 이후부터는 @ResponseBody를 생략하고, 컨트롤러 메서드에 @RestController 어노테이션을 사용(@ResponseBody를 적용한 것과 동일한 효과)
  • 프로젝트 설정이나 커스텀 어노테이션 등 특정 상황에서는 @ResponseBody 어노테이션을 명시적으로 사용해야 할 수도 있음.(@Controller인 경우에 바디를 자바객체로 받기 위해서는 @ResponseBody 어노테이션을 반드시 명시해주어야 함)


클라이언트와 서버의 비동기 통신

  • 새로고침 없이 이루어지는 동작들은 대부분 비동기 통신으로 이루어 짐.
  • 클라이언트에서 서버로 요청 메시지를 보낼 때, 본문에 데이터를 담아 보내야 하고, 서버에서 클라이언트로 응답을 보낼때에도 본문에 데이터를 담아 보내야 함. 이때 데이터를 담는 본문이 바로 body. 즉, 요청본문 requestBody, 응답본문 responseBody를 담아 보내야 함.
  • 요청 메시지: 클라이언트에서 서버를 통신하는 메시지
  • 응답 메시지: 서버에서 클라이언트로 통신하는 메시지
  • 데이터 형식은 가장 대표적으로 사용되는 것이 JSON 형식


@RequestBody

@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
    // user 객체를 사용하여 사용자 생성 로직을 수행합니다.
    // ...
    return ResponseEntity.ok(user);
}
  • POST 요청의 본문을 User 객체로 변환. 따라서 요청의 본문에 포함된 JSON 또는 XML 데이터는 User 객체의 필드에 매핑.
  • 이후 컨트롤러 메서드에서는 user 객체를 사용하여 적절한 비즈니스 로직을 수행하고, ResponseEntity.ok()를 사용하여 HTTP 응답을 반환 함.
  • 일반적인 GET의 요청 파라미터라면 @RequestBody를 사용할 일이 없음


@ResponseBody

@GetMapping("/users/{id}")
@ResponseBody
public User getUser(@PathVariable int id) {
    // id에 해당하는 사용자 정보를 조회하고 User 객체를 반환합니다.
    // ...
    return user;
}
  • User 객체를 HTTP 응답의 본문으로 변환하여 클라이언트에게 전송.
  • 스프링은 User 객체를 JSON, XML 등의 데이터 형식으로 변환하고, 적절한 HTTP 헤더를 설정하여 클라이언트에게 반환 함.


RequestParam?

  • HTTP 요청의 쿼리 파라미터를 처리하기 위해 사용.
  • 쿼리 파라미터는 URL에 포함된 키-값 쌍으로 클라이언트가 서버에 데이터를 전달하는 데 사용 됨.
  • @RequestParam 어노테이션을 메서드 매개변수 앞에 붙이면 해당 매개변수에 HTTP 요청의 쿼리 파라미터를 자동으로 바인딩 함.


RequestParam 세부 속성

  • name: 쿼리 파라미터의 이름을 명시적으로 지정. 기본적으로 매개변수 이름과 일치 함.
  • required: 필수적인 파라미터인지 여부를 지정. 기본값은 true이며, 필수 파라미터가 누락되면 400 Bad Request 응답이 반환.
  • defaultValue: 쿼리 파라미터가 존재하지 않을 경우 사용할 기본값을 지정 함.


@RequestParam

@GetMapping("/users")
public ResponseEntity<User> getUser(
    @RequestParam(name = "id", defaultValue = "0") int id,
    @RequestParam(name = "name", required = false) String name
) {
    // id와 name을 사용하여 사용자 정보를 조회하고 User 객체를 반환합니다.
    // ...
    return ResponseEntity.ok(user);
}
  • @RequestParam(“id”) 어노테이션은 id라는 이름의 쿼리 파라미터 값을 int 타입의 id 매개변수에 자동으로 바인딩 됨.
  • /users?id=1과 같은 요청이 들어오면 id에 1이 할당되어 사용자 정보를 조회하고, ResponseEntity.ok()를 사용하여 HTTP 응답을 반환 함.





개인적인 이해를 바탕으로 작성한 글 입니다.
잘못된 내용, 피드백은 언제든 환영합니다!
🥺🥺🥺


참고 사이트


[Spring] @RequestBody / @ResponseBody 어노테이션 이란?