파이썬 Django와 JWT를 활용한 사용자 인증 시스템 구현 방법

소개

이 글에서는 파이썬 Django와 JWT(JSON Web Token)를 활용하여 사용자 인증 시스템을 구현하는 방법을 소개합니다. JWT는 인증 정보를 안전하게 전달하기 위한 표준 방법으로 사용되며, Django는 웹 애플리케이션 개발에 많이 활용되는 프레임워크입니다.

단계

  1. Django 프로젝트 생성
  2. Django 인증 앱 설정
  3. JWT 관련 패키지 설치
  4. 사용자 모델 확장
  5. JWT 토큰 발급 및 인증
  6. API 엔드포인트 보호

1. Django 프로젝트 생성

먼저, Django 프로젝트를 생성합니다. 터미널에서 다음 명령어를 실행합니다:

$ django-admin startproject myproject

2. Django 인증 앱 설정

Django는 기본적으로 인증과 관련된 기능을 제공하며, 인증 앱을 설정하여 사용할 수 있습니다. myproject 디렉토리로 이동한 뒤, 다음 명령어를 실행합니다:

$ cd myproject
$ python manage.py startapp accounts

3. JWT 관련 패키지 설치

JWT를 사용하기 위해 필요한 패키지를 설치합니다. requirements.txt 파일에 다음 내용을 추가한 뒤, 패키지를 설치합니다:

django
djangorestframework
djangorestframework-simplejwt
$ pip install -r requirements.txt

4. 사용자 모델 확장

Django의 기본 사용자 모델을 확장하여 추가 필드를 포함한 커스텀 사용자 모델을 생성합니다. accounts/models.py 파일을 열고 다음 내용을 추가합니다:

from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
    # 추가 필드
    phone_number = models.CharField(max_length=20)

settings.py 파일을 열고 다음 내용을 추가합니다:

AUTH_USER_MODEL = 'accounts.User'

5. JWT 토큰 발급 및 인증

JWT 토큰 발급 및 인증을 위해 accounts/views.py 파일을 열고 다음 내용을 추가합니다:

from rest_framework_simplejwt.views import TokenObtainPairView

class TokenObtainPairView(TokenObtainPairView):
    serializer_class = CustomTokenObtainPairSerializer

# Custom serializer
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer

class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
    @classmethod
    def get_token(cls, user):
        token = super().get_token(user)

        # 추가 정보 포함
        token['phone_number'] = user.phone_number

        return token

urls.py 파일을 열고 다음 내용을 추가합니다:

from accounts.views import TokenObtainPairView

urlpatterns = [
    # ...
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    # ...
]

6. API 엔드포인트 보호

인증이 필요한 API 엔드포인트를 보호하기 위해 settings.py 파일을 열고 다음 내용을 추가합니다:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
}

마무리

이제 파이썬 Django와 JWT를 활용하여 사용자 인증 시스템을 구현할 준비가 되었습니다. 각 단계를 차례로 따라가며 실제 애플리케이션에 적용해보세요. 이를 통해 안전한 인증 시스템을 구축할 수 있을 것입니다.

#developer #python #django #jwt #authentication #webdevelopment