PasswordEncoder 클래스 개선 : e.printStackTrace 는 실제 서비스에서 별로

2023. 11. 20. 11:56Project 해축갤/코드개선

728x90

개요

public class PasswordEncoder {

    public static String encode(String password) {
        String result = "";
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] encodedHash = digest.digest(password.getBytes(StandardCharsets.UTF_8));
            result = Base64.getEncoder().encodeToString(encodedHash);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace(); // 여기가 문제!
        }
        return result;
    }
}

PasswordEncoder 클래스는 비밀번호를 안전하게 처리하는 역할을 수행합니다

이 과정에서 MessageDigest를 활용하여 SHA-256 해시 알고리즘을 적용합니다.

이 클래스의 작동 원리는 복잡해 보일 수 있지만 실제로는 간단합니다!

작동 원리: 세세한 설명

  • SHA-256 해시 알고리즘 활용:
    • MessageDigest.getInstance("SHA-256") 호출을 통해, MessageDigest 객체를 생성합니다. 여기서 "SHA-256" 입력된 데이터(여기서는 비밀번호) 처리하는 사용되는 특정 알고리즘을 의미합니다.
  • 비밀번호의 변환:
    • 입력된 비밀번호는 password.getBytes(StandardCharsets.UTF_8) 통해 바이트 배열로 변환됩니다.
      이는 비밀번호를 컴퓨터가 처리할 있는 형태로 바꾸는 단계입니다.
    • digest.digest() 메서드는 바이트 배열을 처리하여, SHA-256 알고리즘에 따라 변환된,
      전혀 다른 형태의 바이트 배열을 생성합니다.
  • Base64 인코딩으로의 변환:
    • 이제 생성된 해시 (바이트 배열) Base64.getEncoder(). encodeToString(encodedHash)를 문자열로 변환합니다. Base64 인코딩은 바이너리 데이터를 텍스트 형식으로 변환하는 표준 인코딩 방법입니다.
    • 문자열은 원래의 비밀번호와 전혀 다르며, 해시 과정을 통해 역산이 거의 불가능한 형태로 되어 있습니다.

로깅 개선

기존 코드에서 e.printStackTrace() 사용하면, 예외 발생 많은 양의 로그가 출력되어 문제를 파악하기 어려웠습니다.

이를 개선하기 위해 @Slf4j 어노테이션을 활용하여 로그를 log.info() 기록하는 방식으로 변경했습니다.

이렇게 하면 오류 메시지를 보다 간결하고 명확하게 기록할 있습니다.

} catch (NoSuchAlgorithmException e) {
    log.info("Failed to encode password: {}", e.getMessage());
}

 

이 변경은 필요한 정보만을 보여주기 때문에 로그의 가독성을 높이고 효율적으로 기록할 수 있습니다!

결론

PasswordEncoder 클래스는 MessageDigest 원리를 정확히 이해하고 활용하여 비밀번호를 안전하게 처리합니다.

로그 기록 방식의 개선은 이러한 복잡한 과정을 더욱 효율적으로 관리할 있게 해줍니다.

728x90