eunja511005 / AutoCoding

0 stars 0 forks source link

[정리] @RequestBody와 @RequestParam의 차이점 #125

Open eunja511005 opened 1 year ago

eunja511005 commented 1 year ago

Form 데이터로 보내거나 기본 ajax 호출을 하면 application/x-www-form-urlencoded 형식으로 데이터가 전송 됩니다.

Controller에서 @RequestBody와 @RequestParam 어노테이션을 둘 다 붙이지 않으면,

Spring Framework는 기본적으로 @RequestParam 어노테이션을 적용합니다.

@RequestParam:
@RequestParam 어노테이션은 HTTP 요청의 쿼리 파라미터(Query Parameter)를 추출하는 데 사용됩니다. 쿼리 파라미터는 URL의 끝에 ? 뒤에 key-value 형식으로 전달되는 데이터입니다. 주로 GET 요청에서 사용되며, application/x-www-form-urlencoded 형식으로 데이터가 전송됩니다. Ajax 호출 시에는 데이터를 URL 뒤에 쿼리 파라미터로 포함하여 보내게 됩니다
@RequestBody 어노테이션은 HTTP 요청의 본문(Request Body)에 포함된 데이터를 추출하는 데 사용됩니다. 주로 POST, PUT, PATCH 같은 요청에서 사용되며, JSON 형식으로 데이터를 전송할 때 많이 사용됩니다. 즉, Ajax 호출 시에는 본문에 JSON 형식으로 데이터를 담아서 보내게 됩니다.
파일 업로드 시에는 @RequestBody 사용 (비권장):
비록 @RequestBody를 사용하여 파일 업로드를 처리하는 것도 가능하긴 하지만, 파일 업로드에는 적합하지 않습니다. 왜냐하면 @RequestBody는 요청 본문(body)의 데이터를 처리하는데 사용되며, 파일 업로드의 경우 멀티파트 형식으로 전송되는 바이너리 데이터를 처리하기에는 제약 사항이 많기 때문입니다.
만약 파일 업로드를 @RequestBody로 처리하려고 한다면, 클라이언트는 바이너리 데이터를 직렬화하여 JSON 또는 다른 문자열 형식으로 보내야 합니다. 서버에서는 해당 문자열 데이터를 역직렬화하여 파일로 저장해야 할 것입니다. 이렇게 하면 파일 업로드의 복잡성이 증가하고, 많은 작업이 필요해집니다.

따라서 일반적인 파일 업로드 시에는 @RequestParam과 MultipartFile을 사용하여 파일을 처리하는 것이 좋습니다.

결론 : 모든 POST 방식 호출의 데이터는 @RequestBody를 통해서 받는다.

@RequestParam:
주로 GET 요청과 폼 데이터를 처리할 때 사용됩니다.
@RequestParam을 사용하여 쿼리 매개변수(query parameters)를 받거나, HTML 폼에서 전송된 폼 데이터를 받을 수 있습니다.
간단한 데이터를 처리하는 데 적합하며, 주로 텍스트 데이터를 처리합니다.
파일 업로드를 처리하기 위해서는 MultipartFile과 함께 사용됩니다.
@RequestBody:
주로 POST, PUT, PATCH와 같은 요청의 본문(body)에 있는 데이터를 처리할 때 사용됩니다.
JSON, XML과 같은 구조화된 데이터를 받는 데 적합합니다.
복잡한 데이터 구조를 처리할 수 있고, 자바 객체로 자동으로 매핑됩니다.
파일 업로드에는 기본적으로 사용되지 않으며, 바이너리 데이터를 문자열 형식으로 변환하여 처리해야 하므로 번거롭고 비효율적입니다.
파일 업로드를 처리하기 위해서는 보통 @RequestParam과 MultipartFile을 사용하는 것이 일반적이고 권장됩니다. MultipartFile을 사용하면 바이너리 데이터를 쉽게 처리할 수 있고, 스프링은 멀티파트 형식의 요청을 간편하게 처리할 수 있도록 지원합니다.

따라서, 간단한 텍스트 데이터를 처리할 때는 @RequestParam을 사용하고, 구조화된 데이터 또는 파일 업로드를 처리할 때는 @RequestBody 또는 @RequestParam과 MultipartFile을 함께 사용하는 것이 보통 더 나은 선택입니다.