[Spring Boot] 7. Spring Boot Project (Bank v1)_3-1.Fuctions Design_Join

김미숙's avatar
Mar 27, 2025
[Spring Boot] 7. Spring Boot Project (Bank v1)_3-1.Fuctions Design_Join

header

<!DOCTYPE html> <html lang="en"> <head> <title>Bank</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script> </head> <body> <nav class="navbar navbar-expand-sm bg-dark navbar-dark"> <div class="container-fluid"> <a class="navbar-brand" href="/">Home</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#collapsibleNavbar"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="collapsibleNavbar"> <ul class="navbar-nav"> <li class="nav-item"> <a class="nav-link" href="/join-form">회원가입</a> </li> <li class="nav-item"> <a class="nav-link" href="/login-form">로그인</a> </li> <li class="nav-item"> <a class="nav-link" href="#">계좌목록</a> </li> <li class="nav-item"> <a class="nav-link" href="#">계좌생성</a> </li> <li class="nav-item"> <a class="nav-link" href="#">이체하기</a> </li> </ul> </div> </div> </nav>

UserRequest

package com.metacoding.bankv1.user; import lombok.Data; public class UserRequest { @Data //getter,setter,toString public static class JoinDTO { private String username; private String password; private String fullname; } @Data //getter,setter,toString public static class LoginDTO { private String username; private String password; } }

UserController

package com.metacoding.bankv1.user; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @RequiredArgsConstructor @Controller public class UserController { private final UserService userService; @GetMapping("/login-form") public String loginForm() { return "user/login-form"; } @GetMapping("/join-form") public String joinForm() { return "/user/join-form"; } @PostMapping("/join") public String join(UserRequest.JoinDTO joinDTO) { userService.회원가입(joinDTO); return "redirect:/login-form"; } }

UserRepository

package com.metacoding.bankv1.user; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @RequiredArgsConstructor // DI @Repository public class UserRepository { private final EntityManager em; public User findByUsername(String username) { Query query = em.createNativeQuery("select * from user_tb where username = ?", User.class); query.setParameter(1, username); try { return (User) query.getSingleResult(); } catch (Exception e) { return null; } } public void save(String username, String password, String fullname) { Query query = em.createNativeQuery("insert into user_tb(username,password,fullname,created_at) values(?,?,?,now())"); query.setParameter(1, username); query.setParameter(2, password); query.setParameter(3, fullname); query.executeUpdate(); } }

UserService

‼️
오류는 터트리기
package com.metacoding.bankv1.user; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @RequiredArgsConstructor @Service public class UserService { private final UserRepository userRepository; @Transactional public void 회원가입(UserRequest.JoinDTO joinDTO) { // 1. 동일 username 있는지 검사 (조회) User user = userRepository.findByUsername(joinDTO.getUsername()); // 2. 있으면 exception 터트리기 if (user != null) throw new RuntimeException("동일한 username이 존재합니다."); // 3. 없으면 회원가입하기 userRepository.save(joinDTO.getUsername(), joinDTO.getPassword(), joinDTO.getUsername()); } }

AccountController

package com.metacoding.bankv1.account; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class AccountController { @GetMapping("/") public String home() { return "home"; } }
 

join-form

❓이미 존재하는 username ‘ssar’을 입력하면?
notion image
⚠동일한 username이 존재해서 오류 발생
notion image
 
❓ 존재하지 않는 username ‘love’을 입력하면?
notion image
❗정상적으로 회원가입 되서 login page로 이동한다
notion image
❗h2-console에도 insert 확인 가능
 
notion image
Share article

parangdajavous