본문 바로가기

개발일지/Spring

[Spring] 스프링 입문 - 회원 관리 예제, 웹 MVC 개발

회원 웹 기능 - 홈 화면 추가

 

1. HomeController 생성

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {
    @GetMapping("/")
    public String home() {
        return "home";
    }

 

2. home.html 생성

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
  <div>
    <h1>Hello Spring</h1>
    <p>회원 기능</p>
    <p>
      <a href="/members/new">회원 가입</a>
      <a href="/members">회원 목록</a>
    </p>
  </div>
</div>

</body>
</html>

 

localhost:8080에서 위와 같은 웹 페이지가 만들어 진다

 

 

회원 웹 기능 - 등록

 

1. MemberController에 GetMapping 설정

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

members/new 라는 url에 접근 → GET 방식!
GetMapping이 매핑되면서, members/createMemberForm으로 이동 → html이 렌더링된다

 

2. createMemberForm 생성

 

templates → members 에 해당 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>

</body>
</html>

그럼, 다음과 같은 html이 만들어지고 이름을 입력받을 수 있다

 

 

name이 서버로 넘어올 때의 key 역할!


등록 버튼을 누르면?
action 태그를 보면 method가 post → PostMapping!


데이터 등록할 때 POST
데이터 조회할 때 GET

 

3. MemberForm 생성

public class MemberForm {
    private String name;

    public String getName() {
        return name;
    }

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

private name 값에 입력한 이름이 들어가게 된다

private라서 직접 접근하지는 못하고, setName을 통해서 값이 들어감!

 

4. MemberController에 PostMapping 설정

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

        System.out.println("member = " + member.getName());

        memberService.join(member);

        return "redirect:/";
    }

등록 버튼을 누르면 post 요청이 되므로,
GetMapping과 url은 같지만 PostMapping을 실행하게 된다

MemberForm의 form에서 getName으로 이름값을 꺼낸다

join을 통해 가입 성공!

 

회원 웹 기능 - 조회

1. MemberController에 GetMapping 설정

@GetMapping("/members")
    public String list(Model model) {
        List<Member> members = memberService.findMembers();
        model.addAttribute("members", members);
        return "members/memberList";
    }

키가 members이고, 모든 members의 값을 리스트 형식으로 담아둔 상태

 

2. memberList.html 생성

<!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>

</body>
</html>

th:each 에서 루프를 돌면서, 로직 실행 (thymeleaf 문법)

각각 getId, getName으로 접근해서 값을 가져오고, 출력한다

 

메모리 안에 있는 데이터이므로, 다시 실행시키면 데이터가 날아간다!

💡 이 데이터를 파일이나 데이터베이스 안에 저장하자!

 

 

 

 

 

 

@참고자료

[인프런] 김영한 - 스프링 입문 강의 (무료)