장고 쇼핑몰 구현관련

질문 포럼분류: 강의 관련 질문장고 쇼핑몰 구현관련
정철민 질문함 2년 전

강의는 정말 재미있게 듣고 있습니다.
선생님의 쇼핑몰 예제 보니 User Model과 별개의 Profile Model 테이블을 만들어서 이들을 One-to-One 관계로 묶으셨더군요
보니깐 장고에서 custom user model을 사용하는 방법이 총 3가지가 있는데 (abstractuser, abstractbaseuser)
이 one-to-one 방식을 쓰신 이유가 궁금하고
 
제가 구현하고자 하는 사이트는
allauth로 로그인하되 custom user model을 쓰고 싶은데 그러면 마찬가지로 one-to-one방식으로 해도 괜찮을까요?

정철민 답변함 2년 전

인터넷에서 찾은건데

계정 프로필 필드 추가 구현
계정 프로필을 위해 필드를 추가하는 방법은 크게 3가지가 있다. * AbstractBaseUser 클래스를 상속한 커스텀 모델 정의 * AbstractUser 클래스를 상속한 커스텀 모델 정의 * 일대일 관계로 프로필을 위한 테이블의 추가

자세한 설명은 User 모델의 확장 기법 비교 내용을 참고한다.

AbstractBaseUser 클래스를 상속하는 가장 큰 이유 중에 하나가 로그인 아이디로 username 대신에 email을 사용하기 위함인데 django-allauth 패키지를 사용할 경우에는 ACCOUNT_AUTHENTICATION_METHOD = ’email’ 옵션으로 간단히 해결된다.

그러면 사용자 프로필 페이지를 위해 AbstractUser 클래스를 상속하는 방법과 일대일 관계로 프로필 테이블을 추가하는 방법이 있는데 프로필 페이지에는 데이터의 크기가 큰 정보들이 많으므로 회원수가 증가하면 auth_user 테이블이 지나치게 커질 수가 있다. 따라서 결국 Django 공식문서가 권장하는 방식인 일대일 테이블 추가가 가장 현실적인 대안이 될 수 있다고 생각한다.

이것 때문인가요? 출처 https://wikidocs.net/9942

1 답변
user 스탭 답변함 2년 전

감사합니다.
1.Custom User Model을 사용할 때, 일대일 관계로 프로필 테이블을 추가하는 방법이 가장 권장되는 이유는, User 모델이 매우 중요한 역할을 하기 때문입니다. User 모델은 로그인, 권한 부여, 인증, 세션 등과 같은 매우 중요한 기능을 수행하기 때문에, 이를 변경하는 것은 매우 조심스러운 작업입니다.
따라서 User 모델을 변경하는 것보다는, User 모델과는 별개의 Profile 모델을 추가해서 사용하는 것이 좋습니다. 이렇게 하면 User 모델의 기능을 유지하면서도, Profile 모델에 원하는 필드를 추가할 수 있습니다.
만약 allauth로 로그인하면서 Custom User Model을 사용하고자 한다면, One-to-One 관계로 Profile 모델을 추가하는 방법도 가능합니다. 이 방법은 User 모델을 변경하지 않고도, 필요한 정보를 추가할 수 있기 때문에 유용합니다. 다만, 데이터의 크기가 큰 정보들이 많다면, 이 방법이 auth_user 테이블의 크기를 커지게 할 수 있기 때문에, 잘 고려해서 사용해야 합니다.
추가로, abstractuser와 abstractbaseuser의 차이점은, abstractuser가 email과 같은 추가 필드를 가지고 있는 반면, abstractbaseuser는 필드가 없이 기본적인 유저 모델을 제공한다는 점입니다. abstractuser를 사용하면, User 모델에서 필요한 필드를 쉽게 추가할 수 있습니다.

2. 또 allauth 의 관점에서 추가 답변 드립니다.

참고 강의 
샵투스쿨 분교 – 기술보국(技術報國) (shop2world.com)
allauth는 Django에서 인증 기능을 쉽게 구현할 수 있도록 해주는 라이브러리입니다. 이 라이브러리를 사용하면 사용자 로그인, 회원가입, 비밀번호 변경, 소셜 로그인 등 다양한 인증 기능을 쉽게 구현할 수 있습니다.
일반적으로 allauth를 사용할 때는 Django의 기본 User 모델을 사용합니다. 그러나 Django에서 기본 User 모델을 확장하고자 할 때는 AbstractUser나 AbstractBaseUser 클래스를 상속받아 새로운 User 모델을 만들 수 있습니다. 이렇게 만든 User 모델을 allauth에서 사용하려면 settings.py 파일에서 AUTH_USER_MODEL 변수를 새로 만든 User 모델로 지정해주면 됩니다.
샵투스쿨 분교의 블로그를 보면 allauth를 사용하여 소셜 로그인 기능을 구현한 예시를 볼 수 있습니다. 이를 통해 allauth를 사용하여 간단하게 소셜 로그인을 구현할 수 있다는 것을 알 수 있습니다.
따라서, allauth를 사용하여 custom user model을 구현한 경우에도 one-to-one 방식으로 Profile 모델을 만드는 것은 가능합니다. 일반적으로 Django 공식 문서에서도 이 방식을 권장하고 있으며, 실제로 많은 프로젝트에서 이 방식을 사용하고 있습니다. Profile 모델을 One-to-One으로 연결하는 것은 User 모델과 Profile 모델을 별도로 관리할 수 있기 때문에, 유지보수 및 확장성 측면에서 유리합니다.

그리고 실제 프로젝트를 진행하면서 문의가 생기신다면 언제든지 부담 없이 문의해주세요. 필요한 정보를 최대한 상세히 제공해주시면 보다 정확하고 친절한 답변을 드릴 수 있을 것입니다. 함께 문제를 해결해 나갈 수 있도록 최선을 다하겠습니다.

shop2school 제휴 문의1-302-613 -1812 |이메일 info@shop2world.com | 법인명: SHOP2WORLD, INC. | 2801 CENTERVILLE RD 1ST FLOOR PMB 8085 WILMINGTON DE 19808 USA.