기술블로그-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 모델을 올바르게 참조해 보세요!
장고의 유연함을 잘 활용하면 프로젝트 유지보수와 협업이 훨씬 쉬워집니다 💡