개발/Spring

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

y_lime 2024. 11. 10. 17:36

[ 회원 기능 - 화면 추가 ]

컨트롤러 추가

 

회원 관리용

<!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> <!-- /container -->
</body>
</html>

 

컨트롤러가 정적 파일보다 우선순위가 높음

 

localhost::8080 요청이 들어오면

1. controller을 찾고 없으면 !

2. static 파일을 찾음

 


[ 회원 기능 - 등록 ]

1. 회원 등록 개발

회원 등록 컨트롤러

@Controller
public class MemberController {

    private MemberService memberService;

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

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

 

회원 등록 HTML

members/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>

 

 

2. 회원 등록 컨트롤러

 등록 화면에서 데이터를 전달 받을  객체

: controller 패키지에 MemberForm 클래스 생성 후, getter & setter을 만들어준다 꼭 !

setName을 통해서 name에 사용자가 등록한 이름을 넣어준다.

 

 

회원 컨트롤러에서 회원을 실제 등록하는 기능

: MemberController클래스

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

이때 PostMapping은 사용자가 이름을 "등록"하며 어떤 데이터를 "Post"한다고 생각하면 된다.

회원 등록  HTML을 확인해보면 form 태그에서 method가 Post임을 확인 할 수 있다.

→ URL은 동일하지만 form태그의 method에 따라 선택되는 controller에서 선택되는 메서드가 다르다

(GetMapping은 주로 조회할 때 사용 !)

 


[ 회원  기능 - 조회]

회원 컨트롤러에서 조회 기능

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

 

  • findMembers() : 모든 멤버를 다 끌어온다

 

회원 리스트 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> <!-- /container -->
</body>
</html>

 

이렇게 되어 있는것을 확인할 수 있다.

🏷️ ${members} : 모델 안에 있는 값을 꺼낸다.

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

 

 

여기서 model.addAttribute로 members라는 이름으로 이 안에 List로 모든 회원을 다 조회해서 담아놨다.

루프를 돌며 하나씩 member를 가져와 id와 name을 보여준다.

 

해당 데이터들은 메모리안에 있기 때문에(연습용) java를 내려버리면 회원 데이터가 다 사라진다 ! !

(실무에서는 파일이나 데이터베이스에 저장)