<스프링을 이용한 간단한 회원가입 서비스 만들기>
본 포스팅은 스프링을 이용한 간단한 예제 프로젝트입니다.
지금까지 기능을 만들었다면 이제 이 기능을 웹 페이지 뷰와 연결시켜 보고자 한다.
(혹시 이전 포스팅에서 작성해두었던 기능 개발에 대한 글이 궁금하다면 이 글 최하단에 있는 링크를 참고하기를 바란다.)
1. 홈화면 만들기
먼저 홈 컨트롤러에 다음과 같이 작성한다.
1-1. HomeController
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}
이렇게 하면 도메인 주소를 쳤을 때 프로젝트 경로 내에
src/main/resources/templates/home.html
파일을 찾아서 해당 html파일을 띄워주게 된다.
(반환되는 String값은 templates 하위에서 찾는 파일 명이라고 보면 된다. .html은 스프링이 기본적으로 붙여주므로 생략한다)
그러면 이제 해당 경로에 home.html 파일을 생성해보자.
1-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="/users/new">회원 가입</a>
<a href="/users">회원 목록</a>
</p>
</div>
</div> <!-- /container -->
특별한 내용은 없고 홈화면 안에 링크 두개를 연결해 놓았다.
한개는 회원가입으로 연결되는 링크이고 나머지 하나는 회원 목록을 조회할 수 있는 창으로 연결되는 링크이다.
해당 url들을 주의깊게 봐두자.
여기까지 하고 스프링을 띄워보면 아래와 같이 무사히 뜬다.
2. 회원가입 창 만들기
HomeController에 아래 코드를 추가한다.
2-1. HomeController
@GetMapping("/users/new")
public String createForm() {
return "users/createUserForm";
}
@PostMapping("/users/new")
public String create(UserForm userForm) {
UserVO userVO = new UserVO();
userVO.setName(userForm.getName());
userService.join(userVO);
List<UserVO> allUsers = userService.findAllUsers();
return "redirect:/";
}
먼저 @GetMapping 부분에서는 해당 url(/users/new)를 호출했을 때 띄워줄 뷰를 보여준다.
그리고 해당 뷰에서 회원가입 양식을 모두 적었을 때
데이터를 보내서 저장해줄 url을 같은 url이지만 post메서드인 @PostMapping으로 지정해서 세팅해준다.
create 메서드에서 회원정보를 저장하는 로직을 다루며
회원가입이 끝나면 다시 메인화면으로 리다이렉트 하도록 한다.
그리고 뷰에서 적은 유저 데이터가 create 메서드의 매개변수로 설정해 둔 UserForm이라는 클래스 내 변수 명에 맞춰서 세팅이 되는데 왜 이렇게 되는지에 관한 내용은 아래에서 다루도록 하겠다.
2-2. createUserForm.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<form action="/users/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>
회원가입에 쓰이는 html 뷰 코드이다.
여기서 주의깊게 볼 부분은 이름 입력하는 input 필드에 name을 "name" 으로 지정해두었다는 것이다.
2-3. UserForm
public class UserForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
createUserForm에서 보내온 데이터를 매핑해줄 객체이다.
중요한 것은 2-2 에서 input필드에서 적은 name을 String name에 매핑할 수 있게 변수명을 동일하게 적어야 한다는 것이다.
여기까지 코드를 작성했다면 홈화면에서 회원가입을 누르면 아래와 같이 뜬다.
유저 정보를 누르고 등록하면 메인화면으로 리다이렉트 되는 것을 볼 수 있다.
3. 회원 조회기능 만들기
조회 기능을 만들기 위해 아래 코드를 HomeController에 추가한다.
3-1. HomeController
@GetMapping("/users")
public String list(Model model) {
List<UserVO> users = userService.findAllUsers();
model.addAttribute("users", users);
return "users/userList";
}
list 메서드에 Model을 받아와서 모든 유저를 조회해온 다음,
모델에 데이터를 넣어서 뷰를 호출해 준다.
이렇게 하면 모델에 넣어둔 데이터를 템플릿 엔진이 해석해서 뷰에서 사용할 수 있게 된다.
참고로 여기서는 템플릿 엔진으로 thymeleaf를 사용하고 있다
(무슨말인지 모르겠다면 일단 넘기고 보자. Model은 데이터를 컨트롤러에서 html쪽으로 연결해주는 녀석이라고 보면 된다)
3-2. userList.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="user : ${users}">
<td th:text="${user.id}"></td>
<td th:text="${user.name}"></td>
</tr>
</tbody>
</table>
</div>
</div> <!-- /container -->
</body>
</html>
여기서는 tr태그 쪽을 유심히 볼 필요가 있다.
컨트롤러에서 Model에 users 라는 이름으로 데이터를 추가하였는데
이 데이터들을 for문처럼 반복해서 하나씩 출력하는 thymeleaf의 문법이다.
만약 추가로 thymeleaf 문법이 궁금하다면 아래 글을 참고하자.
Thymeleaf의 기본 문법 정리(SpringBoot)
여기까지 완료하고 url을 호출해보면 아래와 같이 저장해두었던 데이터가 잘 뜬다.
이렇게 저장한 데이터들은 메모리 기반으로 저장되므로 스프링을 다시띄우면 데이터가 날아가게 된다.
이제 다음 포스팅부터는 db에 저장하는 로직을 다룰 것이다.
* 이전 글 링크
1) 프로젝트 설계 예제 및 회원 도메인과 리포지토리 만들기
Reference
이 포스팅은 아래의 강좌를 참고하여 만들어졌습니다.
- 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
'Backend > 게시판만들기' 카테고리의 다른 글
[Spring실습] 5분만에 알아보는 스프링 빈을 등록하는 두가지 방법-4 (0) | 2020.11.30 |
---|---|
[Spring실습] 5분만에 알아보는 회원가입 서비스 만들기-3 (0) | 2020.11.30 |
[Spring실습] 5분만에 알아보는 테스트 케이스 작성해보기-2 (0) | 2020.11.29 |
[Spring실습] 5분만에 알아보는 프로젝트 설계 예제 및 회원 도메인과 리포지토리 만들기-1 (0) | 2020.11.24 |
[SpringBoot]게시판 로그인 기능 제작 및 예제(Form데이터 Controller에서 받아서 처리하기) (2) | 2020.08.16 |