[v2] Spring 게시판 조금 알고 따라하기-3

HootJem's avatar
Aug 21, 2024
[v2] Spring 게시판 조금 알고 따라하기-3
 

회원가입 기능 구현


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"; }
notion image
나중에 보안 설정에서 /board/**, /user/** 경로에 대한 인증 및 인가 설정을 추가할 예정입니다. 따라서 인증이 필요없는 로그인이나, 회원가입 정보는 요청 주소를 다르게 설정하여 관리 할 것입니다.

2. 헤더에 링크 추가

notion image
회원가입과 로그인 기능을 쉽게 접근할 수 있도록 헤더에 링크를 추가합니다.
 

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"; }
notion image
notion image
 
스프링부트 게시판 시리즈 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

[HootJem] 개발 기록 블로그