비밀번호 암호화

곽현민·2026년 1월 8일

발단

Session 키워드를 활용하여 로그인 기능을 구현하고 있었다.
이메일과 비밀번호를 인증 키로 활용하였고, 그 중 비밀번호를 암호화하여 보안을 강화할 계획이었다.

이메일과 비밀번호를 입력하여 회원가입을 하고, 저장된 이메일과 비밀번호 입력 시 로그인이 되는 기능까지 구현했다.
이제 비밀번호를 암호화하여 보안을 강화하면 될 일이다.

전개

비밀번호를 암호화하기 위해

implementation 'at.favre.lib:bcrypt:0.10.2'

위의 의존성을 추가해주었다. 이 의존성은 bcrypt라는 강력한 암호화 알고리즘이라고 알고 있으면 될 것 같다.

이 의존성을 바탕으로 본격적인 비밀번호 암호화 기능을 작성할 클래스를 생성해보자.

import at.favre.lib.crypto.bcrypt.BCrypt;
import org.springframework.stereotype.Component;

@Component
public class PasswordEncoder {

    public String encode(String rawPassword) {
        return BCrypt.withDefaults().hashToString(BCrypt.MIN_COST, rawPassword.toCharArray());
    }

    public boolean matches(String rawPassword, String encodedPassword) {
        BCrypt.Result result = BCrypt.verifyer().verify(rawPassword.toCharArray(), encodedPassword);
        return result.verified;
    }
}

위의 클래스를 자세히 살펴보자면, 처음으로 발견하는게 @Component 다.
이를 통해 Bean이 자동으로 등록되었다.

그렇다면 로그인 기능이 구현돼있을 service 클래스에서 passwordEncoder를 호출하여 사용하기에 매우 편리할 것이다.

다시 위의 클래스로 돌아와 살펴보자면, 두 가지의 기능이 보일 것이다.
encode는 입력한 비밀번호를 암호화해주는 기능이고,
matches는 입력한 비밀번호와 암호화되어 저장된 비밀번호가 일치하는 지 확인해주는 기능이다.

이를 활용하자면 회원가입 시 입력받은 비밀번호를 encode를 통해 암호화하여 저장하고, 로그인 시 matches를 통해 비밀번호 일치 여부를 확인해주는 것으로 활용이 가능할 것이다.

마무리

이번에 새롭게 배우는 내용이라 비밀번호 암호화에 대해서 검색을 해보았을 때,
거의 다 Spring Security 모듈에서 제공하는 인터페이스 활용하는 내용이였던 것 같다. 내용을 대충 보았을 때는, 비슷해보였다.
이번 학습을 통해 비밀번호 암호화하는 것에 대한 지식이 조금은 쌓였기에
나중에 Spring Security에 대해서도 학습할 기회를 만들어 두 방법을 비교해가며 학습하면
더욱 도움이 많이 될 듯하다.

0개의 댓글