Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

프로그래밍 끄적끄적

[SpringBoot] 스프링 입문 - 회원 웹 기능 본문

백엔드/스프링

[SpringBoot] 스프링 입문 - 회원 웹 기능

soeunkk 2021. 8. 3. 17:59

* 홈화면

홈화면을 보여주기 위한 HomeController와 템플릿에 home.html을 만든다.

초기 홈화면에서는 회원가입과 회원목록으로 넘어갈 수 있는 링크를 보여준다.

 

컨트롤러가 있는지 먼저 탐색한 후에 없으면 static 파일을 찾기 때문에 index.html이 아닌 home.html이 보여지게 된다.

 

* 등록

등록 기능을 구현하기 위해 MemberController에 "/create/new"에 대한 컨트롤러인 createForm()을 만든다.

1
2
3
4
@GetMapping("/members/new")
public String createForm() {
    return "members/createMemberForm";
}
cs

 

그리고 템플릿에 member 폴더를 만들고 createMemberForm.html을 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!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>
cs

Line 9) 이름을 name="name"으로 설정한 것을 잘 기억해두자.

 

폼을 저장하기 위한 MemberForm 클래스를 만든다. 이때 필드로 form의 name 값들을 사용한다.

(getter, setter를 만들기 위한 단축키는 Ctrl+Insert 이다.)

1
2
3
4
5
6
7
8
9
10
11
public class MemberForm {
    private String name;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {  //form 안의 name=name 인 value 값이 저장됨
        this.name = name;
    }
}
cs

Line 2) 필드에 name을 선언한다.

 

폼에서 action="/member/new", post 방식으로 설정했으므로 @PostMapping("/member/new")의 컨트롤러를 만들어준다.

1
2
3
4
5
6
7
8
9
@PostMapping("/members/new")
public String create(MemberForm form) { //MemberForm 형태로 form 을 받아옴
    Member member = new Member();
    member.setName(form.getName()); //MemberForm 클래스에 저장된 name 의 value 값
 
    memberService.join(member);
 
    return"redirect:/";
}
cs

Line 2) HTML form에 작성된 값을 MemberForm으로 받아온다.

Line 4) 미리 설정한 getter로 input[name="name"]의 value 값을 가져온다.

Line 8) return "redirect:[넘겨줄 경로]"

[넘겨줄 경로]로 다시 컨트롤러를 탐색하여 클라이언트에게 전달한다.

 

* 조회

조회를 할 수 있도록 컨트롤러를 작성한다.

1
2
3
4
5
6
@GetMapping("/members")
public String list(Model model) {
    List<Member> members = memberService.findMembers(); //모든 회원 정보를 가져옴
    model.addAttribute("members", members); //html 에 members 라는 이름으로 전달
    return "members/memberList";
}
cs

Line 3) MemberService의 findMembers() 메소드를 통해 모든 회원 정보를 가져온다.

Line 4) members라는 이름으로 HTML에 전달한다.

 

템플릿의 members 폴더 안에 memberList.html을 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
    <div>
        <table>
            <thead>
            <tr>
                <th>#</th>
                <th>이름</th>
            </tr>
            </thead>
            <tbody>
            <tr th:each="member : ${members}">
                <td th:text="${member.id}"></td>
                <td th:text="${member.name}"></td>
            </tr>
            </tbody>
        </table>
    </div>
</div> <!-- /container -->
</body>
</html>
cs

Line 14) th:each="member: ${members}"

thymeleaf 문법으로, members에 있는 항목들을 하나씩 member라는 이름으로 꺼내와 루프를 돈다. 

Line 15) th:text="${member.id}"

Member 인스턴스의 id를 가져와(getId) innerText 역할을 수행한다.

Line 16) th:text="${member.name}"

Member 인스턴스의 name을 가져와(getName) innerText 역할을 수행한다.

Comments