주의

  • 본 게시글은 Claude로 작성되었습니다. 잘못된 정보가 있을 수 있습니다.

개요

이 문서는 Spring 프레임워크에서 자주 사용되는 두 가지 중요한 어노테이션인 @RequestBody와 @RequestParam에 대해 설명합니다. 이 두 어노테이션은 HTTP 요청에서 데이터를 추출하고 처리하는 데 사용되며, RESTful 웹 서비스 개발에 핵심적인 역할을 합니다. @RequestBody는 HTTP 요청 본문의 데이터를 자바 객체로 변환하는 데 사용되고, @RequestParam은 URL의 쿼리 파라미터나 폼 데이터를 처리하는 데 사용됩니다. 이 가이드를 통해 두 어노테이션의 기본 개념, 사용법, 그리고 실제 적용 사례를 살펴볼 것입니다.

상세 설명

@RequestBody란?

@RequestBody는 HTTP 요청의 본문(body)에 담긴 데이터를 자바 객체로 변환하는 역할을 합니다. 주로 POST, PUT 요청에서 JSON이나 XML 형식의 데이터를 받아 처리할 때 사용됩니다.

주요 특징:

  1. HTTP 요청 본문을 자바 객체로 자동 변환
  2. 주로 JSON 또는 XML 데이터 처리에 사용
  3. 내부적으로 HttpMessageConverter를 사용하여 변환 수행

@RequestParam이란?

@RequestParam은 HTTP 요청의 파라미터를 메소드의 파라미터로 전달받을 때 사용합니다. 주로 GET 요청의 쿼리 파라미터나 POST 요청의 폼 데이터를 처리할 때 활용됩니다.

주요 특징:

  1. URL의 쿼리 스트링이나 폼 데이터의 파라미터를 추출
  2. 단일 값 또는 배열 형태의 파라미터 처리 가능
  3. 필수 여부, 기본값 설정 등 다양한 옵션 제공

@RequestBody vs @RequestParam

두 어노테이션의 주요 차이점은 다음과 같습니다:

  1. 데이터 위치: @RequestBody는 요청 본문에서, @RequestParam은 URL이나 폼 데이터에서 값을 가져옵니다.
  2. 데이터 형식: @RequestBody는 주로 복잡한 JSON/XML 객체를, @RequestParam은 단순한 키-값 쌍을 처리합니다.
  3. HTTP 메소드: @RequestBody는 주로 POST/PUT에서, @RequestParam은 GET/POST 모두에서 사용됩니다.

사용 예제

@RequestBody 사용 예제

변경 전:

@PostMapping("/users")
public ResponseEntity<User> createUser(User user) {
    // user 객체 처리 로직
    return ResponseEntity.ok(user);
}

변경 후:

@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
    // user 객체 처리 로직
    return ResponseEntity.ok(user);
}

이 예제에서 @RequestBody를 사용함으로써, HTTP 요청 본문의 JSON 데이터가 자동으로 User 객체로 변환됩니다.

@RequestParam 사용 예제

변경 전:

@GetMapping("/users")
public ResponseEntity<User> getUser(String username) {
    // username으로 유저 검색 로직
    return ResponseEntity.ok(new User(username));
}

변경 후:

@GetMapping("/users")
public ResponseEntity<User> getUser(@RequestParam("username") String username) {
    // username으로 유저 검색 로직
    return ResponseEntity.ok(new User(username));
}

이 예제에서 @RequestParam을 사용하여 URL의 쿼리 파라미터 “username”의 값을 명시적으로 추출합니다.

참고 자료

자주 묻는 질문 (FAQ)

Q: @RequestBody와 @RequestParam을 동시에 사용할 수 있나요?

A: 네, 동시에 사용할 수 있습니다. 예를 들어, POST 요청에서 URL 파라미터와 요청 본문을 함께 처리해야 할 때 유용합니다.

Q: @RequestBody는 항상 필수인가요?

A: 기본적으로 @RequestBody는 필수입니다. 선택적으로 만들려면 required = false 옵션을 사용할 수 있습니다.

Q: @RequestParam의 기본값을 설정할 수 있나요?

A: 네, defaultValue 속성을 사용하여 기본값을 설정할 수 있습니다. 예: @RequestParam(defaultValue = "guest") String username

관련 질문 및 추가 정보

  • @PathVariable과 @RequestParam의 차이점은 무엇인가요?
  • Spring의 데이터 바인딩 과정에 대해 더 자세히 알고 싶습니다.
  • @RequestBody 사용 시 발생할 수 있는 일반적인 오류와 해결 방법은 무엇인가요?
  • Spring의 컨트롤러에서 유효성 검사를 어떻게 구현할 수 있나요?
  • RESTful API 설계 시 @RequestBody와 @RequestParam을 효과적으로 사용하는 방법에 대해 더 알고 싶습니다.