사용자의 비밀번호를 DB에 평문으로 저장하는 것은 보안상 매우 위험하다.
DB가 유출되더라도 실제 비밀번호를 알 수 없도록 단방향 암호화 함수를 이용해 암호화 해야한다.
PasswordEncoder 빈 등록
@Configuration
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
- BCryptPasswordEncoder: 현재 가장 널리 사용되는 암호화 알고리즘. 암호화할 때마다 같은 비밀번호라도 매번 다른 결과값생성
- Spring Security에서 기본적으로 BCryptPasswordEncoder를 권장한다.
domain 비밀번호 암호화
public void encodePassword(PasswordEncoder passwordEncoder) {
this.password = passwordEncoder.encode(this.password);
}
Entity의 비밀번호를 암호화해주는 메소드를 도메인에 선언한다.
Entity는 단순히 데이터만 담는 바구니가 아니라, 데이터와 그 데이터를 처리하는 메소드를 함께 가지고 있는 객체이다.(캡슐화)
Service단에서 암호화 로직을 생성하고 암호화가 필요한 곳에서 사용해도 되지만,
이는 도메인이 가지고 있는 평문 비밀번호를 외부 Service에서 get해서 암호화 후 다시 set 해줘야하는 번거로움이 있고,
Service에서 암호화가 누락되어 무결성에 위배될 수 있다.
'프로젝트 끄적이기' 카테고리의 다른 글
| 7. 현재 로그인한 사용자 정보 활용 (0) | 2026.01.28 |
|---|---|
| 6. 로그인 session (0) | 2026.01.27 |
| 4. Spring Security 로그인 인증 방식 (0) | 2026.01.27 |
| 3. 의존성 주입(DI) 방법 비교 (0) | 2026.01.22 |
| 0. 프로젝트 세팅 (0) | 2026.01.21 |