수많은 개발자 웹사이트에서는 회원가입 절차 없이 간편하게 로그인할 수 있도록 구글 소셜 인증을 지원하고 있습니다. 이 글에서는 Django 프로젝트에 구글 로그인 기능을 구현하는 방법을 단계별로 자세히 알아보겠습니다.
구글 클라우드 콘솔 설정
- 먼저 Google API Console 대시보드에 접속해 새 프로젝트를 생성합니다.
- OAuth 동의 화면(OAuth consent screen) 메뉴로 이동해 동의 화면을 생성한 후 저장하고 다음 단계로 진행합니다.
- 사용자 인증 정보(Credentials) 메뉴에서 "사용자 인증 정보 만들기"를 클릭한 뒤 "OAuth 클라이언트 ID"를 선택합니다.
- 애플리케이션 유형은 웹 애플리케이션을 고르고, 아래 두 개의 URL을 승인된 리디렉션 URI로 추가합니다.
- https://127.0.0.1:8000/
- https://127.0.0.1:8000/accounts/google/login/callback/
설정을 마치면 클라이언트 ID(Client ID)와 클라이언트 시크릿 키(Secret Key)가 발급됩니다. 이 값들은 외부에 노출되지 않도록 안전하게 보관해 두세요.
Django 프로젝트 예제
Django 프로젝트와 앱을 하나씩 생성합니다. 여기서는 앱 이름을 googleauthentication으로 사용하지만, 원하는 이름으로 자유롭게 지정해도 됩니다.
settings.py 설정
SITE_ID = 1
LOGIN_REDIRECT_URL = "/"
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
"django.contrib.sites", # <--
"allauth", # <--
"allauth.account", # <--
"allauth.socialaccount", # <--
"allauth.socialaccount.providers.google",
"googleauthentication" #my app name, you can name your app anything you want
]
SOCIALACCOUNT_PROVIDERS = {
'google': {
'SCOPE': [
'profile',
'email',
],
'AUTH_PARAMS': {
'access_type': 'online',
}
}
}
#add this in the end of file
AUTHENTICATION_BACKENDS = (
"django.contrib.auth.backends.ModelBackend",
"allauth.account.auth_backends.AuthenticationBackend",
)
위 코드에서는 먼저 리디렉션 URL(LOGIN_REDIRECT_URL)을 정의했습니다. INSTALLED_APPS에는 인증에 사용할 핵심 앱들과 allauth 관련 앱들을 등록했고, SOCIALACCOUNT_PROVIDERS 설정을 통해 로그인 제공자를 구글로 지정했습니다. 또한 SCOPE 항목으로 사용자에게 요청할 정보 범위(프로필, 이메일)도 함께 정의했습니다. 마지막으로 파일 끝에 AUTHENTICATION_BACKENDS를 추가해 Django 기본 백엔드와 allauth 인증 백엔드를 동시에 사용하도록 설정했습니다.
프로젝트 urls.py 설정
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path("accounts/", include("allauth.urls")), #most important
path('',include("googleauthentication.urls")) #my app urls
]
여기서 구글 로그인을 활성화하는 데 가장 중요한 부분은 allauth 라이브러리의 기본 경로("accounts/")입니다. 그 아래 경로는 직접 만든 앱의 URL을 연결하는 부분입니다.
앱 urls.py 설정
from django.urls import path
from . import views
urlpatterns = [
path('',views.home),
]
홈 URL("/")에 뷰를 연결해 화면이 렌더링되도록 설정했습니다.
views.py 작성
from django.shortcuts import render
# Create your views here.
def home(request):
return render(request,'home.html')
여기서는 home.html 템플릿을 단순히 렌더링하는 역할만 담당합니다.
템플릿(home.html) 작성
앱 디렉터리 안에 templates 폴더를 생성하고, 다음 내용을 담은 home.html 파일을 추가합니다.
<!DOCTYPE html>
<html>
<head>
<title>Google Registration</title>
</head>
<body>
{% load socialaccount %}
<h1>My Google Login Project</h1>
<a href="{% provider_login_url 'google'%}?next=/">Login with Google</a>
</body>
</html>
템플릿 상단에서 {% load socialaccount %} 태그로 allauth 라이브러리를 프론트엔드에 로드했습니다. <a> 태그에는 {% provider_login_url 'google' %}를 넣어, 링크를 클릭하면 기본 구글 로그인 화면으로 이동하도록 처리했습니다.
마이그레이션 및 서버 실행
이제 터미널에서 다음 명령어를 차례로 실행합니다.
python manage.py makemigrations python manage.py migrate
다음으로 관리자 페이지 접속을 위한 슈퍼유저(superuser)를 생성합니다.
python manage.py createsuperuser
서버를 시작한 뒤 관리자 패널(admin)로 이동합니다. Sites 항목에서 사이트를 하나 추가하고, 도메인 이름과 표시 이름을 모두 https://127.0.0.1:8000으로 입력합니다.
이어서 Social applications 메뉴에서 애플리케이션을 추가하고, 제공자(provider)는 Google로 선택한 뒤 앞서 발급받은 클라이언트 ID와 시크릿 키를 입력합니다. 그리고 아래 목록에서 방금 추가한 사이트를 선택해 주세요.

이 과정을 마치면 구글이 해당 Django 프로젝트의 인증 백엔드로 정식 등록됩니다. 모든 설정이 끝났으니 이제 결과를 확인해 보겠습니다.
실행 결과

페이지에서 "Login with Google" 링크를 클릭하면 구글 로그인 창이 열리고, 계정을 선택하면 지정한 리디렉션 URL로 돌아오면서 로그인이 완료됩니다.
참고: django-allauth 최신 버전(0.47 이상)을 사용하는 경우, settings.py의 MIDDLEWARE 목록에 "allauth.account.middleware.AccountMiddleware"를 추가해야 정상적으로 동작합니다.