스프링 데이터 바인딩 (HTML Form 데이터 → 자바 객체) 정리

CJI0524·2025년 7월 14일

Spring Boot

목록 보기
15/21
post-thumbnail

이번 글에서는 HTML 폼(Form)에 입력한 데이터가 어떻게 자바 객체에 자동으로 쏙 들어가는지, 그 원리에 대해 간략히 정리해 보았다.

1. HTML <Form>과 <Input>

✍️ 작성

<form action="/members/new" method="post">
    <div class="form-group">
        <label for="name">이름</label>
        <input type="text" id="name" name="username" placeholder="이름을 입력하세요">
    </div>
    <button type="submit">등록</button>
</form>

여기서 가장 중요한 속성은 바로 <input> 태그의 name 속성이다. 사용자가 폼을 제출하면, 브라우저는 name 속성값 ("username")을 Key로, 사용자가 입력한 값을 Value로 묶어서 서버에 전송한다.

만약 사용자가 "홍길동"이라고 입력했다면, 서버에는 username=홍길동 이라는 데이터가 전송되는 것이다.


2. 스프링의 자동 매핑

서버 (스프링)는 이 요청을 받고, @PostMapping이 붙은 컨트롤러 메서드를 찾아낸다.

✍️ 작성

@PostMapping("/members/new")
public String create(MemberForm form) {
   Member member = new Member();
   member.setUserName(form.getUserName());

   memberService.join(member);

   return "redirect:/";
   
    }
}

스프링은 create 메서드의 파라미터가 MemberForm 객체인 것을 보고, 데이터 바인딩을 시작한다.

  1. 객체 생성 : 먼저, MemberForm의 기본 생성자로 텅 빈 객체를 하나 생성한다.

  2. 데이터 탐색 : 요청으로 들어온 데이터 묶음 (username=홍길동)을 확인한다.

  3. 세터(Setter) 호출 : username이라는 Key를 보고, MemberForm 클래스에서 setUsername()이라는 이름의 세터(Setter) 메서드를 찾아낸다. 그리고 그 메서드를 호출하면서 값 (Value)인 "홍길동"을 파라미터로 전달한다.


✍️ 작성

public class MemberForm {
    // HTML의 name="username"과 이름이 일치해야 합니다!
    private String username;

    public String getUsername() {
        return username;
    }

    // 바로 이 메서드가 스프링에 의해 자동으로 호출됩니다.
    public void setUsername(String username) {
        this.username = username;
    }
}

이 과정을 통해 컨트롤러의 form 파라미터는 사용자가 전송한 데이터가 모두 채워진 완전한 객체가 된다. 이때 HTML의 name 속성값과 자바 객체의 필드 이름은 동일해야 한다.

만약 다르다면 해당 데이터는 그냥 무시되며 스프링이 짝을 맞는 필드를 찾지 못하므로, 그 값은 객체에 채워지지 않고 버려지게 된다. 이로 인해 NullPointerException 등 의도치 않은 오류가 발생할 수 있다.


3. 참고 자료

김영한 스프링

profile
개발돌이

0개의 댓글