Chapter 8-2 Django에서 커스텀 유저 모델 만들기 (AbstractBaseUser 활용)

2025. 5. 12. 20:13·Django
목차
  1. Django에서 커스텀 유저 모델 만들기 (AbstractBaseUser 활용)
  2. ✅ 1. 앱 생성: member
  3. ✅ 2. 모델 정의: member/models.py
  4. ✅ 3. settings.py 설정 변경
  5. ✅ 4. 마이그레이션 수행
  6. ✅ 5. 관리자 패널 접속 테스트
  7. ✅ 6. 개발 편의 도구 설치 (선택사항)
  8. ⚠️ 주의사항
  9. 💡 정리

Django에서 커스텀 유저 모델 만들기 (AbstractBaseUser 활용)

Django 프로젝트를 처음 설정할 때, 기본 User 모델을 그대로 사용하는 대신 이메일 기반 로그인, 닉네임 필드 추가, 유저 권한 직접 정의 등을 위해 AbstractBaseUser를 활용한 커스텀 유저 모델을 만드는 경우가 많습니다.

이번 포스트에서는 첫 마이그레이션 전에 커스텀 유저 모델을 설정하는 전체 흐름을 단계별로 정리합니다.


✅ 1. 앱 생성: member

python manage.py startapp member
  • 유저 모델을 따로 관리할 앱으로 member를 생성합니다.
  • 이후 settings.py에 INSTALLED_APPS 등록 필요.

✅ 2. 모델 정의: member/models.py

from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
from django.db import models

class UserManager(BaseUserManager):
    def create_user(self, email, password):
        if not email:
            raise ValueError('올바른 이메일을 입력하세요.')

        user = self.model(email=self.normalize_email(email))
        user.set_password(password)
        user.is_active = False
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password):
        user = self.create_user(email, password)
        user.is_admin = True
        user.is_active = True
        user.save(using=self._db)
        return user

class User(AbstractBaseUser):
    email = models.EmailField(verbose_name='email', unique=True)
    nickname = models.CharField('nickname', max_length=20, unique=True)
    is_active = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)

    objects = UserManager()

    USERNAME_FIELD = 'email'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = []

    class Meta:
        verbose_name = '유저'
        verbose_name_plural = f'{verbose_name} 목록'

    def get_full_name(self):
        return self.nickname

    def get_short_name(self):
        return self.nickname

    def __str__(self):
        return self.nickname

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    @property
    def is_staff(self):
        return self.is_admin

    @property
    def is_superuser(self):
        return self.is_admin

🔍 핵심 설명

  • AbstractBaseUser : Django 기본 인증 로직만 제공 (username 없음)
  • UserManager : 일반 유저/슈퍼유저 생성 함수 정의 필수
  • is_staff, is_superuser : 관리자 페이지 접근 권한에 사용됨
  • USERNAME_FIELD = 'email' : 이메일로 로그인 설정

✅ 3. settings.py 설정 변경

# settings.py
AUTH_USER_MODEL = 'member.User'
  • 반드시 마이그레이션 전에 설정해야 오류 없이 적용됩니다.

✅ 4. 마이그레이션 수행

python manage.py makemigrations member
python manage.py migrate
  • 최초 User 모델을 기반으로 DB 테이블이 생성됩니다.

✅ 5. 관리자 패널 접속 테스트

  1. 슈퍼유저 생성
python manage.py createsuperuser
# 이메일, 비밀번호 입력
  1. 서버 실행 후 로그인
python manage.py runserver
  • http://127.0.0.1:8000/admin 에 접속하여 정상 작동 확인

✅ 6. 개발 편의 도구 설치 (선택사항)

poetry add django-extensions
  • shell_plus, runscript 등의 유용한 도구 활용 가능
  • settings.py에 django_extensions 등록 필요

⚠️ 주의사항

  • 커스텀 유저 모델은 첫 마이그레이션 이전에 반드시 설정해야 함.
  • 이후 변경은 매우 어렵고 데이터 마이그레이션까지 필요할 수 있음.

💡 정리

항목 설명

커스텀 유저 AbstractBaseUser 상속 후 email 기반 로그인 구성
UserManager 유저 생성 함수 정의 필수 (create_user, create_superuser)
AUTH_USER_MODEL settings.py에 반드시 지정해야 함
관리자 권한 is_admin → is_staff, is_superuser 속성 연결

Django 프로젝트를 보다 유연하게 구성하려면, 커스텀 유저 모델 설계는 초기에 정확히 설정해두는 것이 매우 중요합니다.

추후 소셜 로그인, 권한 관리 확장, 유저 프로필 커스터마이징에 유리하므로 실무에서도 자주 사용되는 패턴입니다.

'Django' 카테고리의 다른 글

Chapter 8-4 환경변수 관리와 python-dotenv 사용법  (0) 2025.05.12
Chapter 8-3 Django 회원가입 페이지 만들기 (정적 파일 + 폼 커스텀 + 뷰 구현)  (0) 2025.05.12
Chapter 8-1 [인스타그램] 회원가입 및 로그인 기능 만들기  (0) 2025.05.12
🚀 Django REST Framework (DRF) 개요 & API 개발 정보 ( 라이브세션 1일차 강의자료 )  (0) 2025.05.12
Chapter 7-5 Django 블로그 이미지 포토 및 얻어서 생성하는 썸네일 구현  (0) 2025.05.11
  1. Django에서 커스텀 유저 모델 만들기 (AbstractBaseUser 활용)
  2. ✅ 1. 앱 생성: member
  3. ✅ 2. 모델 정의: member/models.py
  4. ✅ 3. settings.py 설정 변경
  5. ✅ 4. 마이그레이션 수행
  6. ✅ 5. 관리자 패널 접속 테스트
  7. ✅ 6. 개발 편의 도구 설치 (선택사항)
  8. ⚠️ 주의사항
  9. 💡 정리
'Django' 카테고리의 다른 글
  • Chapter 8-4 환경변수 관리와 python-dotenv 사용법
  • Chapter 8-3 Django 회원가입 페이지 만들기 (정적 파일 + 폼 커스텀 + 뷰 구현)
  • Chapter 8-1 [인스타그램] 회원가입 및 로그인 기능 만들기
  • 🚀 Django REST Framework (DRF) 개요 & API 개발 정보 ( 라이브세션 1일차 강의자료 )
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (787)
      • Python (32)
      • 프로젝트 (110)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    urbantrends
    RM
    self-growth
    americaparty
    livebroadcast
    btsjungkook
    titaniumcase
    basalcellcarcinoma
    smartphonedurability
    btscomeback
    youngprofessionals
    gpterror
    college reunions
    chinanightlife
    life reflection
    americanlaw
    classaction
    btsdischarge
    뷔
    newpoliticalparty
    btsreunion
    bts
    lawsuitculture
    homebartrend
    chatgpterror
    travel ban
    global politics
    trumpmuskclash
    remittance
    hotcoffeecase
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 8-2 Django에서 커스텀 유저 모델 만들기 (AbstractBaseUser 활용)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.