💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    로딩 중이에요... 🐣

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    31 Djoser 를 활용한 인증 시스템 구축 & JWT 및 토큰 인증 베스트 프랙티스 | ✅ 편저: 코담 운영자

    31-Djoser 를 활용한 인증 시스템 구축 & JWT 및 토큰 인증 베스트 프랙티스

    - Djoser를 활용한 인증 시스템 구축 & JWT 베스트 프랙티스


    🔗 djoser-github
    🔗 djoser-공식문서

    1. djoser READEME.md

    djoser 소개

    Djoser는 Django의 인증 시스템을 Django REST Framework 기반의 REST API로 구현한 라이브러리입니다. 회원가입, 로그인, 로그아웃, 비밀번호 재설정, 계정 활성화 등 기본적인 인증 관련 작업을 위한 다양한 view를 제공합니다. 또한 커스텀 사용자 모델과도 잘 호환됩니다.

    주요 지원 기능

    • 토큰 기반 인증 (Token-based authentication)

    • JWT 인증 (JWT authentication)

    • 소셜 로그인 (Social authentication)

    • WebAuthn 지원

    기존 Django의 인증 관련 클래스(예: PasswordResetForm)를 그대로 재사용하는 대신, 싱글 페이지 애플리케이션(SPA) 구조에 더 잘 맞도록 몇몇 부분을 직접 재구현했습니다.

    이 프로젝트는 SUNSCRAPERS가 열정과 인내로 개발했습니다.

    데모 보기: https://asciinema.org/a/94J4eG2tSBD2iEfF30a6vGtXw.png


    1.시스템 요구 사항

    Djoser를 사용하려면 다음 환경을 갖추어야 합니다:

    • Python 3.9 이상, 4.0 미만 (3.10, 3.11, 3.12 포함)

    • Django 3.0 이상 (3.2부터 5.1까지 지원)

    • Django REST Framework 3.12 이상

    2.설치 방법

    pip 명령어를 사용해 간단히 설치할 수 있습니다:

    pip install djoser
    

    설치 후, 공식 문서의 설정 가이드를 참고하여 추가 설정을 진행하세요.

    3.공식 문서

    자세한 사용법과 설정 방법은 아래 문서에서 확인할 수 있습니다:


    4.개발 및 기여 가이드

    Djoser에 기여하고 싶다면 다음 절차를 따라주세요:

    git clone git@github.com:sunscrapers/djoser.git
    cd djoser
    poetry install --all-extras
    

    위 명령어를 통해 개발에 필요한 의존성 패키지가 포함된 가상 환경이 생성됩니다.

    테스트 실행:

    poetry run pytest
    

    Makefile을 통해 다음 명령어로 초기화 및 테스트 자동화도 가능합니다:

    make init
    make test
    

    가상 환경 활성화:

    poetry shell
    

    poetry 없이 설치할 경우

    신형 pip는 pyproject.toml을 이용한 빌드를 지원합니다:

    pip install .[test]
    cd testproject
    ./manage.py test
    

    5.예제 프로젝트 실행

    테스트용 예제 프로젝트를 실행하려면 다음 명령어를 사용하세요:

    make migrate
    make runserver
    

    6.커밋 전 사전 작업

    코드 변경 사항을 커밋하기 전에 pre-commit을 설정해 주세요:

    poetry run pre-commit install
    

    이 설정을 통해 커밋 전에 다음과 같은 코드 품질 검사가 자동으로 수행됩니다:

    • Black (코드 포매팅)

    • Ruff (정적 분석)

    • Docformatter (문서 문자열 포매팅)


    7.관련 프로젝트

    Django, REST, 인증과 관련된 프로젝트:

    • django-rest-registration

    • django-oauth-toolkit

    주의사항
    커스텀 인증 로직과 TokenCreateSerializer를 사용하는 경우, authenticate()가 명시적으로 None을 반환하더라도 내부 로직에서 사용자 검색을 시도할 수 있습니다. 이 부분은 향후 변경될 수 있습니다.


    2. 강의 내용

    1. Djoser란?

    Djoser는 Django의 기본 인증 시스템을 RESTful 방식으로 제공하는 라이브러리입니다. React, Vue.js, React Native 등 SPA(Single Page Application) 프론트엔드와 Django 백엔드 간 인증 처리를 쉽게 해주는 패키지입니다.

    제공 기능

    • 회원가입 / 로그인 / 로그아웃
    • 비밀번호 초기화 / 변경
    • 이메일 인증
    • 토큰 기반 인증 및 JWT 인증
    • 소셜 로그인 지원

    2. 설치 및 기본 설정

    1단계. 필수 패키지 설치

    pip install djoser djangorestframework djangorestframework-simplejwt django-cors-headers
    

    2단계. settings.py 설정

    INSTALLED_APPS = [
        ...
        'rest_framework',
        'rest_framework.authtoken',
        'djoser',
        'corsheaders',
    ]
    
    MIDDLEWARE = [
        'corsheaders.middleware.CorsMiddleware',
        ...
    ]
    
    # CORS 허용 설정 (React 개발 서버 기준)
    CORS_ALLOWED_ORIGINS = [
        'http://localhost:5173',
    ]
    
    # 인증 클래스 설정
    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': [
            'rest_framework.authentication.TokenAuthentication',  # 또는 'rest_framework_simplejwt.authentication.JWTAuthentication'
        ],
    }
    
    # 이메일 콘솔 출력
    EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
    

    3단계. URL 설정

    from django.urls import path, include
    
    urlpatterns = [
        path('auth/', include('djoser.urls')),
        path('auth/', include('djoser.urls.authtoken')),  # 토큰 인증
        path('auth/', include('djoser.urls.jwt')),       # JWT 인증
    ]
    

    3. 인증 방식 비교 및 사용

    ✅ 토큰 인증 (Token Authentication)

    • /auth/token/login/: 로그인, 토큰 반환
    • /auth/token/logout/: 로그아웃 (DB에서 토큰 삭제)
    • /auth/users/me/: 로그인한 사용자 정보 조회
    장점
    • 설정 간단, 사용 편리
    • 서버 측에서 토큰을 저장하므로 토큰 취소가 용이
    단점
    • DB 쿼리가 매 요청마다 필요 (토큰 유효성 확인 시)

    ✅ JWT 인증 (Simple JWT)

    • /auth/jwt/create/: 로그인, access/refresh 토큰 반환
    • /auth/jwt/refresh/: refresh 토큰으로 access 토큰 갱신
    • /auth/jwt/verify/: 토큰 유효성 검증
    장점
    • 무상태 인증 방식 (stateless): 매 요청마다 DB 조회 불필요
    • 성능 향상, 확장성 우수
    단점
    • 토큰 만료 전까지 수동 로그아웃 어려움 (Blacklist 필요 시 DB 설정 필요)

    ✅ 인증 요청 예시 (JWT)

    POST /auth/jwt/create/
    Content-Type: application/json
    
    {
      "username": "admin",
      "password": "test"
    }
    

    응답:

    {
      "access": "...",
      "refresh": "..."
    }
    

    요청 헤더에 아래처럼 사용:

    Authorization: JWT {access_token}
    

    4. 커스터마이징

    Djoser는 기본 제공되는 시리얼라이저를 오버라이드하여 사용자 정의 로직을 추가할 수 있습니다.

    DJOSER = {
        'SERIALIZERS': {
            'user': 'myapp.serializers.CustomUserSerializer',
        }
    }
    
    • 예: 사용자 등록 시 추가 필드 요구, 응답 형식 변경 등

    5. 실전 적용 팁

    • 클라이언트(React 등)는 로그인 후 받은 토큰을 localStorage/sessionStorage에 저장하고, 요청 시 Authorization 헤더에 첨부
    • Access token 만료 시 Refresh token으로 재발급 → 401 처리 대응 로직 필요
    • 로그아웃 시 토큰 제거 (Token 방식: 서버에서 삭제, JWT: 클라이언트에서 무효화 or Blacklist)

    마무리

    Djoser는 Django REST Framework에서 인증 기능을 빠르고 안전하게 구현할 수 있는 강력한 도구입니다. SPA와 백엔드 간 인증 연동을 단순화하며, 기본적인 인증 시나리오부터 JWT 기반 고급 인증까지 폭넓게 지원합니다.

    더욱 자세한 내용은 Djoser 공식 문서를 참고하세요.

    다음 문서에서는 React 프론트엔드와의 연동 예제를 다룰 예정입니다.

    TOP
    preload preload