
| 항목 | Env Info |
|---|---|
| 🖥️ 서버 | Tomcat |
| 🍭 프레임워크 | Spring Boot |
| 📀 데이터베이스 | MySQL with Azure |
| 📝 JPA | Hibernate |
| 🙈 외부 라이브러리 | lombok, thymeleaf, AJAX |
| 📏 디자인 패턴 | MVC |
가. 해싱해서 비밀번호 저장
new BCryptPasswordEncoder().encoder(password)
bCrypt 어원
b: Blowfish 암호화 알고리즘에서 유래
crypt: 유닉스 계열에서 비밀번호 해싱에 사용된 crypt() 함수에서 유래즉, BCrypt는 Blowfish 기반의 crypt 함수이며 단방향 해쉬 알고리즘이다.
하지만 매번 BCryptPasswordEncoder 객체를 뽑는것은 메모리 측면에서 비효율적이므로, Spring의 bean을 사용하여 Dependency Injection을 사용하기로 한다.
bean: 스프링이 대신 뽑아준 오브젝트
@Bean
PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
위의 코드를 config 파일에 작성해주고, 아래와 같이 사용
private final PasswordEncoder passwordEncoder;
member.setLoginPw(passwordEncoder.encode(loginPw));
Dependency Injection을 사용함으로서 비밀번호의 인코더 방식을 편하게 바꿔줄 수 있다. 만약 DI(Dependency Injection)를 사용하지 않으면
private final PasswordEncoder passwordEncoder;
해당 비즈니스 로직 안의 부분을 직접 수정해줘야하지만,
DI를 사용하면 Config 파일 안의, 아래부분의 BCryptPasswordEncoder() 만 바꿔주면 되는 것이다.
@Bean
PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}