오늘은 몰랐으면 내일은 알면 된다

[Spring 입문] 12. 회원 웹 기능 - 등록 본문

Java/Spring

[Spring 입문] 12. 회원 웹 기능 - 등록

마스터피쓰 2022. 9. 26. 15:23

등록 화면 및 기능을 만들어보도록 하자.

MemberController에 다음과 같이 메서드를 만든다.

 

@Controller
public class MemberController {
    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }

    @GetMapping("/members/new")
    public String createForm() {
        return "members/createMemberForm";
    }
}

 

그리고 template 아래에 members 폴더를 만들고, 반환되는 String과 이름이 같은 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와 같은 위치에 MemberForm을 만들어준다. alt+insert로 getter setter도 만들어준다.

 

public class MemberForm {
    private String name;

    public String getName() {
        return name;
    }

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

 

다음 다시 돌아와서 MemberController에 다음과 같이 PostMapping 메서드를 만들어준다. 현재는 저장 메서드가 돌면 메인화면으로 redirect되게 해두었다.

 

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

        return "redirect:/";
    }

 

원리는 이렇다. input tag 의 name="name" 에서 값이 입력되어 서버로 넘어오게 되면, MemberForm 클래스의 Setter를 통해서 MemberForm이 가지고 있는 private String name 이 세팅된다.

그리고 컨트롤러에서 Member 객체에 해당 값을 세팅하고 join 메서드를 호출해서 이름을 저장하게 되는 것이다.