우리의 데이터베이스에는
유저에 대해
하나의 권한이나 역할만 저장할 수 있습니다
고객 테이블의 기록을 확인해 보면
Happy와 같은 각 고객은 관리자의 역할을
John Doe는 유저의 역할을
그리고 Eazy Bytes도 유저의 역할을 가지고 있고
이것은 각 유저에 대해 오직 하나의 역할
또는 권한을 줄 수 있음을 의미합니다
그러나 Spring Security는 우리에게 유연성을 제공하여
각 유저에 대해 제한되지 않은 수의 권한 또는
역할을 부여할 수 있게 합니다
따라서 Spring Security 프레임워크가 제공하는 유연성 또는
기능을 활용하기 위해서는
우리는 Authorities라는 테이블을 새로 형성하고
그 안에 유저가 가질 수 있는 권한의
종류를 정의 내릴 수 있습니다
그리고 이 새로운 테이블에서는 고객 테이블과
외래키 연결을 통해 연결할 수 있습니다
따라서 고객 테이블에서 엔드 유저 세부 정보를 로딩하려고 할 때
외래키 연결을 사용하여
다른 테이블에서 권한을 로드할 수도 있습니다
새로운 테이블을 만들기 위해서
제가 준비한 몇 가지의 스크립트입니다
스크립트를 실행해 볼 겁니다
첫 번째 스크립트는
authorities라 불리는 새로운 테이블을 만들고
그 테이블 내부에는 주요 키인 id 라는 열과
customer_id 라는 열이 있습니다
customer_id 열은 고객 테이블과의 외래키 연결을 가지게 됩니다
권한과 역할의 이름은 언급되지 않았습니다
따라서 이름 열에서는 이러한 세부 정보를 입력할 수 있습니다
자 이제 이 생성된 테이블 스크립트를 실행해 봅시다
자 이제 제 테이블은 성공적으로 만들어졌습니다
제가 준비해 온 몇 가지의
샘플 insert script 입니다
GitHub 리포지터리에 이 모든 걸 업로드 할 예정이므로
걱정하지 않고 이를 활용하실 수 있습니다
여기 볼 수 있듯이 저는 customer_id 1 에
권한들을 입력하고자 합니다
customer_id와 같이 이 유저는 계정 보기, 카드 보기, 대출 보기 그리고 잔액 보기와 같은
권한을 가질 겁니다
따라서 이것들이 그의 권한이 됩니다
자 이제 이런 insert scripts를 제외해 봅시다
로그아웃 후 다시 로그인 함으로써
최신 테이블의 정보를 볼 수 있습니다
EasyBank의 데이터베이스에서
우선 고객 테이블을 엽니다
고객 테이블에는 변동사항이 없습니다
customer_id 1인 Happy에게
우리는 특정 권한들을 입력했습니다
권한 테이블로 돌아가 확인해보면
계정 보기, 카드 보기
대출 보기, 잔액 보기와 같은 모든 권한이
customer_id 1에 배정되어 있습니다
이것은 모든 권한이
엔드 유저인 Happy에게 속한다는 것을 보여줍니다
여기서 볼 수 있듯이 우리가 고른 권한 이름은
나의 엔드 유저가 행할 수 있는 액션입니다
따라서 계정 보기의 이름으로 된 권한을 가진 사람은
계정의 세부 정보와 같은 것들을 볼 수 있습니다
카드 보기의 경우 카드를 볼 수 있는 권한을 가지고
대출과 잔액에 대해서 또한 똑같이 적용됩니다
우리는 이러한 권한들을 애플리케이션 내에 활용하여
인가를 강제할 수 있습니다
하지만 현재까지는 데이터베이스만 변경했고
백엔드 변경은 하지 않았습니다
우리는 새 테이블에서 권한을 읽어와서
인증 객체를 만들려고 할 때
프레임워크에 이것을 전달해야 합니다
이를 위해 여기 백엔드에 몇 가지를 변경해 봅시다
여기서 저의 작업 공간 안에
이 섹션에 특화된 변경 내용이 있는
새로운 Maven 프로젝트를 생성할 겁니다
동일 작업으로
이전 섹션에 사용한
Maven 프로젝트를 복사하고
이를 springsecsection7으로 이름을 변경할 것입니다
지금 우리는 섹션 7 에 진입해 있는 상태이기에
이러한 네이밍 규칙을 사용하고 있습니다
그리고 target 폴더 안에서
우리가 이전 프로젝트에서 복사한
모든 컴파일된 클래스를 제거할 수 있고
마지막으로 pom.xml 파일을 열 수 있습니다
이 pom.xml 파일 내에서 artifact Id 와
name을 springsecsection7 으로 변경할 수 있습니다
이 변경 사항을 저장하고 pom.xml을 닫으면
이제 IntelliJ IDEA에
이 프로젝트를 가져올 수 있습니다
IntelliJ IDEA에서 제 클래스들을
모두 닫아보겠습니다
그런 다음 New - Module From Existing Sources 옵션을
선택하고 springsecsection7 프로젝트 내에서
사용 가능한 pom.xml 을 선택하여
이 새로운 프로젝트를 가져올 수 있습니다
동일한 것을 선택하고 열기를 클릭하면
방금 만든
새로운 프로젝트가 가져와집니다
Maven에서 필요한 모든 종속성이
새로 만든 프로젝트에 대해 다운 되도록
모든 Maven의 변경사항을 로드하려고 할 것입니다
따라서 종속성이 다운로드 되는 동안
scripts.sql 내에서 실행한 스크립트를
업데이트 하고자 합니다
이렇게 함으로써 참조로 사용할 수 있고
필요할 때마다 권한 테이블을 생성할 수 있습니다
파일 끝에 가서
CREATE TABLE 'authorities'와 지금까지
권한 테이블에 삽입한 스크립트를
모두 붙여 넣습니다
이제 Maven종속성이 모두 성공적으로 다운로드 되었고
springsecsection7 프로젝트에 대해
빌드를 수행할 수 있습니다
이를 위해 Build Module옵션을 선택합니다
이로써 저의 프로젝트 컴파일은
모두 성공적으로 완료되었습니다
다음 단계로 우리는 프로젝트에서
특정 Spring Data JPA 변경을 해야 합니다
이를 통해 우리가 새롭게 생성한 테이블에서의
권한 정보를 로드를 시도할 수 있기 때문입니다
그 부분은 다음 강의에서 살펴볼 수 있습니다
우리가 이번 강의에서 작업해 본 것들에 대해
이해가 잘 되었길 바랍니다
우리는 방금 권한이라는 새로운 테이블을 만들었고
이 테이블을 사용하여 수에 상관없이
엔드 유저의 권한 또는 역할을 저장 할 수 있었습니다
감사합니다 다음 강의에서 뵙겠습니다
수고하셨습니다