12. HTTP 데이터를 객체로 처리하는 방법

2026. 2. 10. 23:40·BackEnd/내일배움캠프

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
'BackEnd/내일배움캠프' 카테고리의 다른 글
  • 13-1. Create, Read 구현하기
  • 13. 메모장 프로젝트 설계
  • 11. Path Variable과 Request Param
  • 10. Jackson이란 무엇일까?
JK-LEE98
JK-LEE98
백엔드 개발자
  • JK-LEE98
    JK-LEE98
    JK-LEE98
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 나의 지식 공유 (4)
      • SQL (4)
      • PS (10)
      • BackEnd (32)
        • Java (3)
        • Spring (4)
        • 내일배움캠프 (20)
        • 프로그래머스 데브코스 (5)
      • 건강한 나 되기🍀 (10)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
JK-LEE98
12. HTTP 데이터를 객체로 처리하는 방법
상단으로

티스토리툴바