특강

[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 반영 흐름 이해

📌 다음 단계에서는 회원가입, 로그인/로그아웃, 이메일 인증 기능까지 연계하는 로직을 단계별로 구현할 예정입니다!