
멤버 관리 예제 – 웹 MVC 개발
- 회원 웹 기능 – 홈 화면 추가
- 회원을 위한 웹 기능 – 등록
- 회원을 위한 웹 기능 – 검색
1. 멤버스 웹 기능 – 홈 화면 추가
컨트롤러/HomeController.java
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/") // localhost:8080/
public String home() {
return "home"; // home.html 리턴
}
}
템플릿/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="http://devje.members/new">회원 가입</a>
<a href="http://devje.members">회원 목록</a>
</p>
</div> <!-- /container -->
</div>
</body>
</html>

2. 회원 웹 기능 – 등록
컨트롤러/MemberController.java
package hello.hellospring.controller;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MemberController {
private final MemberService memberService;
/* 생성자 */
@Autowired // 스프링이 컨테이너에 있는 Memberservice를 가져다가 연결을 시켜준다. (Dependency Injection)
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
💡 추가
@GetMapping("http://devje.members/new")
public String createForm() {
return "members/createMemberForm";
}
}
템플릿/구성원/createMemberForm.html
<!DOCTYPE html>
<html xmlns:th="http://thymeleaf.org">
<body>
<div class="container">
<form action="http://devje.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>

컨트롤러/MemberForm.java
package hello.hellospring.controller;
public class MemberForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
컨트롤러/MemberController.java
package hello.hellospring.controller;
import hello.hellospring.domain.Member;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class MemberController {
private final MemberService memberService;
/* 생성자 */
@Autowired // 스프링이 컨테이너에 있는 Memberservice를 가져다가 연결을 시켜준다. (Dependency Injection)
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
@GetMapping("http://devje.members/new")
public String createForm() {
return "members/createMemberForm";
}
💡 추가
@PostMapping("http://devje.members/new")
public String create(MemberForm form) {
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/";
}
}
홈으로 이동하려면 “/”로 리디렉션합니다.
3. 회원 웹 기능 – 검색
컨트롤러/MemberController.java
package hello.hellospring.controller;
import hello.hellospring.domain.Member;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import java.util.List;
@Controller
public class MemberController {
private final MemberService memberService;
/* 생성자 */
@Autowired // 스프링이 컨테이너에 있는 Memberservice를 가져다가 연결을 시켜준다. (Dependency Injection)
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
@GetMapping("http://devje.members/new") // 기본적으로 url 치는 건 GetMapping (조회 등)
public String createForm() {
return "members/createMemberForm";
}
@PostMapping("http://devje.members/new") // PostMapping은 데이터를 폼 같은 데에 넣어서 전달할 때 사용 (데이터 등록)
public String create(MemberForm form) {
Member member = new Member();
member.setName(form.getName());
System.out.println("member = " + member.getName());
memberService.join(member);
return "redirect:/";
}
💡 추가
@GetMapping("/members")
public String list(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members); // model에 데이터를 담을 때 addAttribute() 메소드를 사용함. 담아서 화면으로 넘길 것.
return "members/memberList";
}
}
templates/members/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>
<!-- ${members} 모델 안에 있는 값을 꺼내는 것 -->
<!-- th:each 라고 하면 루프를 도는 것 -->
<tr th:each="member: ${members}">
<td th:text="${member.id}"></td>
<td th:text="${member.name}"></td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>

(Spring 소개 – 코드로 학습하기 위한 Spring Boot, Web MVC, DB 접근 기술) 강의노트
