PasswordEncoder 클래스 개선 : e.printStackTrace 는 실제 서비스에서 별로
2023. 11. 20. 11:56ㆍProject 해축갤/코드개선
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 알고리즘에 따라 변환된,
전혀 다른 형태의 바이트 배열을 생성합니다.
- 입력된 비밀번호는 password.getBytes(StandardCharsets.UTF_8)를 통해 바이트 배열로 변환됩니다.
- 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
'Project 해축갤 > 코드개선' 카테고리의 다른 글
JaCoCo와 애노테이션: 자바 테스트 커버리지의 한계 이해하기 (0) | 2024.01.08 |
---|