회원가입 기능 구현
1. 컨트롤러 설정
회원가입 및 로그인 폼을 위한 컨트롤러 코드 입니다.
@Controller
public class UserController {
@GetMapping("/join-form")
public String joinForm() {
return "user/join-form";
}
@GetMapping("/login-form")
public String loginForm() {
return "user/login-form";
}

나중에 보안 설정에서
/board/**
, /user/**
경로에 대한 인증 및 인가 설정을 추가할 예정입니다.
따라서 인증이 필요없는 로그인이나, 회원가입 정보는 요청 주소를 다르게 설정하여 관리 할 것입니다.
2. 헤더에 링크 추가

회원가입과 로그인 기능을 쉽게 접근할 수 있도록 헤더에 링크를 추가합니다.
3. 저장 기능 구현
new User
객체는 비영속 객체이며, DB에서 조회하여 생성된 User
객체는 영속 객체입니다. 영속 객체는 Hibernate의 Persistence Context 내부에 존재하게 됩니다.빈 객체를 생성한 후, PK를 제외한 값을 설정하여 Hibernate에 저장하면, 이 객체는 DB로 전송되어 Insert가 실행됩니다.
@Transactional
public void save(String username, String password, String email) {
Timestamp now = Timestamp.valueOf(LocalDateTime.now());
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
user.setCreatedAt(now);
em.persist(user);
}
위 코드에서
@Transactional
어노테이션을 통해 해당 메서드가 트랜잭션 내에서 실행되도록 설정했습니다. em.persist(user)
를 통해 새로운 User
객체가 영속화되어 DB에 저장됩니다.
또는, @CreationTimestamp
를 활용하여 자동으로 생성일자를 설정할 수도 있습니다// User(entity)
@CreationTimestamp
private Timestamp createdAt;
Hibernate는
@CreationTimestamp
가 적용된 필드에 대해 값이 null
일 경우 자동으로 현재 시간 값을 설정하여 DB에 저장합니다.
4. 테스트
@DataJpaTest // h2, em
@Import(UserRepository.class) // br
class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void save_test() {
String username = "haha";
String password = "1234";
String email = "haha@nate.com";
userRepository.save(username, password, email);
}
}
5. 컨트롤러 작성
컨트롤러에서 회원가입 요청을 처리하는 코드입니다.
@Autowired
UserRepository userRepository;
@PostMapping("/join")
public String join(@RequestParam("username") String username, @RequestParam("password") String password, @RequestParam("email") String email) {
userRepository.save(username, password, email);
return "user/join-form";
}


스프링부트 게시판 시리즈 v2 -1. https://inblog.ai/hj/27190 (User 테이블 생성 및 쿼리 수정) -2. https://inblog.ai/hj/27193 (User, Board 테이블 조인 과 JPQL) -3. https://inblog.ai/hj/27224 (회원 가입) -4. https://inblog.ai/hj/27225 DTO 를 통한 리팩토링 -5. https://inblog.ai/hj/27310 로그인, 로그아웃 -6. https://inblog.ai/hj/27316 서비스 레이어 추가 및 DTO 활용 -7. https://inblog.ai/hj/27430 예외처리 핸들러 설정과 User 서비스 리팩토링 -8. https://inblog.ai/hj/27431 Board 기능 리팩토링 -9. https://inblog.ai/hj/27560 게시글 수정, 더티체킹(flush) -10. https://inblog.ai/hj/27561 인터셉터, AOP 사용 / 마무리
Share article