SpringSecurity : 회원가입 로직

친환경 개발자
|2025. 3. 12. 23:54

 

JPA를 활용하여 Entity 생성 및 회원가입 로직을 구현한다.

 

엔티티 생성 및 파일 생성

 

1. 회원 Entity 생성 (UserEntity)

@Entity
@Getter
@Setter
public class UserEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String username;
    private String password;
    private String role;
}

 

2. UserRepository 생성

@Repository
public interface UserRepository extends JpaRepository<UserEntity, Integer> {

}

 

3. application.properties

spring.jpa.hibernate.ddl-auto=create

 

최초 실행시에만 테이블 생성을 위해 create로 설정.

이후에는 none으로 수정할 것.

 

 

 

회원가입 로직 흐름

회원가입 api 요청[FE] - JoinController - JoinService - UserRepository - DB

 

1. JoinDTO 생성

@Setter
@Getter
public class JoinDTO {
    private String username;
    private String password;
}

 

 

2. JoinController

@Controller
@ResponseBody
public class JoinController {

	// 의존성 주입
    private final JoinService joinService;
    public JoinController(JoinService joinService) {
        this.joinService = joinService;
    }

    @PostMapping("/join")
    public String join(JoinDto joinDto) {
        System.out.println(joinDto.getUsername());
        joinService.joinProcess(joinDto);

        return "joined successfully";
    }
}

 

 

3. JoinService

@Service
public class JoinService {

    private final UserRepository userRepository;
    private final BCryptPasswordEncoder bCryptPasswordEncoder;

    public JoinService(UserRepository userRepository, BCryptPasswordEncoder bCryptPasswordEncoder) {

        this.userRepository = userRepository;
        this.bCryptPasswordEncoder = bCryptPasswordEncoder;
    }

    public void joinProcess(JoinDto joinDto) {

        // 이미 존재하는 username인지 확인
        Boolean isExist = userRepository.existsByUsername(joinDto.getUsername());

        if (isExist) {
            return;
        }

		// DB에 저장하기 위한 바구니 (UserEntity) 생성
        UserEntity user = new UserEntity();

        user.setUsername(joinDto.getUsername());
        // 비밀번호는 암호화하여 저장!
        user.setPassword(bCryptPasswordEncoder.encode(joinDto.getPassword()));
        user.setRole("ROLE_ADMIN");	// 임시로 ADMIN 권한 부여

        userRepository.save(user);
    }
}

 

 

4. UserRepository

@Repository
public interface UserRepository extends JpaRepository<UserEntity, Integer> {
    Boolean existsByUsername(String username);	// 해당 username을 가진 유저가 존재하는지
}