HTTP 데이터를 객체로 처리하는 방법
Spring MVC에서는 HTTP 요청으로 전달된 데이터를 객체 단위로 매핑하여 처리할 수 있다. 이를 통해 파라미터 개수가 많아져도 메서드 시그니처를 간결하게 유지할 수 있고, 코드의 가독성과 유지보수성이 크게 향상된다.
1. @ModelAttribute 개념
@ModelAttribute는 Query String 방식 또는 application/x-www-form-urlencoded 형식으로 전달된 데이터를 객체에 자동으로 매핑해준다.
즉, HTTP 요청 파라미터 이름과 객체의 필드명이 일치하면 Spring이 내부적으로 setter를 호출하여 값을 주입한다.
2. POST + form 데이터 → 객체 매핑
// POST http://localhost:8080/hello/request/form/model
// Content-Type: application/x-www-form-urlencoded
// Body: name=Robbie&age=95
@PostMapping("/form/model")
@ResponseBody
public String helloRequestBodyForm(@ModelAttribute Star star) {
return String.format(
"Hello, @ModelAttribute.<br> (name = %s, age = %d)",
star.getName(), star.getAge()
);
}
- form 태그를 통해 전송된 데이터는 Query String 형태로 전달된다
- Spring이 요청 파라미터를 분석해 객체(Star)에 자동 매핑한다
주의 사항:
- 클라이언트의 파라미터 이름과 서버 객체의 필드명이 반드시 동일해야 한다
- 이름이 다르면 값은 매핑되지 않고 null이 된다
3. GET + Query String → 객체 매핑
// GET http://localhost:8080/hello/request/form/param/model?name=Robbie&age=95
@GetMapping("/form/param/model")
@ResponseBody
public String helloRequestParam(@ModelAttribute Star star) {
return String.format(
"Hello, @ModelAttribute.<br> (name = %s, age = %d)",
star.getName(), star.getAge()
);
}
- GET 요청에서도 동일하게 Query String을 객체로 매핑할 수 있다
- 파라미터가 많을수록 @ModelAttribute 방식이 훨씬 효율적이다
4. @ModelAttribute 생략 가능 규칙
@ModelAttribute는 생략 가능하다.
Spring은 파라미터 타입을 기준으로 다음과 같이 판단한다.
- 기본 타입 또는 래퍼 클래스 (String, int, Integer 등)
→ @RequestParam 으로 인식 - 개발자가 직접 만든 객체 타입
→ @ModelAttribute 로 인식
이 규칙 덕분에 객체 파라미터에는 애너테이션을 생략해도 정상 동작한다.
5. JSON 데이터 → 객체 매핑 (@RequestBody)
// POST http://localhost:8080/hello/request/form/json
// Content-Type: application/json
// Body: {"name":"Robbie","age":95}
@PostMapping("/form/json")
@ResponseBody
public String helloPostRequestJson(@RequestBody Star star) {
return String.format(
"Hello, @RequestBody.<br> (name = %s, age = %d)",
star.getName(), star.getAge()
);
}
- HTTP Body에 JSON 형태로 전달된 데이터를 객체로 변환한다
- 내부적으로 Jackson 라이브러리를 사용해 JSON → Object 역직렬화를 수행한다
필수 조건:
- 기본 생성자 존재
- getter 또는 setter 존재
- JSON key와 객체 필드명이 정확히 일치해야 한다
6. @ModelAttribute vs @RequestBody 차이
구분@ModelAttribute@RequestBody
| 데이터 위치 | Query String / form body | HTTP Body |
| Content-Type | application/x-www-form-urlencoded | application/json |
| 변환 방식 | 파라미터 → 객체 | JSON → 객체 (Jackson) |
| 주 사용처 | form 요청, 단순 입력 | REST API, 클라이언트-서버 분리 환경 |
7. 정리
- form 기반 요청이나 Query String이 많은 경우 @ModelAttribute가 적합하다
- JSON 기반 API에서는 @RequestBody가 필수적이다
- 파라미터 수가 많아질수록 객체 단위로 처리하는 것이 유지보수에 유리하다
- 클라이언트와 서버 간 필드명 일치는 가장 중요한 체크 포인트다
이 구조를 이해하면 Spring MVC에서의 요청 데이터 처리는 거의 끝났다고 볼 수 있다.
'BackEnd > 내일배움캠프' 카테고리의 다른 글
| 13-1. Create, Read 구현하기 (0) | 2026.02.10 |
|---|---|
| 13. 메모장 프로젝트 설계 (0) | 2026.02.10 |
| 11. Path Variable과 Request Param (0) | 2026.02.10 |
| 10. Jackson이란 무엇일까? (0) | 2026.02.10 |
| 9. 데이터를 Client에 반환하는 방법 (0) | 2026.02.10 |