특강
[Django 1일차] 커스텀 유저 모델 구축 및 회원 시스템 설계 4/4 (250512)
Chansman
2025. 5. 12. 20:45
Django 커스텀 유저 모델 구축 및 회원 시스템 설계
Django는 회원 시스템을 기본적으로 내장하고 있으며, 다양한 방식으로 유저 모델을 정의하고 확장할 수 있습니다. 본 포스트에서는 세 가지 방식(기본 사용, 직접 생성, 추상 모델 상속)의 차이를 설명하고, 실제 커스텀 유저 모델 생성부터 마이그레이션, 소셜 로그인 필드 추가까지의 과정을 상세하게 다룹니다.
1️⃣ Django 에서 앱과 회원 시스템 설정하기
🧩 앱 등록 원리
- 장고는 user, auth, admin, sessions 등 다양한 기본 앱을 제공하며 삭제하지 않고 활용하는 것이 일반적입니다.
- 직접 만든 앱(예: user, shortner)은 반드시 INSTALLED_APPS에 등록해야 하며, 이때 apps.py에 정의된 AppConfig 클래스를 연결합니다.
- 등록하지 않으면 장고는 폴더를 인식하지 못하며, 마이그레이션, ORM 연동 등이 동작하지 않습니다.
🔄 앱 등록 예시
# settings.py
INSTALLED_APPS = [
'user.apps.UserConfig',
'shortner.apps.ShortnerConfig',
# 기본 앱들 생략...
]
2️⃣ Django의 회원 시스템과 구조적 차이
🔍 Django vs Flask
항목 Django Flask
구조 | 배터리 포함 프레임워크 | 경량 프레임워크 |
회원 시스템 | 기본 내장 (User, Login, Logout 등) | 직접 구현 필요 |
- Django는 회원 가입, 로그인, 로그아웃, 비밀번호 변경, 이메일 전송 등 대부분의 기능을 내장하고 있어 빠른 개발이 가능합니다.
3️⃣ 가상환경 설정 및 마이그레이션 실행
⚙️ 설정 흐름
- python manage.py showmigrations: 마이그레이션 상태 확인
- python manage.py migrate: DB 테이블 생성 및 적용
- 가상환경이 적용되지 않으면 명령어가 작동하지 않으므로, PyCharm에서 Local Interpreter 설정이 필요합니다.
🧭 ORM 기반 구조 확인
- Django는 테이블을 직접 정의하지 않고, models.py에서 클래스 기반으로 정의한 모델을 ORM이 해석하여 마이그레이션 파일을 생성합니다.
- 예시: auth_user 테이블은 AbstractUser를 기반으로 자동 생성됩니다.
4️⃣ 유저 모델 3가지 접근 방식
방식 설명 장단점
1번 | 장고 기본 유저 모델 사용 | ✅ 빠름 / ❌ 커스터마이징 불가 |
2번 | 직접 유저 모델 생성 | ✅ 완전한 자유도 / ❌ 구현 부담 큼 |
3번 | AbstractUser 상속 후 커스터마이징 | ✅ 유연성과 내장 기능 활용 가능 / ⭐ 권장 방식 |
🧠 우리는 3번 방식으로 진행합니다. 이유: 대부분의 기능을 기본으로 유지하면서도 필요한 부분만 수정 가능하기 때문입니다.
5️⃣ 커스텀 유저 모델 설정 절차
📍 유의사항
- 프로젝트 초기 migrate를 실행하면 기본 User 모델이 고정되므로, 커스텀 모델 사용 시 반드시 먼저 정의해야 함.
🔨 커스텀 유저 모델 생성
# user/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
social_provider = models.CharField(max_length=8, null=True) # 소셜 로그인 제공자
⚙️ settings.py에 등록
AUTH_USER_MODEL = 'user.CustomUser'
🛠️ 마이그레이션 처리
python manage.py makemigrations
python manage.py migrate
📦 결과 확인
- DB 테이블 명: user_customuser
- 구조: 기본 유저 모델과 동일하나, 커스텀 필드(social_provider) 추가됨
6️⃣ 마이그레이션 처리 시 주의사항
- 이미 migrate를 실행한 경우:
- db.sqlite3 삭제 → 구조 초기화
- 또는 migrations 롤백 처리 필요 (복잡함)
- 마이그레이션 전 구조 설계 완료가 중요
⚠️ 실무에서는 초기 설정 실수로 유저 모델 변경 시 큰 비용이 발생하므로, 반드시 초기에 CustomUser로 설정해야 합니다.
7️⃣ 필드 추가 예시
# models.py
social_provider = models.CharField(max_length=8, null=True)
- null=True: 일반 회원가입일 경우 비어 있음
- 카카오, 구글, 페이스북 등 값으로 구분 가능
- 소셜 로그인 도입 시 확장 가능 구조로 설계
8️⃣ Django ORM과 모델 반영
요소 설명
Model | 파이썬 클래스로 DB 테이블 구조 정의 |
Migration | 변경 이력을 기록한 파일 (버전 관리처럼 동작) |
migrate | 실제 DB 테이블 생성 및 변경 적용 |
python manage.py makemigrations # 모델 변경 시마다 실행
python manage.py migrate # DB에 반영
✅ 마무리 체크리스트
- 기본 유저 모델의 한계 이해
- AbstractUser 기반 커스텀 유저 모델 정의
- AUTH_USER_MODEL 설정 적용
- 소셜 로그인 필드 추가 및 구조 반영
- ORM → Migration → DB 반영 흐름 이해
📌 다음 단계에서는 회원가입, 로그인/로그아웃, 이메일 인증 기능까지 연계하는 로직을 단계별로 구현할 예정입니다!