인프런 커뮤니티 질문&답변

wnsqhr1230님의 프로필 이미지

작성한 질문수

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

6강. POST API 개발하고 테스트하기

@RequestBody 사용 이유

24.03.24 13:21 작성

·

467

0

ADD API 에서는 "@Request Param" 을 DTO 타입(CalculatorAddRequest request)으로 인자를 받으며 생략했는데

@RequestBody 는 DTO 타입으로 인자를 받았음에도 생략하지 않은 이유가 궁금합니다.

DTO 타입을 사용하는것이 쿼리에 있는 name 과 DTO 의 변수명이 동일한 것을 자동으로 매칭시켜 주는 것이라면

왜 BODY 에 있는 변수명과 DTO 의 변수명이 동일할 때는 @RequestBody 없이 매칭되지 않는지요...!

답변 2

0

최태현님의 프로필 이미지
최태현
지식공유자

2024. 03. 24. 23:59

안녕하세요! wnsqhr1230님! 🙂

좋은 질문 감사드립니다.

인프런 AI 인턴이 언급해준 것처럼, GET 요청과 POST 요청의 차이입니다!

 

GET 요청은 HTTP query parameter에서 데이터를 가져오고요!

POST 요청은 HTTP body에서 데이터를 가져오죠!

 

따라서 스프링은 어디에서 데이터를 가져와야 하는지 알아야 하고, @RequestBody 어노테이션은 생략하지 않는 것입니다. 🙏

 

이렇게 두 차이를 인지하시고 궁금증이 생기셨다면 아주 잘 하고 계시는거에요!! 👍 😊

답변이 도움이 되었으면 좋겠습니다. 감사합니다! 🙇

0

인프런 AI 인턴님의 프로필 이미지

2024. 03. 24. 13:26

안녕하세요, 인프런 AI 인턴입니다.

wnsqhr1230님의 질문은 @RequestParam@RequestBody의 사용 및 차이점에 대한 궁금증으로 보입니다. 이에 대한 답변으로, 두 어노테이션이 처리하는 HTTP 요청 데이터의 종류가 다르기 때문입니다.

@RequestParam은 주로 GET 요청에서 사용되며, URL의 쿼리 파라미터들을 메소드의 파라미터로 매핑할 때 사용됩니다. 예를 들어, /user?id=123에서 id 값을 메소드의 파라미터로 가져오고자 할 때 사용합니다.

반면, @RequestBody는 주로 POST, PUT 요청에서 사용되며, HTTP 요청의 본문(body)에 있는 데이터를 Java 객체로 매핑할 때 사용됩니다. 즉, 클라이언트가 보내는 JSON 또는 XML과 같은 데이터를 Controller의 파라미터로 직접 매핑하기 위해 사용합니다.

@RequestParam과 달리 @RequestBody를 생략하지 않는 이유는, Spring에서 HTTP 요청 본문을 객체로 매핑하는 과정이 좀 더 복잡하기 때문입니다. HTTP 요청 본문에 담긴 JSON이나 XML과 같은 데이터를 Java 객체로 변환하기 위해서는 @RequestBody 어노테이션이 반드시 필요합니다. 이는 @RequestParam이 처리하는 쿼리 파라미터와 달리, 요청 본문의 데이터를 자동으로 매핑하기 위해 명시적으로 어노테이션을 선언해야 합니다.

질문하신 내용과 관련하여, 스프링에서 @RequestParam@RequestBody의 사용법 및 차이에 대해 자세히 설명한 다음 게시글이 도움이 될 수 있습니다:
- 어떻게 생성자 없이 number1과 number2에 값이 할당된건지 모르겠습니다.(DTO관련)에서는 DTO의 사용과 관련하여 @RequestBody의 역할을 설명하고 있습니다.
- 5~6강 질문이요에서도 @RequestParam과 DTO 객체 사용 시 매칭 관련 질문에 대한 답변을 찾아보실 수 있습니다.

이러한 차이점으로 인해 @RequestBody는 생략할 수 없으며, 클라이언트에서 서버로 데이터를 전송할 때 HTTP 요청 본문에 담긴 데이터를 처리하기 위해 필수적으로 사용됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.