학습 목표
- 회원가입 폼을 만들고 서버에 POST 한다
<input name="..."> 가 VO 의 어떤 필드에 들어가는지 자기 말로 설명한다
- name 이 어긋나면 어느 필드가 null 로 들어오는지 직접 본다
1. 문제 — getParameter 가 칸 수만큼 늘어난다
회원가입 폼 칸이 6 개라면 Controller 안에 request.getParameter(...) 와 m.setXxx(...) 가 12 줄. 본질은 service.signup(m) 한 줄인데 데이터를 꺼내는 코드가 컨트롤러를 채웁니다.
2. 새 도구 — 같은 이름이면 자동 바인딩
약속: 폼의 <input name="id"> 와 VO 의 private String id; 처럼 이름을 맞추면 — Spring 이 알아서 m.setId(...) 를 호출합니다.
3. 코드
<!-- signup.jsp -->
<form action="/signup" method="post">
<input name="id">
<input name="pwd" type="password">
<input name="nick">
<button>가입하기</button>
</form>
// com.smhrd.domain.Member
@Data @AllArgsConstructor @NoArgsConstructor
public class Member {
private String id;
private String pwd;
private String nick;
}
// com.smhrd.controller.SignupController
@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";
}
}
4. 흐름
브라우저 ─POST id=hong&pwd=...&nick=...─→ Spring
│
new Member() → setId(...) → setPwd(...) → setNick(...)
│
signup(m) 호출
5. 어긋나게 하면? (name="id" → name="userId")
받은 회원: Member(id=null, pwd=mypw1234, nick=홍길동)
↑
VO 에 userId 필드가 없으므로 setter 호출 X
이름이 약속을 깨면 그 필드만 null. INSERT 시 PK null 오류로 이어집니다.
6. Before / After
Before
getParameter 6 줄 + setter 6 줄. Controller 가 데이터 꺼내기 코드로 채워짐.
After
signup(Member m) 한 줄. Controller 는 본질에만 집중.
7. 정리
name 속성이 곧 「데이터 약속」
- 같은 이름이면 Spring 이 setter 자동 호출
- 이름이 어긋나면 그 필드만 null
- 다음 차시(★ v2) 에서 이 폼이 DB 에 그대로 INSERT 되는 흐름
학습 확인 체크리스트
- VO 필드명이 폼의 name 과 같은가
- Controller 매개변수에 VO 한 줄만 두고도 콘솔에 값이 찍히는가
- name 을 어긋나게 했을 때 그 필드만 null 이 되는 것을 봤는가
- 「같은 이름이 폼과 VO 를 잇는다」 를 자기 말로 말할 수 있는가