Django REST Framework를 사용해 본 개발자라면 JWT 인증에 대해 이미 알고 있을 것입니다. JWT(JSON Web Token)는 토큰 기반 인증을 위한 방식으로, Django 환경에서 가장 널리 사용되는 인증 방법 중 하나입니다. 이 글에서는 Django REST Framework에서 JWT 인증을 설정하고 활용하는 방법을 단계별로 살펴보겠습니다.
JWT란 무엇인가?
JWT는 JSON Web Token의 약자로, 클라이언트와 서버 간에 정보를 안전하게 전송하기 위한 컴팩트하고 자기 포함적인 토큰 형식입니다. 세션 기반 인증과 달리 서버에 상태를 저장할 필요가 없어 API 서버 확장성 측면에서 큰 장점을 가집니다.
1. 패키지 설치
먼저 필요한 패키지를 설치합니다.
pip install djangorestframework-simplejwt pip install djangorestframework
이 예제에서는 별도의 앱을 만들 필요가 없습니다. Django REST Framework의 기본 프론트엔드와 인증 백엔드만 설정하면 충분합니다.
2. settings.py 설정
프로젝트의 settings.py 파일에 다음 내용을 추가합니다.
INSTALLED_APPS = [
...
'rest_framework_simplejwt',
'rest_framework'
...]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
)
}여기서는 rest_framework와 rest_framework_simplejwt를 앱으로 등록하고, 기본 인증 클래스로 JWT 인증을 지정했습니다. 이렇게 하면 모든 API 뷰에서 JWT 기반 인증이 적용됩니다.
3. urls.py 설정
프로젝트의 urls.py 파일에 다음 코드를 추가합니다.
from django.urls import path
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
)
urlpatterns = [
path('admin/', admin.site.urls),
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]여기서 두 개의 URL을 추가했습니다.
- /api/token/: 사용자 이름(username)과 비밀번호(password)를 전송하여 액세스 토큰(access token)과 리프레시 토큰(refresh token)을 발급받는 엔드포인트입니다.
- /api/token/refresh/: 만료된 액세스 토큰을 리프레시 토큰으로 갱신하는 엔드포인트입니다.
4. 실행 결과 확인
설정이 완료되면 서버를 실행하고 Postman 같은 API 테스트 도구로 /api/token/ 엔드포인트에 사용자 자격 증명을 POST 요청으로 전송하면 아래와 같이 토큰이 발급되는 것을 확인할 수 있습니다.

마무리
이처럼 Django REST Framework에서는 djangorestframework-simplejwt 패키지를 통해 몇 줄의 설정만으로 강력한 JWT 인증 시스템을 구축할 수 있습니다. 실제 프로덕션 환경에서는 토큰 만료 시간 조정, 블랙리스트 처리 등 추가 보안 설정도 함께 고려하는 것이 좋습니다.