728x90
Spring MVC에서는 클라이언트가 보낸 데이터를 컨트롤러에서 받을 때 여러 가지 방법을 제공합니다. 그중에서도 @RequestParam과 @ModelAttribute는 자주 사용되는 어노테이션입니다. 이번 글에서는 두 어노테이션의 차이점과 사용법을 자세히 살펴보겠습니다.
1. @RequestParam
개념
@RequestParam은 HTTP 요청의 파라미터를 개별적으로 받아올 때 사용하는 어노테이션입니다. 주로 GET 또는 POST 요청에서 쿼리 파라미터나 폼 데이터를 받을 때 사용됩니다.
사용법
@RestController
@RequestMapping("/api")
public class ExampleController {
@GetMapping("/greet")
public String greet(@RequestParam String name) {
return "Hello, " + name;
}
}
위 코드에서 /api/greet?name=John으로 요청하면 "Hello, John"이 반환됩니다.
옵션 설정
- required = true (기본값) : 해당 파라미터가 필수
- required = false : 해당 파라미터가 없어도 에러 발생하지 않음
- defaultValue : 파라미터가 없을 경우 기본값 지정 가능
@GetMapping("/welcome")
public String welcome(@RequestParam(name = "user", defaultValue = "Guest") String user) {
return "Welcome, " + user;
}
/api/welcome → Welcome, Guest
/api/welcome?user=John → Welcome, John
2. @ModelAttribute
개념
@ModelAttribute는 요청 파라미터를 객체로 매핑할 때 사용됩니다. 주로 POST 요청에서 폼 데이터를 받아와서 객체로 변환할 때 유용합니다.
사용법
@Controller
@RequestMapping("/user")
public class UserController {
@PostMapping("/create")
public String createUser(@ModelAttribute User user) {
System.out.println(user);
return "userCreated";
}
}
public class User {
private String name;
private int age;
// Getters and Setters
}
동작 방식
- 클라이언트가 name=John&age=25와 같은 데이터를 전송합니다.
- Spring이 자동으로 User 객체의 필드에 매핑합니다.
- 컨트롤러 메서드에서 User 객체를 사용할 수 있습니다.
특징
- @RequestParam과 다르게 객체 단위로 값을 바인딩함
- HTML 폼에서 입력받은 데이터를 객체로 변환할 때 유용함
- GET 요청에서도 사용할 수 있으며, 모델 속성으로 자동 추가됨
@GetMapping("/form")
public String showForm(Model model) {
model.addAttribute("user", new User());
return "userForm";
}
3. @RequestParam vs @ModelAttribute
@RequestParam | @ModelAttribute | |
데이터 처리 방식 | 개별 변수에 바인딩 | 객체 단위로 바인딩 |
주로 사용하는 HTTP 요청 | GET, POST | GET, POST |
필드가 많을 때 | 비효율적 | 효율적 |
DTO/VO 활용 | 직접 매핑 필요 | 자동 매핑 지원 |
4. 정리
- 간단한 파라미터 처리 → @RequestParam
- 객체로 바인딩하고 싶을 때 → @ModelAttribute
728x90
'JSP' 카테고리의 다른 글
EL과 JSTL 완벽 가이드 (0) | 2025.02.26 |
---|---|
스크립틀릿(Scriptlet) (0) | 2025.02.20 |
JSP에서 에러 페이지 설정하는 두 가지 방법 (0) | 2025.02.18 |
서버, 웹서버, 웹 컨테이너, WAS, HTTP 프로토콜, 포트 개념 정리 (0) | 2025.02.18 |
JSP에서 변수 선언하는 방법과 차이점 (0) | 2025.02.13 |