Bcrypt는 비밀번호를 안전하게 저장하기 위한 단방향 해시 알고리즘으로,
Spring Security에서 기본 제공하는BCryptPasswordEncoder를 사용함.
cost factor)으로 무차별 대입 공격(Brute-force)에 강함implementation 'org.springframework.boot:spring-boot-starter-security'
별도의 보안 설정 없이 비밀번호 해시 기능만 사용할 수 있음.
@Configuration
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
// 기본 strength = 10 (추천 범위 10~14)
return new BCryptPasswordEncoder();
}
}
cost 값이 높을수록 안전하지만, 연산 시간이 증가함. @Service
@RequiredArgsConstructor
public class UserService {
private final PasswordEncoder passwordEncoder;
private final UserRepository userRepository;
// [1] 회원가입 - 비밀번호 암호화
public Long register(UserSignupRequest req) {
// 1. 평문 비밀번호 해시화
String hashed = passwordEncoder.encode(req.getPassword());
// 2. 엔티티 생성 및 저장
User user = User.builder()
.email(req.getEmail())
.password(hashed)
.name(req.getName())
.build();
userRepository.save(user);
return user.getId();
}
// [2] 로그인 - 평문 vs 해시 비교
public boolean login(String email, String rawPassword) {
User user = userRepository.findByEmail(email)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 사용자"));
// matches(평문, 해시) → true / false 반환
return passwordEncoder.matches(rawPassword, user.getPassword());
}
}
| 메서드 | 설명 |
|---|---|
encode(rawPassword) | 평문 → 해시 문자열 변환 |
matches(raw, encoded) | 평문 vs 해시 비교 (boolean 반환) |
cost 주기적 재평가 (보통 10~12 사이)| 항목 | 설명 |
|---|---|
| 암호화 알고리즘 | Bcrypt (단방향 해시, salt 자동 포함) |
| 제공 클래스 | BCryptPasswordEncoder |
| 주요 기능 | 비밀번호 해시 / 검증 |
| 보안 포인트 | 평문 저장 금지, cost 재평가, 해시 재생성 |
| 위치 | Spring Service 단 |