[Django] Kakao 소셜 로그인

2026. 6. 9. 22:15·Django
반응형

 

일반 회원가입은 사용자가 아이디와 비밀번호를 직접 생성해야 한다.

하지만 최근 대부분의 서비스는 Google, Kakao, Naver 같은 외부 플랫폼 계정을 이용해 간편하게 로그인할 수 있는 기능을 제공한다.

 

 

소셜 로그인(Social Login)

  • 사용자가 별도의 회원가입 없이 이미 가입된 서비스의 계정을 사용하여 웹사이트나 애플리케이션에 로그인할 수 있도록 지원하는 인증 방식
  • Google, Facebook, Naver, Kakao 등의 계정을 통해 다른 서비스에 접속

 

소셜 로그인 동작 과정

1. 사용자 동의 과정

 

사용자가 "카카오 로그인" 버튼을 클릭하면 카카오 로그인 페이지로 이동한다.

class KakaoSocialLoginView(View):
    def get(self, request):
        return redirect(
            f"https://kauth.kakao.com/oauth/authorize"
            f"?client_id={settings.KAKAO_REST_API_KEY}"
            f"&redirect_uri={settings.KAKAO_CALLBACK_URL}"
            f"&response_type=code"
        )

이때 사용자는 카카오에게 다음과 같은 동의를 요청받는다.

  • 이메일 정보 제공
  • 프로필 정보 제공
  • 기타 서비스에서 필요한 정보

사용자가 동의하면 카카오는 우리 서비스가 지정한 Callback URL로 이동시킨다.

 

2. 사용자 정보 조회

 

사용자가 동의했다고 해서 바로 사용자 정보를 받을 수 있는 것은 아니다.

OAuth 인증 과정에서는 다음 두 가지 개념이 등장한다.

  • 인가 코드(authorization code)
    • 사용자의 정보 조회 권한 요청이 성공했다는 것을 확인하는 임시 중개 수단
    • 예시: `http://localhost:8000/users/social/kakao/callback/?code=abcd1234`
      • 여기서 `code` 값이 인가 코드
  • access token
    • 소셜 인증 제공자(Kakao) 서버에 API 요청을 할 수 있는 권한 제공
  • auth code와 access token을 분리하는 이유
    • auth code를 access token으로 교환하는 과정은 인증 서버와의 직접적인 통신으로 이루어지기 때문에 access token 탈취 위험 감소
    • auth code는 일회성으로 사용되고 짧은 시간만 유효
    • access token이 브라우저에 직접 노출되는 것을 방지하여 보안성 높아짐
사용자
↓
Authorization Code
↓
우리 서버
↓
Access Token 요청
↓
카카오 서버

 

3. 회원가입 및 로그인

 

이제 받은 사용자 정보를 기반으로 회원가입 또는 로그인을 수행한다.

  • 카카오 사용자 ID를 기반으로 사용자명을 생성
  • 이미 가입된 사용자라면 바로 로그인
  • 회원이 존재하지 않는 경우 새 계정 생성
  • 비밀번호는 사용자가 직접 입력하지 않기 때문에 임의의 값을 생성하여 저장
  • Django Session이 생성되면서 로그인 상태가 유지

 

class KakaoSocialCallbackView(View):
    def get(self, request):
        # kakao -> django
        auth_token = request.GET.get("code")

        # access_token 교환
        response = requests.post(
            "https://kauth.kakao.com/oauth/token",
            data={
                "grant_type": "authorization_code",
                "client_id": settings.KAKAO_REST_API_KEY,
                "redirect_uri": settings.KAKAO_CALLBACK_URL,
                "code": auth_token,
            },
            headers={
                "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
            }
        )

        if response.ok:
            access_token = response.json().get("access_token")

            # 사용자의 카카오 프로필 조회
            profile_response = requests.get(
                "https://kapi.kakao.com/v2/user/me",
                headers={
                    "Authorization": f"Bearer {access_token}"
                }
            )

            if profile_response.ok:
                # 사용자 프로필 정보 => 회원가입/로그인
                kakao_user_id = profile_response.json()["id"]
                username = f"K#{kakao_user_id}"

                try:
                    # 기존 회원 여부
                    user = User.objects.get(username=username)
                except User.DoesNotExist:
                    # 새로 회원가입
                    email = profile_response.json()["kakao_account"]["email"]
                    user = User.objects.create_user(
                        username=username,
                        email=email,
                        password=str(uuid.uuid4()),
                        social_provider="kakao",
                    )
                
                login(request, user)
                return redirect("home")

        return JsonResponse({"error": "Social login failed."})

 


 

카카오 애플리케이션 등록

카카오 로그인을 사용하려면 먼저 카카오 애플리케이션을 생성해야 한다.

  • 카카오 개발자 사이트: https://developers.kakao.com/
 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해 보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

필수 설정

  • 애플리케이션 생성
  • 카카오 로그인 활성화
  • Redirect URI 등록
  • 이메일 동의 항목 설정
    • 비즈앱 전환 필요
  • REST API 키 복사

 

 

[참고] 실전! Django 입문 강의

반응형
'Django' 카테고리의 다른 글
  • [Django] URL 단축 서비스 만들기
  • [Django] 장고 회원 시스템 (Session과 User Model)
  • [Django] 장고 회원 시스템 (User 모델과 Admin 페이지)
  • [Django] Function-Based View와 Class-Based View
올콩
올콩
콩 심은 데 콩 난다
  • 올콩
    콩스토리
    올콩
  • 전체
    오늘
    어제
    • 분류 전체보기 (226) N
      • SSAFY (10)
      • Algorithm (123)
        • 이론 (6)
        • 백준 (BOJ) (114)
        • 프로그래머스 (2)
        • 코드트리 (1)
      • Trouble Shooting (11)
      • Frontend (7)
      • React (17)
      • Next.js (5)
      • Vue (4)
      • Django (12) N
      • Node.js (2)
      • HTML (9)
      • DevOps (4)
        • Git (4)
      • Language (13)
        • JavaScript (0)
        • Java (13)
      • Embedded (1)
      • CS (5)
        • Network (1)
        • Blockchain (4)
      • 자격증 (2)
      • 기타 (1)
        • Tistory (1)
  • 블로그 메뉴

    • GitHub
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    힙
    그리디
    강의
    싸피
    Algorithm
    중복순열
    SSAFYcial
    구현
    django
    DP
    React
    bfs
    Next.js
    브루트포스
    우선순위큐
    순열
    알고리즘
    SSAFY
    Heap
    수학
    백준
    블록체인
    티스토리챌린지
    dfs
    오블완
    Error
    파이썬
    html5
    백트래킹
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
올콩
[Django] Kakao 소셜 로그인
상단으로

티스토리툴바