지금으로서 우리는
Spring Boot 웹 애플리케이션 내부에서
JdbcUserDetailsManager를 이용하여
인증을 진행하고 있습니다
그러나 실제 웹 애플리케이션
또는 업체 기관에서도
이걸로 충분할까요?
당연히 아닙니다 실제 프로젝트에서는
클라이언트에게 가서 Spring Security 프레임워크의
요구사항대로 표를 생성하고 싶다고 한다면
그들은 그들만의 요구사항이 있기 때문에
받아들이지 않을 가능성이 높습니다
여기에 우리는 아이디
비밀번호, 활성 열 등이 있지만
클라이언트는 엔드 유저를
이메일을 이용해 인증하고 싶을 수도 있습니다
이런 상황에서 username 열을 두는 것은
옳지 않을 것입니다
email이라는 열이 있어야 합니다
그 외에도 클라이언트는
“이런 명명 규칙을 저희가 왜 따라야 하죠?
저희가 원하는 대로 명명 규칙을 정해
저희만의 표를 만들 겁니다”라고 할지도 모릅니다
그러므로 더 큰 프로젝트에서
여러분이 작업하신다면 아마 그 프로젝트는
그 프로젝트만의 명명 규칙이나 표 구조를 가질 것입니다
그런 기업 프로젝트에서는
Spring Security 기준의 데이터베이스 스키마
데이터베이스 표, 열 등은 사용할 수 없습니다
그 대신 클라이언트 권장 사항에 따라
새로운 표와 열을 생성해야 하며
또한 이런 시나리오에서는
JdbcUserDetailsManager도 사용할 수 없을 것입니다
JdbcUserDetailsManager는 규모가 작은 애플리케이션이나
Spring Security의 스키마 구조를 따르는 것이
허용되는 실제 애플리케이션에서는
사용 가능합니다
그렇지 않다면 우리는 우리만의
UserDetailsService나 UserDetailsManager 구현을
작성하여야 합니다 Spring Security 팀이
JdbcUserDetailsManager에 하였듯이 말입니다
Spring Security 팀은 인증을 어떻게 하여야 하는지
좋은 예시를 보여주었습니다
그러면 이 지식을 가지고
우리의 웹 애플리케이션을 개선하여
이 애플리케이션만을 위해 만든 표와 열을 이용하여
인증을 진행하여 봅시다
지금은 보이듯이 authorities와 users라는
표가 있으며 이런 표를 생성한 이유는
Spring Security에서 이런 형식을 우리가
JdbsUserDetailsManager를 사용할 때 요구하기 때문입니다
하지만 저는 이와 다른 표 구조와
열 명칭을 사용하고 싶습니다
여기 나와 있는 스크립트를 활용하여
저는 새로운 표 구조를 만들려고 합니다
표 이름은 customer로 하겠습니다
표 이름을 users로 하는 대신에
customer라는 이름의 표를 생성할 것이며
표 내부에는 제가 정의하는 열
예를 들면 email, 비밀번호인 pwd가 있습니다
그 외에도 role이라는 열이 있어
제 고객의 역할 값 또는
권한 값을 저장할 수 있습니다
id 열이 있으며 이게 기본키로 기능할 것입니다
이 간단한 표 구조를 이용하여
저는 제 웹 애플리케이션에 인증을 구현할 수 있습니다
지금 제가 증명하려고 하는 것은
Spring Security의 요구사항에 반드시 따를 필요가 없다는 것입니다
우리는 우리만의 표와 열 명칭을 가지고
우리만의 방식으로 접근하여도 됩니다
그러나 이런 시나리오에서 함정은
JdbcUserDetailsManager를 사용할 수 없게 된다는 것입니다
그 대신 우리만의 로직도 작성하여
인증을 진행하여야 합니다
일단 이 스크립트를 실행하여
데이터베이스 내부에 새로운 표를 생성하겠습니다
쿼리가 성공적으로 실행되었습니다
이제는 연결을 끊었다가 다시 연결해서
eazybank 데이터베이스 내부에
새로 생성된 표를 볼 수 있도록 하겠습니다
Tables를 열면
customer라는 이름의 새로운 표가 있습니다
하지만 그 내부에 기록은 없습니다
테스트를 해 보기 위해 이 표에
새로운 유저 정보를 입력해 봅시다
INSERT INTO 'customer'와 같은 스크립트를 통해 입력합니다
이메일를 입력하여야 합니다
‘email' 값은 johndoe@example.com으로 하겠습니다
로그인 시에도 이 이메일을 사용해야 합니다
비밀번호는 54321이고
역할은 관리자(admin)으로 하곘습니다
이제 스크립트를 실행합니다
이렇게 새로운 유저를
customer 표에 생성하였습니다
코드에 변경을 가하기 전에
저는 지금 이 스크립트를 scripts.sql에 입력해 놓아
여러분이 나중에 참고할 수 있도록 하겠습니다
resources 폴더의 하위에 있는 scripts.sql을
열겠습니다
그리고 여기에 방금 실행했던
새로운 스크립트를 붙여넣습니다
원하시면 이 스크립트들을 사용하셔도 되고
여러분만의 표 구조나 유저 정보를 생성하고 싶으시다면
스크립트를 수정하여 사용하셔도 좋습니다
저는 일단 참고가 가능하도록
GitHub 리포지터리에 저장해 두도록 하겠습니다
이번에는 우리만의 표 구조와 열 구조를 생성해 보았습니다
이는 JdbcUserDetailsManager의 요구사항과는 맞지 않습니다
그러므로 다음 강의에서 해야 할 일은
Spring Boot 웹 애플리케이션의 코드를 수정해서
우리가 생성한 우리만의
새로운 데이터베이스 표를 이용한
인증이 가능하도록 만드는 것입니다
이해가 잘 되셨길 바랍니다
감사드리며 다음 강의에서 뵙겠습니다