✅ Django에서 사용자(User) 모델을 설정하는 3가지 방법과 사용법 정리

2025. 5. 12. 14:51·기술블로그-Django편

✅ Django에서 사용자(User) 모델을 설정하는 3가지 방법과 사용법 정리


1️⃣ 기본 User 모델 사용 (권장 ❌)

from django.contrib.auth.models import User
  • Django에서 기본 제공하는 User 모델 사용
  • username, email, password 등 기본 필드만 사용 가능
  • settings.py에서 따로 AUTH_USER_MODEL 설정 필요 없음

❌ 단점:

  • 필드 추가 불가
  • 실무에서 확장성 부족
  • 추후 변경 불가능 (초기 마이그레이션 이후 커스텀 불가)

2️⃣ AbstractUser 상속 방식 (⭐ 가장 많이 쓰는 방식)

# user/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    phone = models.CharField(max_length=20, null=True, blank=True)  # 예시: 사용자 전화번호
# settings.py
AUTH_USER_MODEL = "user.CustomUser"
  • 기본 User 모델 구조를 유지하면서 필드만 추가 가능
  • Django 인증 시스템 기능 (is_authenticated, login, admin, groups) 그대로 사용 가능

✅ 장점:

  • 기본 기능 + 확장성 확보
  • 실무에서 추천되는 안전한 방법

⚠️ 주의:

  • 반드시 migrate 이전에 AUTH_USER_MODEL 설정해야 함

3️⃣ AbstractBaseUser 직접 구현 (고급)

# user/models.py
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.db import models

class CustomUserManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        if not email:
            raise ValueError("Email is required")
        user = self.model(email=self.normalize_email(email), **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

class CustomUser(AbstractBaseUser):
    email = models.EmailField(unique=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    objects = CustomUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []
# settings.py
AUTH_USER_MODEL = "user.CustomUser"

✅ 장점:

  • 인증 로직과 필드를 전부 내 입맛대로 커스터마이징 가능

❌ 단점:

  • 구현이 복잡하고 에러 발생 가능성 높음
  • UserAdmin 등도 따로 등록해야 함

🔧 AUTH_USER_MODEL 설정의 의미와 중요성

  • Django 전체에서 사용할 사용자 모델을 지정하는 설정
  • 기본값은 'auth.User', 커스터마이징할 경우 반드시 설정 필요
# settings.py
AUTH_USER_MODEL = 'user.CustomUser'

왜 필요할까?

  • Django의 모든 인증 관련 기능 (get_user_model(), 로그인 폼, 관리자 등)이 이 설정을 기준으로 사용자 모델을 참조함
  • 이 설정 없이 CustomUser를 정의하면 Django는 여전히 auth.User를 사용하려고 하며, 충돌 발생함

언제 설정해야 하나?

  • 프로젝트 초기, 최초 마이그레이션 전
  • makemigrations 이후에 바꾸면 기존 DB 구조와 충돌함 → 에러 발생
You cannot change AUTH_USER_MODEL after the first migration

✅ settings.py와 models.py 정리 예시

📁 user/models.py

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    phone_number = models.CharField(max_length=20, null=True, blank=True)

📁 user/apps.py

from django.apps import AppConfig

class UserConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'user'

📄 settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'user.apps.UserConfig',
    # 기타 앱들...
]

AUTH_USER_MODEL = 'user.CustomUser'

🎯 요약 정리

방식 상속 대상 인증 기능 유지 필드 커스터마이징 실무 권장

기본 User User ✅ ❌ ❌
AbstractUser AbstractUser ✅ ✅ ⭐ 추천
AbstractBaseUser AbstractBaseUser ❌ (직접 구현) ✅ 고급용

실무에서는 AbstractUser 방식이 가장 안전하고 많이 사용됩니다.

'기술블로그-Django편' 카테고리의 다른 글

🔐 SHA-256 복호화? 가능한가요?  (0) 2025.05.12
✅ Django 모델 필드 설정: null=True 와 blank=True 차이 완벽 정리  (0) 2025.05.12
[Python 개발 필수 3대 도구 비교 정리: venv, pyenv, poetry]  (0) 2025.05.12
📌 IP 주소와 Port란? 인터넷 통신의 핵심 개념 시각화 정리  (0) 2025.05.12
📌 Poetry vs pyenv 차이점 완전 정리  (0) 2025.05.12
'기술블로그-Django편' 카테고리의 다른 글
  • 🔐 SHA-256 복호화? 가능한가요?
  • ✅ Django 모델 필드 설정: null=True 와 blank=True 차이 완벽 정리
  • [Python 개발 필수 3대 도구 비교 정리: venv, pyenv, poetry]
  • 📌 IP 주소와 Port란? 인터넷 통신의 핵심 개념 시각화 정리
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (739) N
      • Python (32)
      • 프로젝트 (63) N
      • 과제 (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) N
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
✅ Django에서 사용자(User) 모델을 설정하는 3가지 방법과 사용법 정리
상단으로

티스토리툴바