[스프링부트] 26. 스프링부트 뱅크 v1 회원가입

백하림's avatar
Mar 24, 2025
[스프링부트] 26. 스프링부트 뱅크 v1 회원가입

UserRequest

package com.metacoding.bankv1.user; import lombok.Data; public class UserRequest { @Data public static class JoinDTO { private String username; private String password; private String fullname; } @Data public static class loginDTO { private String username; private String password; } }

UserRepository

package com.metacoding.bankv1.user; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @RequiredArgsConstructor @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.getFullname()); } }
Share article

harimmon