이 게시글은 유튜브 개발자 유미님의 무료강의 스프링 시큐리티 JWT 6 : 회원가입 로직 구현 을 수강하며 공부한 내용을 담고있습니다.
이 게시글은 공부한 내용을 제가 보기 편하게 정리한 내용이므로 정확한 정보는 위 영상을 시청해주세요.
이 게시글은 기본적인 Spring 기본 실습을 해봤다는 가정하에 기초적인 설명은 생략되어 있습니다.
또한 실습을 따라가며 기본적인 JWT 사용방법을 학습하기에 상세한 원리와 설명은 없는 경우가 있습니다.
개요
Client 에서 보내는 회원정보를 담을 DTO, 그 회원정보를 받는 Controller, 회원가입 로직을 수행하는 Service 를 작성한다.
DTO
dto 패키지를 만들고 JoinDTO 클래스를 생성하자.
join 은 회원가입이란 의미로 보면된다.
1
2
3
4
5
6
@Getter
@Setter
public class JoinDTO {
private String username;
private String password;
}
Controller
/join 을 받을 수 있게 Controller 를 작성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Controller
@ResponseBody
public class joinController {
private final JoinService joinService;
public joinController(JoinService joinService) {
this.joinService = joinService;
}
@PostMapping("/join")
public String joinProcess(JoinDTO joinDTO) {
System.out.println(joinDTO.getUsername()); // 회원가입하는 username 콘솔에 출력
joinService.joinProcess(joinDTO);
return "ok"; // 회원가입 성공이 아니라 그냥 joinProcess 가 끝났다는 의미로 작성
}
}
지금은 JWT 동작원리를 공부하는거니 return 값은 신경쓰지 말고 편하게 작성한다.
회원가입 로직을 수행할 JoinService 에게 joinDTO 를 넘긴다.
Repository
1
2
3
public interface UserRepository extends JpaRepository<UserEntity, Integer> {
Boolean existsByUsername(String username);
}
UserRepository 에 메서드를 한 줄 추가하자.
특정 문법에 맞춰 작성하면 JPA 에서 쿼리문을 알아서 만들어 수행해준다.
위 코드는 UserEntity 에서 username 이 존재하는지 조회하는 쿼리를 수행해준다.
Service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@Service
public class JoinService {
UserRepository userRepository;
BCryptPasswordEncoder bCryptPasswordEncoder;
public JoinService(UserRepository userRepository, BCryptPasswordEncoder bCryptPasswordEncoder) {
this.userRepository = userRepository;
this.bCryptPasswordEncoder = bCryptPasswordEncoder;
}
public void joinProcess(JoinDTO joinDTO) {
Boolean isExist = userRepository.existsByUsername(joinDTO.getUsername());
if(isExist) {
// 동일한 username 이미 존재하므로 회원가입 종료.
return ;
}
UserEntity data = new UserEntity();
data.setUsername(joinDTO.getUsername());
data.setPassword(bCryptPasswordEncoder.encode(joinDTO.getPassword())); // 비밀번호를 암호화한다.
data.setRole("ROLE_ADMIN");
userRepository.save(data);
}
}
이제 회원가입 로직을 작성한다.
마찬가지로 service 패키지를 만들고 joinService 를 작성하면 된다.
회원가입에 실패하면 사용자에게 어떤 값을 보여줘야한다거나 모든 회원에게 Admin 권한을 준다거나 하는 것은 신경쓰지 말자. JWT 배우는 것에만 신경쓰자.
비밀번호는 DB 에 암호화 되서 저장할 수 있게, SecurityConfig 에서 작성한 빈 BCryptPasswordEncoder 을 이용하자.
Test

요청 주소는 http://localhost:8080/join 로 설정하고 Body 에 username 과 password 를 담아서 전송한다.
전송 후 table 을 확인해 저장이 잘 되는지(코드를 제대로 작성했는지) 확인한다.
이전 포스팅 : 회원정보 테이블 작성
다음 포스팅 : 로그인 필터