기술블로그-Django편

✅ Django에서 LOGIN_URL, LOGIN_REDIRECT_URL을 설정했는데, 왜 view에서 또 명시해야 할까?

Chansman 2025. 5. 6. 19:33

Django에서 LOGIN_URL, LOGIN_REDIRECT_URL을 설정했는데, 왜 view에서 또 명시해야 할까?

Django에서는 settings.py에 다음과 같은 인증 관련 설정을 자주 사용합니다:

LOGIN_REDIRECT_URL = '/'  # 로그인 성공 후 이동할 기본 경로
LOGOUT_REDIRECT_URL = '/'  # 로그아웃 후 이동할 기본 경로
LOGIN_URL = '/accounts/login/'  # 로그인 페이지 경로

그런데 이렇게 설정해두었는데도, 어떤 상황에서는 views.py에서 아래처럼 직접 작성해야 합니다:

return redirect(settings.LOGIN_URL)

왜 이렇게 두 번 설정해야 하는 걸까요? 아래에 정리해드릴게요 👇


1️⃣ 자동으로 참조되는 상황

Django는 내부적으로 특정 상황에서 settings.py의 설정값들을 자동으로 사용합니다.

설정 Django가 자동으로 사용하는 상황

LOGIN_URL @login_required 데코레이터나 LoginRequiredMixin 사용 시 로그인 안 했을 경우 자동 리디렉션
LOGIN_REDIRECT_URL 로그인 성공 후 next 파라미터가 없으면 자동 이동
LOGOUT_REDIRECT_URL 로그아웃 성공 후 자동 이동

예시:

from django.contrib.auth.decorators import login_required

@login_required
def dashboard(request):
    return HttpResponse("비밀 페이지")
  • 로그인 안 한 사용자가 접속하면 LOGIN_URL로 자동 이동합니다.

2️⃣ 직접 명시해야 하는 상황

반면, 다음과 같이 개발자가 주도적으로 리디렉션 흐름을 제어할 경우, settings.py의 값을 직접 가져와야 합니다:

from django.shortcuts import redirect
from django.conf import settings

def custom_register_view(request):
    # 회원가입 후 수동으로 로그인 페이지로 이동
    return redirect(settings.LOGIN_URL)

✅ 여기서는 Django가 자동으로 이동하지 않기 때문에 직접 redirect()와 settings.LOGIN_URL을 사용해줘야 합니다.


✅ 정리표: 자동 vs 직접

설정값 Django가 자동 사용하는 상황 직접 명시해야 하는 상황

LOGIN_URL 로그인 안 했을 때 @login_required가 감지함 로그인 페이지로 수동 이동할 때
LOGIN_REDIRECT_URL 로그인 성공 시 next 없을 경우 자동 이동 특정 페이지로 보내고 싶을 때 명시 필요
LOGOUT_REDIRECT_URL 로그아웃 후 자동 이동 다른 흐름 처리 시 명시 필요

✨ 결론

  • Django는 특정 상황에서 settings.py 설정을 자동 적용해줍니다.
  • 그러나 개발자가 흐름을 직접 제어할 때는 반드시 명시적으로 redirect() 호출해야 해요.

👉 그러니 settings 값만 설정하고 "왜 안 되지?" 헷갈릴 필요 없어요!

자동으로 처리해주는 케이스와 직접 처리해야 하는 케이스를 구분해서 쓰시면 됩니다 😊