개발

[Spring MVC] @RequestParam vs @RequestMapping

qwas15788hj 2025. 8. 16. 23:38

📝 상황

프론트에서 URL과 파라미터를 맞춰 백엔드로 전송했는데, 서버에서 값을 못 받는 에러가 발생하였다. 코드를 보니 컨트롤러 메서드에 어노테이션이 빠져있었다. 이때, “@RequestParam@RequestMapping 중 무엇을 써야 할지 헷갈려 정리해 보았다.”

 

✅ 1. 어노테이션이란?

소스 코드에 메타정보(설명) 를 붙여 프레임워크가 동작을 이해하도록 하는 표식.
ex) @GetMapping(이 메서드는 GET 요청 처리), @RequestParam(이 파라미터는 쿼리스트링에서 받아라) 같은 역할 지정을 함.

 

✅ 2. @RequestMapping vs @RequestParam

  • @RequestMapping
    • URL(경로) + HTTP 메서드어떤 컨트롤러 메서드가 처리할지 “매핑”
    • 실제 파라미터 값을 읽어오진 않음 (길 안내만)
    • 축약형: @GetMapping, @PostMapping, @PutMapping … (전부 @RequestMapping의 특화 버전)
  • @RequestParam
    • 요청의 쿼리스트링/폼 필드 값을 메서드 파라미터에 바인딩
    • 예: ?page=2&keyword=java → @RequestParam int page, @RequestParam String keyword
    • 옵션: required, defaultValue 등
@RequestMapping = “매핑만!” / @RequestParam = “값까지 갖고 바인딩”
즉, 각자 역할이 다르다.

 

✅ 3. 전송 형태

  • 경로/메서드 매핑은 @RequestMapping(또는 @GetMapping/@PostMapping)으로 반드시 필요
  • 값 바인딩은 @RequestParam(또는 @ModelAttribute, @RequestBody 등 전송 방식에 맞는 것)을 사용
전송 형태 컨트롤러 예시
GET 쿼리스트링 (/posts?keyword=java&page=2) @GetMapping("/test.do") + (@RequestParam String keyword)
GET 경로 변수 (/posts/123) @GetMapping("/ test.do /{id}") + (@PathVariable Long id)
POST JSON 본문 @PostMapping("/ test.do ") + (@RequestBody ReqVO vo)
여러 짧은 필드 묶음 @GetMapping("/ test.do ") + (@ModelAttribute Param param)

 

✅ 4. 체크리스트

  • URL만 매핑: @GetMapping, @PostMapping(= @RequestMapping 계열)
  • 쿼리/폼 값 받기: @RequestParam (필요 시 required=false, defaultValue)
  • 경로 일부 받기: @PathVariable
  • JSON/바디 받기: @RequestBody
  • 여러 필드 묶어 받기: @ModelAttribute