이번 강의에서는
이제 우리가 Spring Boot 웹 애플리케이션의
메모리 안에 유저를 만들고 싶을 때 따를 수 있는
두 번째 접근법을 이해해 보겠습니다
여기보시면 두 번째 접근법이 있습니다
접근법 1과 접근법 2 사이에는
아주 사소한 차이가 있습니다
접근 방식 2를 잘 보시면
User 클래스를 사용하여
UserDetails를 생성할 때
PasswordEncoder와 관련된 메소드를 호출하지 않습니다
대신 PasswordEncoder라는
별도의 메소드를 정의하고 NoOpPasswordEncoder
유형의 객체를 Bean으로 반환할 것입니다
그리고 NoOpPasswordEncoder Bean을 정의한 후에는
Spring Security는 손쉽게
"이 프로젝트 전체에서
NoOpPasswordEncoder를 사용하려는 것 같군"
이렇게 모든 것을 이해하고
인코딩 및 해싱 없이
User detail를 확인하려고 시도합니다
왜냐하면 NoOpPasswordEncoder는
Spring Security 프레임워크 내에서 사용 가능한
가장 간단한 PasswordEncoder이기 때문입니다
또 비밀번호의 암호화 및
해싱을 수행하지 않습니다
간단히 비밀번호 값을
일반 텍스트 비밀번호로 입력합니다
그래서 다시 말씀드리면 이 접근 방식 또한
프로덕션 환경에서 권장되지 않습니다 왜냐하면
유저의 자격증명을 코드 내부와
웹 애플리케이션의 메모리 내부에 저장하기 때문입니다
이제 웹 애플리케이션 내에서
이 접근 방식을 구현하고 변경 사항이
원활하게 작동하는지 확인해 보겠습니다
이번에도 똑같이 IntelliJ IDEA로 이동하겠습니다
이 모든 코드를 주석 처리할 것입니다
먼저 이 코드를 복사하고
GitHub를 참조할 때 이를 참고하실 수 있도록
모든 코드에 주석을 달겠습니다
그리고 동일한 코드를 넣고
일부분을 수정하겠습니다
그 전에 접근법 2 위에
Java 주석을 넣어 보겠습니다
User Detail를 생성하는 동안
"Approach 2 where we use NoOpPasswordEncoder Bean"라고
하는 새로운 Java 주석을 정의하겠습니다
이게 두번째 접근 방식 입니다
그리고 여기 withDefaultPasswordEncoder
메소드를 제거하겠습니다
하지만 이 메소드를 제거하기 전에
이 메소드 안에 무엇이 있는지 보여드리겠습니다
이 메소드 안에는 객체이거나 Bean 타입의
PasswordEncoder를 생성하고 있습니다
그러면 두번째 접근 방식을 사용하면서
코드 내에서도 똑같이 해보겠습니다
그 전에 이 부분을 삭제하겠습니다
이 부분을 삭제한 후에는 반드시 withUsername
메소드를 호출해야 합니다
.Username을 직접 사용할 수 없습니다
왜냐하면 첫 번째 메소드에서는
반드시 withUsername 또는
withDefault PasswordEncoder를 사용해야 합니다
withUsername으로 이 메소드를 호출한 후에
동일한 username을 전달하고
여기 있는 .username 코드를 제거할 수 있습니다
두 번째 유저도 마찬가지로
withDefaultPasswordEncoder를
삭제하겠습니다
여기서 유저 이름을 "user"로 지정하고
이 줄을 제거하겠습니다
이제 모두 완벽합니다
하지만 이 작업을 정상적으로 수행하려면
반드시 웹 애플리케이션 내에서
비밀번호와 할당량 유형의 Bean을 생성해야 합니다
그러므로 여기에서는 동일한 작업을 위해
PasswordEncorder 유형의 Bean을 반환할 새로운 메소드를 생성할 것입니다
여기서는 몇 줄의 코드를 테스트하고
필요한 인터페이스와 클래스를 가져오려고 합니다
여기에서도 중복된 것으로 표시되는 것을 볼 수 있습니다
프로덕션 환경에서의 사용을 권장하지 않습니다
왜냐하면 NoOpPasswordEncoder를 사용할 때
비밀번호가 일반 텍스트로 처리되어
보안상 권장되지 않습니다
따라서 프로덕션 애플리케이션에는 권장하지 않습니다
참고하실 수 있도록 메소드 주석 내에서도
동일한 내용을 다시 언급했습니다
여기에 빌드를 해보겠습니다
필요하다면 변경 사항이 반영되었는지 확인하기 위해
다시 시작할 수 있습니다
그래서 저는 이 EasyBankbackendApplication으로 가서
Debug 옵션을 선택하여 이 웹 애플리케이션을
다시 시작하고 있습니다
이제 브라우저를 열어보겠습니다
이 브라우저안에
먼저 contact이라는 공개 API에 접근해보겠습니다
잘 작동하는 것을 볼 수 있습니다
다음으로 보호된 API인 myLoans에
액세스해보겠습니다
여기서 자격증명을 요청하고 있습니다
admin으로 입력해 보겠습니다
그리고 비밀번호는 12345 입니다
이번에도 잘 작동 할겁니다
보시다시피 어떤 문제도 없이
아주 잘 작동하고 있습니다
이렇게해서 두 번째 접근 방식을 사용하여
inMemoryUserDetailsManager의 도움으로
웹 애플리케이션 메모리에
User Details를 구성했습니다
따라서 여기에서 볼 수 있듯이
접근 방식 1과 접근 방식 2 사이에 큰 차이는 없습니다
User 클래스 내에서
withDefaultPasswordEncoder 메소드를 사용할 때
우리는 단순히 NoOpPasswordEncoder 유형의 Bean을 생성하여
비밀번호를 일반 텍스트으로 처리하도록 합니다
물론 비밀번호를 해시하는 방법
비밀번호를 암호화하는 방법 등에 대한
내용이 담겨 있는 Passwordencorder에 관한
전용 섹션도 있습니다
현재는 일반 텍스트 비밀번호를 사용하는 것이 적절합니다
지금은 웹 애플리케이션 메모리 내에서 User Details를 어떻게
생성하는지를 탐색하고 있으므로
지금까지 우리가 논의한 내용에 대해
명확한 이해를 가지고 있으리라고 생각합니다
감사합니다 다음 강의에서 뵙겠습니다
수고하셨습니다