기술블로그-Django편

✅ Django에서 User 모델을 참조하는 두 가지 방식 비교

Chansman 2025. 5. 14. 16:51

✅ Django에서 User 모델을 참조하는 두 가지 방식 비교

Django 프로젝트를 진행하다 보면 User 모델을 다른 앱에서 참조해야 하는 상황이 자주 발생합니다. 이때 보통 두 가지 방식 중 하나를 사용하게 됩니다:

# 방식 1 (admin.py)
from member.models import User

# 방식 2 (models.py 등)
from django.contrib.auth import get_user_model
User = get_user_model()

1️⃣ 두 방식의 차이점 비교

구분 방식 1: from member.models import User 방식 2: User = get_user_model()

사용 시점 모델 정의, admin 등록 등 내부 고정 사용 앱 간 참조, 유연한 확장 필요 시
유저 모델 접근법 직접 import (정적 접근) settings.AUTH_USER_MODEL 기반 (동적 접근)
커스텀 User 대응 한정적 (외부 앱에서 충돌 우려) 안전함 (설정된 모델 자동 인식)
추천 상황 같은 앱 내에서 확실한 사용 시 다른 앱, 외부 모듈, 재사용 코드 시

2️⃣ 방식 1: 직접 import (from member.models import User)

📍 사용 예시:

# member/admin.py
from member.models import User

@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    pass

✔️ 장점:

  • 직접 정의한 User 모델을 확실하게 가져옴
  • admin 등록 시 명확한 참조가 가능함

주의점:

  • 커스텀 유저 모델 변경 시 다른 앱에서 오류 발생 가능
  • settings.py의 AUTH_USER_MODEL 설정과 충돌할 수 있음

3️⃣ 방식 2: get_user_model() 함수 사용

📍 사용 예시:

# post/models.py
from django.contrib.auth import get_user_model
User = get_user_model()

class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)

✔️ 장점:

  • 설정된 AUTH_USER_MODEL 값을 동적으로 불러옴
  • 다양한 앱에서도 항상 일관된 User 모델을 참조 가능
  • 다른 프로젝트로 코드 복사 시 호환성 우수

💡 get_user_model()은 다음 설정을 기반으로 작동합니다:

# settings.py
AUTH_USER_MODEL = 'member.User'

주의점:

  • 앱 초기 실행 이전에 사용 시 Circular Import 발생 가능성 (주의 깊게 사용)

4️⃣ Django 권장 방식은?

"외부 앱, models.py, views.py, forms.py 등에서는 항상 get_user_model() 사용을 권장합니다."

✅ Django 공식 문서에서도 커스텀 유저 모델 대응을 위해 get_user_model() 사용을 적극 권장합니다.


🔚 정리: 언제 어떤 방식을 써야 하나요?

상황 추천 방식

admin.py에서 모델 등록 시 from member.models import User
다른 앱에서 User를 FK로 참조할 때 get_user_model()
폼, 뷰, API 등 재사용성이 있는 코드 get_user_model()
외부 라이브러리, 패키지 코드 get_user_model()

📌 실전 팁

  • admin.py와 같이 앱 내부 전용 코드에서는 직접 import가 간편합니다.
  • 다른 앱 간 협업, 유지보수성, 확장성을 고려할 경우엔 **get_user_model()**이 필수입니다.

이제 상황에 맞는 방식으로 User 모델을 올바르게 참조해 보세요!
장고의 유연함을 잘 활용하면 프로젝트 유지보수와 협업이 훨씬 쉬워집니다 💡