프로젝트 시작부터 커스텀 유저 모델로 설계하는 이유와 방법
Django 프로젝트에서 기본 User 모델의 한계를 극복하고 확장성 있는 유저 시스템을 구축하기 위해 프로젝트 시작 시점에 커스텀 유저 모델을 설정하는 방법

기본 User 모델의 한계
필드 확장의 어려움
기본 User 모델은 username, password, email 등 고정된 필드만 제공
닉네임, 휴대폰 번호, 프로필 이미지 등 추가 필드 확장의 제약
인증 방식의 경직성
username을 주요 식별자로 사용하는 구조
현대 웹 서비스에서 선호하는 이메일 기반 로그인 구현의 복잡성
마이그레이션 후 변경 불가능
첫 migrate 실행 후 AUTH_USER_MODEL 변경 시 프로젝트 재시작 수준의 작업 필요
커스텀 유저 모델 설계 전략
AbstractUser 상속
기본 User 모델의 모든 필드와 기능 상속
추가 필드만 정의하면 되는 간단한 구조
대부분의 프로젝트에서 권장되는 방식
AbstractBaseUser 상속
password 관리 등 최소한의 인증 기능만 상속
로그인 ID 필드부터 완전히 새로운 설계 가능
완벽한 커스터마이징이 필요한 경우에만 사용
실전 구현 방법
모델 작성
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
nickname = models.CharField(max_length=30, unique=True, null=True, blank=True)
phone_number = models.CharField(max_length=15, null=True, blank=True)settings.py 설정
INSTALLED_APPS = [
# 기본 앱들...
'users', # users 앱 추가
]
AUTH_USER_MODEL = 'users.User' # 첫 migrate 전 필수 설정사용 예시
from django.contrib.auth import get_user_model
User = get_user_model()실무 활용 팁
유저 모델 참조 방법
다른 앱에서 User 모델 직접 import 금지
settings.AUTH_USER_MODEL또는get_user_model()함수 사용재사용 가능한 앱 구조 유지
이메일 기반 로그인
class User(AbstractUser):
username = None
email = models.EmailField(unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []Last updated
