작성
·
351
0
안녕하세요 강사님!
사장 테이블과 사용자 테이블을 나누었을 경우 강의에서는 PrincipatDetails()나 PrincipalDetailsService()에서는 Member를 컴포지션 하고 있는데요
1. 테이블을 나누었을 경우 MemberDetails,OwnerDetails등 각각 따로 만들어줘야하나요?
2. 만약 따로 만들어줘야 하면 로그인 요청이 오면 JwtAuthenticationFilter.attemptAuthentication()가 실행되고 PrincipalDetailsService()가 실행될텐데. 여기서 사장이 로그인 했을 경우와 사용자가 로그인 했을 경우 아이디가 같을 경우 에는 어떻게 처리하면 좋을까요?..
3. 아니면 한 테이블에서 관리하는게 좋을까요?
제가 생각했을 때는 테이블을 사장과 사용자와 합칠 경우에는 가게 테이블과 연관관계 매핑을 하기가 힘들다고 생각했었습니다. 회원은 여러개의 가게를 가질수 있다?
미숙한 질문이지만 답변 부탁드릴게요 !!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
테이블을 분리한 경우에는 보통 각각의 역할(사용자, 사장님 등)에 맞는 UserDetails 구현체를 만드는 것이 일반적입니다. 각각의 업체에 필요한 권한, 유효성 검사 등이 다르기 때문에 분리하여 처리한다면 보다 유연하고 세부적인 보안 정책 구현이 가능합니다.
사용자와 사장님의 로그인 과정에서 동일한 아이디가 존재할 경우를 처리하는 방법으로는 로그인 시 어떤 유형의 사용자인지 구분할 수 있는 추가 정보를 입력받거나, 아이디 자체를 구분할 수 있도록 다르게 설정하는 방법이 있습니다. 예를 들어, 로그인 시 ‘사용자 타입’을 선택하게 하거나, 아이디 앞에 특정 접미어 또는 접두어를 붙여 구분할 수 있습니다.
하나의 테이블에서 모든 사용자를 관리하는 것과 별도로 테이블을 관리하는 것은 각각의 장단점이 있습니다. 하나의 테이블에서 관리할 경우에는 구현의 단순성과 일관된 사용자 관리가 장점이 될 수 있으나, 말씀하신 것처럼 가게와의 연관 관계를 명확히 하는 등의 추가적인 처리가 필요할 수 있습니다. 반대로 테이블을 분리할 경우에는 각 역할에 특화된 처리가 가능하며 유연성이 증가하지만, 구현의 복잡성이 증가할 수 있습니다.
이와 관련해서 Spring Boot Reference Documentation에서는 사용자 계정을 추가하는 가장 쉬운 방법으로 자체 UserDetailsService
빈을 제공하는 것을 언급하고 있고, 여러 인증 옵션에 대해서도 설명하고 있으니 참고하시면 도움이 될 것으로 보입니다.
보안 설정과 관련하여 더 자세한 내용은 Spring Security 프로젝트 페이지와 Spring Security Reference Guide에서 확인하실 수 있습니다.
qheogus55님의 프로젝트가 성공적으로 마무리되기를 바랍니다. 추가적인 질문이 있다면 언제든지 도움을 요청해주세요.