[Spring Security] 2. 회원가입 구현

Beomsu Son·2023년 6월 23일
0
post-thumbnail

0. 회원가입 요구사항 분석


회원가입을 하는 것에 있어서 필요할 정보들이 무엇이 존재하는지 생각한다.

이번 연습용 프로젝트에서는

  • 유저 아이디
  • 유저 비밀번호
  • 유저 Email

이 세가지가 필요할 것이라고 가정했다.

이 정보들을 클라이언트에서 받은 후에 Spring Data JPA를 이용하면 쉽게 저장할 수 있다.

그러나 암호화를 거치지 않고 단순 저장만 하면 유저 정보 보안에 큰 문제가 생길 수 있기 때문에, 비밀번호 데이터를 암호화해서 저장해보도록하자.

1. 스프링 빈 등록: BCryptPasswordEncoder


		//SecurityConfig.java
		//...
		@Bean
    public BCryptPasswordEncoder encodePwd() {
        return new BCryptPasswordEncoder();
    }

이러한 암호화를 쉽게 구현하게 해줄 수 있는 것이 BCryptPasswordEncoder 클래스이다.

안에 내장되어있는 encode() 메서드로 데이터를 인코딩할 수 있다. 이 메서드를 이용해 비밀번호 데이터를 암호화할 생각이다.

이 클래스를 Bean으로 등록해서 사용해보도록 하자.

💡 굳이 Bean으로 받아서 사용하는 이유는?
Spring Bean
을 사용하는 이유는 다양하지만,
굳이 꼽자면 단순히 Bean이 싱글톤으로 관리되기 때문이라고 할 수 있겠다.
해당 클래스의 용도 특성상 Bean으로 등록하지 않으면 객체가 무분별하게 생성될 수 있는데, 이런 부담을 줄이고자 Bean으로 등록해서 사용하는 것이다.

2. DB에 데이터 전송


		@PostMapping("/join")
    public String join(User user) {
        //System.out.println(user);
        user.setRole("ROLE_USER");
        String rawPassword = user.getPassword();
        String encPassword = bCryptPasswordEncoder.encode(rawPassword);

        user.setPassword(encPassword);

        userRepository.save(user); // 패스워드 암호화가 안 되어있음.
        return "redirect:/loginForm";
    }

임의의 연습용 프로젝트니까 최대한 편한 방향으로 쉽게 코드를 짰다.

전체적인 흐름은 다음과 같다.

  1. 유저에게 권한 부여.
  2. 원본 비밀번호를 받아서 암호화한다.
  3. 암호화된 비밀번호를 user 객체에 다시 set해준다.
  4. 저장!

실제로 사용할만하게 사용한다면 Service계층을 파서 그 곳에서 작업하는 게 더 좋을 듯.

참고한 자료


[무료] 스프링부트 시큐리티 & JWT 강의 - 인프런 | 강의

profile
생각날 때마다 기록하기

0개의 댓글