인프런 커뮤니티 질문&답변
member의 password null 체크 로직
작성
·
59
0
안녕하세요! 토비님 좋은 강의 잘 듣고 있습니다 :)
별거 아닌것 같긴합니다만..
도메인 코드 개선중 문득 궁금한 점이 생겨서 문의남겨봅니다..!
Member를 생성하는 정적 펙토리 메소드에서member.passwordHash = requireNonNull(passwordEncoder.encode(createRequest.password()));
이렇게 암호화된 값에 대한 null 체크를 하도록 구현하셨습니다.
그런데 아래와 같이 다른 파라미터처럼 암호화를 하기전에 password 파라미터 자체를 null 체크하는게 일관성이 있다고 생각되는데 암호화를 한 후 null체크를 하신 토비님의 의도가 궁금합니다!!member.passwordHash = passwordEncoder.encode(requireNonNull(createRequest.password()));
답변 2
0
날카로운 질문을 해주셨네요.
requireNonNull()이 가장 밖에 둔 이유는 제가 로직을 적용하면서 사고하는 순서 때문인 것 같은데요.
Null이 아니어야 한다는 로직은 passwordHash 프로퍼티에 적용한 것입니다. 엔티티의 로직인 거죠. 그래서 encode를 해서 어떤 결과가 나오든(사실 encode해서 널이 나올 것 같지는 않지만요) 상관없이 최종적으로 null이 아닌지 확인하고 passwordHash에 넣는다라는 규칙을 그대로 표현하려고 했던 것입니다.
강의 진행하면서 PasswordEncoder의 encode()에 대해서는 딱히 null에 대해서 규칙을 정하지는 않았어요. null 비밀번호를 허용할지 말지(당연히 현실적으로는 안 하겠지만) 명시해두지 않았으니까 거기서 어떤 결과가 나오든지 상관없이 최종 null이 들어가면 안 된다는 것은 엔티티 레벨에서 강제하자는 걸로 봐주시면 좋겠습니다.
대부분 비밀번호를 입력받고 호출하는 쪽에서 null 값을 보낼리는 없겠죠. 그럼에도 체크하는 코드를 도메인 안에 둔 것은, 실제로 버그가 있어서 encode()에서 null이 리턴되는 상황, password가 null로 넘어오는(이것도 프론트의 버그겠죠) 극단적인 버그 상황도 차단할 수 있도록 만든 것이라고 보시면 될 것 같네요.
말씀하신 대로 password에 대해서 non null 체크를 해도 되긴 합니다만 제 스타일은 이렇게 하는 게 마음이 편한 것 같네요. 보통 사용하는 기술이 어떻든 비밀번호 인코딩 하는 쪽에서 null을 받으면 거기서 먼저 에러를 내지 않을까 싶긴합니다만, 그 구현은 어떻게 바뀔지 모르겠죠.
0
안녕하세요, 인프런 AI 인턴입니다. 정승환님께서 올려주신 질문에 대해 답변드리겠습니다.
비밀번호 Null 체크 로직에 대한 고찰
비밀번호를 포함한 주요 데이터는, 시스템에서 예외 없이 처리되어야 하는 필수적인 요소입니다. 일반적으로 입력된 비밀번호 값 자체에 대한 null 체크는 코드의 일관성을 유지하는 데 도움이 됩니다. 이렇게 null 체크를 통해 초기 단계에서 잠재적인 오류를 미리 방지할 수 있습니다.
비밀번호 암호화 후 null 체크의 이유
비밀번호를 암호화한 후에 null 체크를 수행하는 이유는, 실제로 암호화 과정 중에 문제가 발생할 수 있는 경우에 대비하기 위함일 수 있습니다. 다음과 같은 상황들이 있을 수 있습니다:
암호화 실패 발생 가능성: 비밀번호가 비정상적인 상황에서 암호화 도중에 예상하지 못한 null 값이 반환될 경우에 대비하기 위한 방어적 프로그래밍 방법으로 볼 수 있습니다.
암호화 결과의 유효성 보장: 암호화된 결과값이 정상적으로 생성되지 않은 경우, 이후 처리에서 발생할 수 있는 문제를 미리 감지하기 위함입니다.
하지만, 함수 호출의 일관성과 초기에 명확한 예외 처리를 고려한다면, 말씀하신 대로 암호화를 수행하기 전 입력 값 자체에 대한 null 체크를 우선적으로 수행하는 것이 코드의 가독성 및 유지보수 측면에서 도움이 될 수 있습니다. 이를 통해 예외가 발생할 지점을 명확하게 지정할 수 있습니다.
위와 같은 설명을 기반으로, 정승환님께서 코드 작성 시에 각각의 상황 및 코드의 목적에 따라 적절한 방식으로 null 체크를 설정하는 것이 바람직합니다.
관련하여 앞서 다루어진 게시글에서 풍부한 설명과 토비님만의 의견을 확인하실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




