본문 바로가기

Django에서 JWT 인증 적용하기

_Big 2025. 5. 17.
반응형

django 로고 이미지


현대적인 API를 구축할 때, 엔드포인트 보안은 필수 요소입니다. 웹 API를 보호하는 가장 인기 있는 방법 중 하나는 JWT(JSON Web Token) 인증입니다. JWT는 상태를 저장하지 않는 토큰 기반 인증 방식으로, 웹과 모바일 플랫폼 모두에 적합합니다.

이 가이드에서는 Django REST Framework와 djangorestframework-simplejwt 패키지를 활용하여 Django 프로젝트에 JWT 인증을 통합하는 방법을 단계별로 안내합니다.

서론

JWT는 JSON Web Token의 약자로, 두 개체 간에 정보를 안전하게 전달하기 위한 간결하고 독립적인 방법입니다. 세션 기반 인증과 달리 JWT는 쿠키나 서버 세션에 의존하지 않기 때문에 RESTful API와 SPA(싱글 페이지 앱)에 이상적입니다.

이제 설정 단계를 하나씩 살펴보며, JWT로 엔드포인트를 보호하는 방법을 알아보겠습니다.

1. 필수 패키지 설치

Django REST Framework와 JWT 확장 모듈을 설치합니다:

pip install djangorestframework
pip install djangorestframework-simplejwt

그리고 settings.pyINSTALLED_APPS'rest_framework'를 추가하세요.

 

2. JWT 인증 설정 추가

settings.py에 JWT를 기본 인증 방식으로 설정합니다:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
}

이제 모든 뷰에서 JWT 토큰을 인식하고 검증할 수 있습니다.

 

3. 토큰 발급/갱신 뷰 설정

JWT를 발급하고 갱신하기 위한 엔드포인트를 설정합니다. urls.py에 다음을 추가하세요:

from django.urls import path
from rest_framework_simplejwt.views import (
    TokenObtainPairView,
    TokenRefreshView,
)

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

이제 /api/token/ 경로를 통해 토큰을 발급받고, /api/token/refresh/로 갱신할 수 있습니다.

 

4. JWT로 API 엔드포인트 보호하기

JWT 토큰이 필요한 뷰를 설정하려면 인증 및 권한 클래스를 지정하세요:

from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView
from rest_framework.response import Response

class ProtectedView(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request):
        return Response({'message': 'You are authenticated'})

이제 유효한 JWT를 가진 인증된 사용자만 이 뷰에 접근할 수 있습니다.

 

5. JWT의 동작 방식

  • 사용자가 로그인하면 /api/token/에 로그인 정보 전달
  • 서버가 액세스 토큰과 리프레시 토큰을 반환
  • 클라이언트는 토큰을 저장 (예: localStorage)
  • API 요청 시 Authorization 헤더에 액세스 토큰 포함
  • 토큰 만료 시? /api/token/refresh/로 새 토큰 요청

 

마치며

JWT 인증은 API를 보호하는 데 있어 현대적이고, 안전하며, 확장 가능한 방법입니다. Django REST Framework와 simplejwt 패키지를 통해 빠르고 안전하게 구현할 수 있습니다.

여러분은 Django 프로젝트에서 JWT를 어떻게 활용하고 계신가요? 설정 방식이나 질문이 있다면 댓글로 공유해 주세요—여러분의 API를 안전하게 만드는 데 도움을 드리겠습니다!

 

 

Django 모델링: 데이터베이스 설계의 핵심

강력한 웹 애플리케이션은 모두 잘 구조화된 데이터베이스 위에 구축됩니다. Django 세계에서는 데이터를 제대로 모델링하는 것이 모든 것의 출발점입니다—사용자 인터랙션부터 백엔드 처리까

bigadmin.org

 

반응형

댓글