[Spring Introduction] Post method에서 받은 데이터 객체에 자동 저장?

Hyeri·2021년 2월 17일
0

Spring Introduction

목록 보기
2/4
post-thumbnail

-인프런에서 김영한강사님의 스프링 강의를 들으며 정리하는 노트-
code: github.com/hyeriful/hello-spring

스프링 이제 시작인데 어렵당,,,,
처음이라 어려워서 정리가 필요한 내용을 적어두려고 한다.

Html에서 Form 태그를 통해 데이터를 보냈을 때 연결

다음과 같은 파일 구조에서 빨간 동그라미 친 두 파일을 보자.

createMemberForm.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
    <form action="/members/new" method="post">
        <div class="form-group">
            <label for="name">이름</label>
            <input type="text" id="name" name="name" placeholder="이름을 입력하세요">
        </div>
        <button type="submit">등록</button>
    </form>
</div> <!-- /container -->
</body>
</html>

MemberController.java

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

    memberService.join(member);

    return "redirect:/";
}

MemberForm.java

public class MemberForm {
    private String name;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

html파일 input 태그에 입력한 이름이 MemberForm form 객체 name에 저장된다.

HOW??

html에서 name="name" attribute가 MemberForm의 name을 알아서 찾아서 설정해주는 것은 스프링 MVC가 제공하는 기본 기능이다!!!
스프링 MVC는 HTTP 파라미터로 넘어오는 모든 이름들을 인식해서 (name, age 등등) MemberForm 객체에 동일한 프로퍼티 이름이 있으면 찾아서 넣어준다.


여기서 궁금한 것 하나 더,
Q. MemberForm을 굳이 왜 만들까? 그냥 바로 Member에 데이터를 넣으면 안되나?
A. 가능하지만, 실무에서는 회원과 무관한 데이터들을 추가로 받아야하는 상황이 발생한다 (약관 정보 등). 그래서 중간에서 완충 작용을 할 수 있는 Form이라는 것을 주로 사용한다고 한다. 즉, 단순한 경우에는 직접 사용해도 무방하나, Member라는 것을 여러 곳에서 사용하기 때문에 여기서 Member와 관련없는 내용이 추가되면 안된다.

profile
아무거나 내가 적고 싶은거 🤟

0개의 댓글