노빠꾸 개발일지/SPRING
@RequestParam 와 @RequestBody 알아보기
No Backing
2025. 4. 24. 06:40
반응형
1. @RequestParma : URL 또는 폼 데이터 바인딩
- 동작 : 서블릿 API가 합쳐 둔 request parameter map에서 값을 꺼내어 메서드 인자로 주입한다. 단순 타입, 배열, List, Map 모두 지원한다.
- GET, POST 구분 없음 : x-www-form-unlencoded POST도 동일하게 처리하므로 검색, 필터, 로그인 폼 모두 활용 가능하다.
- 멀티파트 파일 : 파일 자체는 @RequestPart / MultipartFile을 쓰지만 파일명 같은 메타데이터는 @RequestParam으로 함께 받을 수 있다.
@GetMapping("/books")
public List<Book> list(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int size,
@RequestParam(required = false) String category) { … }
2. @RequestBody : 본문 전체를객체로 수신
- 동작 : Content-Type에 맞춰 등록된 HttpMessageConverter가 InputStream을 읽어 DTO로 역직렬화한다. JSON -> Jackson, XML -> JAXB 등
- 검증 : @Valid + Bean Validation을 붙이면 역직렬화 직후 필드 검증이 작동한다.
@PostMapping("/books")
public Book create(@Valid @RequestBody BookCreateRequest req) { … }
3. List 객체를 Parameter로 받는 경우
아래는 List객체를 Paramter로 전달할 경우, 상황에 따른 @RequestParam과 @RequestBody 중 일반적인 선택 예시이다.
참고용으로 확인하고, 프로젝트 상황에 따라 사용하면 된다.
| @RequestParam | @RequestBody | |
| 리스트 구조 | List<Long>, List<String>처럼 단일 값 타입 | List<OrderLine> 처럼 중첩 필드가 있는 객체 |
| 개수 길이 | 수 10 이하, 각 값이 짧을 때 | 수십개, 수백개 이상이거나 값이 길다 |
| URL 노출 | 파라미터가 URL에 남아도 문제 없다 | 민감 정보 숨겨야 하거나 URL 길이 한계 우려가 있다. |
4. @RequestParam & @RequestBody 사용 선택 예시
아래는 @RequestParma과 @RequestBody를 언제 사용할지 선택하는 일반적인 예시이다. 프로젝트 상황에 따라 아랴와 다르게 사용을 할 수도 있다.
| 구분 | @RequestParam | @RequestBody |
| HTTP 메서드 | GET / DELETE | POST/PUT/PATCH |
| 데이터 개수, 복잡도 | 1 ~ 4개의 단순 값 | 깊이 있는 객체, 컬렉션 |
| 보안, 가시성 요구 | URL 공유, 캐시, SEO가 중요 | 민감 데이터, 로그 최소화 |
반응형