인프런 커뮤니티 질문&답변

BubblingSODA님의 프로필 이미지

작성한 질문수

Spring Boot JWT Tutorial

JWT 소개, 프로젝트 생성

유저 권한 설정

24.01.05 22:16 작성

·

247

0

동영상 강의에서 하신대로 @ManyToMany @JoinTable( name = "user_authority", joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "user_id")}, inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "authority_name")}) private Set<Authority> authorities; 이렇게 할 수 도 있는데  Enum타입으로 하는 방법도 있는것으로 알고있습니다.이렇게 했을 때 두개의 차이점은 뭘까요?! 장단점을 알고싶습니다.제가 생각했을 때는 알려주신 방법은 데이터베이스를 만들어야하니 조인문도 필요할 것 같고 그럼 쿼리가 많이 쌓이게 되면 부하도 커질 것 같고 하지만 한 유저가 여러개의 권한을 가질 수 있다는 장점?이 있을 것 같고제가 말한 enum타입은 쿼리문 작성은 단순해지는 반면 유저가 하나의 권한밖에 못 가지니 그건 상황에 따라 안좋을 수도 잇을 것 같네요 궁금해서 질문 남깁니다. 좋은 강의 감사합니다!!

답변 2

1

정은구님의 프로필 이미지
정은구
지식공유자

2024. 01. 07. 11:02

안녕하세요! 좋은 질문 감사드립니다!

말씀하신대로 상황에 따라 Enum을 사용하시는 것이 유리할 수 있습니다!

하지만 반대되는 의견들도 있는데요! 관련해서 아래 글을 참고하시면 도움이 되실 것 같습니다.

https://velog.io/@leejh3224/%EB%B2%88%EC%97%AD-MySQL%EC%9D%98-ENUM-%ED%83%80%EC%9E%85%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80-%EB%A7%90%EC%95%84%EC%95%BC-%ED%95%A0-8%EA%B0%80%EC%A7%80-%EC%9D%B4%EC%9C%A0

PS. 저는 꼭 Enum을 쓰지말자! 는 아닙니다. 😄

BubblingSODA님의 프로필 이미지
BubblingSODA
질문자

2024. 01. 08. 18:17

답변 감사합니다!!

1

인프런 AI 인턴님의 프로필 이미지

2024. 01. 06. 22:22

안녕하세요, 인프런 AI 인턴입니다.

님께서 질문하신 @ManyToManyEnum 타입으로 권한을 표현하는 방식의 차이점에 대해 설명드릴게요.

@ManyToMany를 사용한 방법은 하나의 User 엔터티가 여러 개의 Authority를 가질 수 있도록 하는 관계를 명시합니다. 이 방법의 장점은 유연성에 있습니다. 한 유저가 다양한 권한을 가질 수 있고, 시스템이 커지거나 사용자 역할이 복잡해질 경우에도 대응하기 쉽습니다. 하지만, 조인 테이블을 두고 관리해야 하므로, 데이터베이스의 복잡성이 증가하고, 조인 쿼리에 의한 부하가 커질 가능성이 있습니다.

반면에, Enum 타입을 사용하는 방식은 열거형을 통해 미리 정의된 권한만을 부여할 수 있습니다. 이 방식의 장점은 구현의 단순함에 있으며, 쿼리가 단순해진다는 점에서 성능적인 이점을 가질 수 있습니다. 다만, 유저가 단 하나의 권한만 가진다는 뜻이므로, 유연성이 상대적으로 떨어집니다. 권한 관리가 단일 차원으로 이루어져 향후 확장이나 변경이 필요할 때 구조를 바꾸는 데 제약이 있을 수 있습니다.

실제 사용 시에는 어플리케이션의 요구사항, 성능 및 유지보수의 측면을 고려하여 적합한 방법을 선택하는 것이 중요합니다.

좋은 강의라고 말씀해주셔서 감사합니다. 다른 궁금한 점이 있으면 언제든 질문해주세요. BubblingSODA님의 개발 학습에 도움이 될 수 있도록 노력하겠습니다.

BubblingSODA님의 프로필 이미지
BubblingSODA
질문자

2024. 01. 08. 18:17

좋은 답변 감사합니다!!!