노빠꾸 개발일지/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가 중요 민감 데이터, 로그 최소화

 

반응형