DJango 서버개발, API 인증 및 권한 관리 구현하기

Django는 파이썬으로 작성된 웹 프레임워크로, 빠르고 효율적으로 웹 애플리케이션을 개발할 수 있는 다양한 도구와 라이브러리를 제공합니다. 이 글에서는 Django를 이용하여 RESTful API 서버를 구축하고, API 인증 및 권한 관리를 구현하는 방법에 대해 자세히 설명하겠습니다.

1. Django 프로젝트 설정하기

먼저 Django 프로젝트를 설정해 보겠습니다. Django 프레임워크와 Django REST Framework(DRF)를 설치합니다.

pip install django djangorestframework

이제 새로운 Django 프로젝트를 생성합니다.

django-admin startproject myproject

이후 생성된 프로젝트 디렉토리로 이동합니다.

cd myproject

이제 Django 애플리케이션을 생성합니다.

python manage.py startapp myapp

프로젝트의 settings.py 파일에 myapprest_framework를 INSTALLED_APPS에 추가합니다.

INSTALLED_APPS = [
        ...
        'rest_framework',
        'myapp',
    ]

2. 모델 생성하기

이제 API에서 사용할 모델을 생성해봅시다. models.py 파일을 열어 다음과 같이 작성합니다.

from django.db import models

class User(models.Model):
    username = models.CharField(max_length=150, unique=True)
    password = models.CharField(max_length=128)
    email = models.EmailField(unique=True)

    def __str__(self):
        return self.username

모델을 만들었으면 이제 마이그레이션을 실행하여 데이터베이스에 반영합니다.

python manage.py makemigrations
python manage.py migrate

3. Serializer 생성하기

모델을 JSON 형식으로 변환하기 위해 serializer를 생성합니다. serializers.py 파일을 생성하고 다음과 같이 작성합니다.

from rest_framework import serializers
from .models import User

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email')

4. 뷰 생성하기

이제 API의 엔드포인트를 만들기 위해 뷰를 생성합니다. views.py 파일을 열고 다음과 같이 작성합니다.

from rest_framework import viewsets
from .models import User
from .serializers import UserSerializer

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

5. URL 라우팅 설정하기

API의 URL을 설정하기 위해 urls.py 파일을 생성하고 다음과 같이 작성합니다.

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import UserViewSet

router = DefaultRouter()
router.register(r'users', UserViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

6. 인증 및 권한 관리 구현하기

Django REST Framework에서는 다양한 인증 및 권한 관리 기능을 지원합니다. 여기에서는 기본 인증과 토큰 인증을 사용하여 API 인증을 구현합니다.

6.1. Django REST Framework의 토큰 인증 활성화

우선, settings.py 파일에서 OAuth2를 위한 앱을 설치하고 등록합니다.

INSTALLED_APPS = [
        ...
        'rest_framework.authtoken',
    ]

또한, DRF의 인증 클래스를 설정해줍니다.

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

6.2. 사용자에게 토큰 생성하기

사용자가 로그인 할 때마다 토큰을 생성하므로, 로그인 뷰를 추가합니다.

from django.contrib.auth import authenticate
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status

class LoginView(APIView):
    def post(self, request):
        username = request.data.get('username')
        password = request.data.get('password')
        user = authenticate(username=username, password=password)
        if user:
            token, created = Token.objects.get_or_create(user=user)
            return Response({'token': token.key}, status=status.HTTP_200_OK)
        return Response({'error': 'Invalid Credentials'}, status=status.HTTP_400_BAD_REQUEST)

로그인 뷰를 URL에 추가합니다.

urlpatterns = [
        ...
        path('login/', LoginView.as_view(), name='login'),
    ]

7. API 테스트하기

이제 모든 설정이 완료되었습니다. Django 서버를 실행하고 API를 테스트합니다.

python manage.py runserver

Postman 또는 Curl을 사용하여 API를 테스트할 수 있습니다. 사용자를 등록한 후에 로그인 엔드포인트에 POST 요청을 보내서 토큰을 받아옵니다.

7. 결론

Django와 Django REST Framework를 이용하면 빠르게 API 서버를 구축할 수 있고, 인증 및 권한 관리를 손쉽게 구현할 수 있습니다. 본 글에서 다룬 내용을 바탕으로 더 다양한 기능을 추가하여 API를 확장할 수 있습니다.

여기까지가 Django 서버 개발 및 API 인증과 권한 관리에 대한 강좌였습니다. 향후에는 OAuth2와 JWT(JSON Web Token) 인증 방식에 대해서도 살펴보는 글을 작성할 예정입니다.

8. 참고 자료