ModelAttribute RequestParam RequestBody 차이점

스프링에서 사용하는 ModelAttribute RequestParam RequestBody 차이점을 알아봅시다!

스프링 개발자라면 자주 접하게 되는 애노테이션 중 하나가 바로 `@ModelAttribute`, `@RequestParam`, `@RequestBody`입니다. 여기서는 이 세 개의 어노테이션의 사용 방법과 차이점을 자세히 살펴보겠습니다.

1. @ModelAttribute: 모델 속성 바인딩

사용 방법


– Model에 접근: `@ModelAttribute`를 사용하면 model에 있는 attribute에 쉽게 접근할 수 있습니다.
– 데이터 바인딩: 메서드 인자와 요청 매개변수의 이름이 일치하면 자동으로 데이터 바인딩을 해줍니다.
– 유효성 검사: 데이터 바인딩과 함께 유효성 검사도 수행됩니다.

특성

– 데이터 바인딩 과정: 쿼리 파라미터나 form 필드 등을 통해 데이터를 바인딩할 수 있습니다.
– 예외 처리: 데이터 바인딩에 실패하면 `WebExchangeBindException` 예외가 발생합니다.

 

2. @RequestParam: 쿼리 파라미터 바인딩

사용 방법


– 1:1 매칭: `@RequestParam`은 쿼리 파라미터를 메서드 인자로 1:1로 바인딩합니다.

특성


– 잘못된 파라미터값: 잘못된 파라미터 값이 들어오면 400 BadRequest를 발생시킵니다.
– 웹플럭스 지원: Query Parameter만 바인딩하는 것으로 제한됩니다.

 

3. @RequestBody: Request Body 역직렬화

사용 방법


– 역직렬화: `@RequestBody`로 Json데이터를 JavaObject로 변환합니다. 기본 생성자는 대부분의 경우에 필요하며, setter는 필요하지 않습니다.

 특성

– Post 요청과 Get 요청의 차이: Post 요청시에는 Setter가 필요없으며, Get 요청시에는 Setter가 필요합니다.

정리: 차이점

– @RequestParam: 1:1로 값을 바인딩해주며 잘못된 값이 오면 예외 발생
– @ModelAttribute: 여러 파라미터를 바인딩 가능하며, 타입 변환 실패 시에도 작업 계속
– @RequestBody: Post 요청시 Setter 불필요, Get 요청시 필요

결론

`@ModelAttribute`, `@RequestParam`, `@RequestBody`는 스프링에서 매우 중요한 개념입니다. 이 세 애노테이션을 정확히 이해하고 사용하면 웹 개발의 효율성과 정확성을 높일 수 있습니다.

이 글을 통해 그 차이점과 사용법을 명확히 이해했기를 바랍니다.

자세한 내용

[RequestBody에서는 Setter가 필요없다?] – 이동욱님

[@RequestBody에 왜 기본 생성자는 필요하고, Setter는 필요없을까? #1]

Leave a Comment