Spring MVC에서 클라이언트(브라우저 또는 프론트엔드 앱)로부터 요청 데이터를 전달받는 방법으로 @RequestParam, @PathVariable 등이 있으며, 그 외에도 여러 방식이 존재합니다. 각각의 특징과 사용 방법을 아래에 정리해드릴게요.
✅ 1. @RequestParam
- 쿼리 파라미터 또는 form 데이터를 받아오는 데 사용
- URL: /api/members?name=홍길동&age=30
📌 예시
@GetMapping("/api/members")
public String getMember(@RequestParam String name, @RequestParam int age) {
return "이름: " + name + ", 나이: " + age;
}
- /api/members?name=홍길동&age=30 → name="홍길동", age=30으로 매핑됨
✅ 특징
- 기본적으로 필수값 (required=true)
- 기본값 지정 가능: @RequestParam(defaultValue = "20") int age
✅ 2. @PathVariable
- URI 경로 자체에 포함된 값을 받아올 때 사용
- URL: /api/members/100
📌 예시
@GetMapping("/api/members/{id}")
public String getMemberById(@PathVariable Long id) {
return "회원 ID: " + id;
}
- /api/members/100 → id=100으로 매핑됨
✅ 3. @RequestBody
- JSON, XML 등의 HTTP 요청 본문(body)에 포함된 데이터를 객체로 받을 때 사용
- 보통 POST, PUT 요청에서 사용
📌 예시 (JSON 요청)
{
"name": "홍길동",
"age": 30
}
@PostMapping("/api/members")
public String createMember(@RequestBody MemberDto dto) {
return "등록된 이름: " + dto.getName();
}
✅ 특징
- 요청 본문을 자바 객체로 자동 변환 (Jackson, Gson 등 사용)
- DTO와 함께 사용
✅ 4. @ModelAttribute
- 폼 데이터나 쿼리 파라미터 등을 자바 객체에 자동으로 바인딩
📌 예시
public class MemberDto {
private String name;
private int age;
// getter/setter
}
@PostMapping("/api/members")
public String save(@ModelAttribute MemberDto memberDto) {
return memberDto.getName();
}
- @ModelAttribute는 생략해도 동작함
✅ 특징
- @RequestParam의 확장 버전처럼 작동
- Form 기반 요청과 잘 어울림
✅ 요약 비교표
방법 주 용도 동작 방식 예시 URL 사용 시점
| @RequestParam | 쿼리 파라미터 | ?key=value | /api?name=홍길동 | 간단한 값 전달 |
| @PathVariable | 경로 변수 | /{id} | /api/100 | RESTful API 경로 |
| @RequestBody | 요청 본문 (JSON 등) | body 파싱 | POST, PUT 요청 | JSON 데이터 전송 |
| @ModelAttribute | 폼 데이터, 파라미터 자동 바인딩 | 내부적으로 @RequestParam 활용 | name=홍길동&age=30 | Form 또는 여러 파라미터 |
✅ 보너스: 파일 업로드 받을 때는?
- @RequestParam("file") MultipartFile file
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
return file.getOriginalFilename();
}
📌 결론
- 요청 데이터를 전달받는 방식은 요청 형식(쿼리, 경로, 본문)에 따라 선택합니다.
- 실무에서는 @PathVariable + @RequestBody 조합이 REST API에서 가장 많이 쓰입니다.
- Form 기반 요청에서는 @ModelAttribute도 유용합니다.