JSP 폼이 서버 객체로 자동 바인딩되는 원리
Member.id, pwd, nick.회원가입 폼 칸이 6 개라면 — Controller 안에 request.getParameter(...) 가 6 줄, 그 다음에 m.setXxx(...) 가 또 6 줄. 본질(서비스 호출)은 한 줄인데 데이터를 꺼내는 코드가 컨트롤러를 채웁니다. 칸이 늘면 그만큼 더러워집니다.
Spring Controller 의 매개변수에 VO 클래스를 두면 — 폼 데이터의 key (즉 name) 를 보고, VO 의 같은 이름 필드에 setter 로 값을 채워줍니다. 이름만 같으면 줄 수와 상관없이 자동입니다.
<input name="id"> → m.setId(...)
<input name="pwd"> → m.setPwd(...)
<input name="nick"> → m.setNick(...)
<form action="/signup" method="post">
<input name="id" placeholder="아이디">
<input name="pwd" type="password" placeholder="비밀번호">
<input name="nick" placeholder="닉네임 (선택)">
<button>가입하기</button>
</form>
package com.smhrd.domain;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@Data @AllArgsConstructor @NoArgsConstructor
public class Member {
private String id;
private String pwd;
private String nick;
}
package com.smhrd.controller;
import org.springframework.stereotype.Controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import com.smhrd.domain.Member;
import com.smhrd.service.MemberService;
@Controller
public class SignupController {
@Autowired private MemberService memberService;
@PostMapping("/signup")
public String signup(Member m) { // ← 자동 바인딩
System.out.println("받은 회원: " + m);
memberService.signup(m);
return "redirect:/login";
}
}
① 사용자가 폼 작성: id=hong pwd=mypw1234 nick=홍길동
② 브라우저가 POST /signup 으로 위 key=value 들을 보냄
③ Spring 이 매개변수의 타입을 본다 → Member
④ Spring 이 new Member() 한 다음:
m.setId("hong")
m.setPwd("mypw1234")
m.setNick("홍길동")
를 차례로 호출
⑤ 우리가 작성한 signup(m) 메서드 호출
폼만 살짝 바꿔봅니다 — name="id" 를 name="userId" 로:
<input name="userId"> ← VO 에 userId 필드는 없음
<input name="pwd">
<input name="nick">
콘솔 출력은:
받은 회원: Member(id=null, pwd=mypw1234, nick=홍길동)
↑
아이디만 빠진다
이름이 안 맞으면 setter 가 호출되지 않으므로 그 필드만 null 입니다. DB 에 INSERT 하면 PK null 오류가 납니다.
같은 데이터에 같은 이름을 쓰면, 폼과 VO 가 자동으로 합쳐진다.
이름이 곧 약속. 이름이 곧 코드. 칸이 100 개여도 같은 원리.
getParameter 6 줄 + setter 6 줄. Controller 가 데이터 꺼내기 코드로 가득 참.
signup(Member m) 한 줄. 컨트롤러는 본질(서비스 호출) 에만 집중.