Django에는 개발 생산성을 높이기 위한 다양한 라이브러리들이 있습니다. 이 라이브러리들은 일반적인 웹 애플리케이션 요구 사항을 쉽게 해결해주며, 추가 기능을 신속하게 구현하는데 도움을 줍니다. 라이브러리 추가 시 settings.py 에서 INSTALLED_APPS에 등록해주는 것 잊지 마세요! 이 문서에서는 대표적인 라이브러리들과 사용 예시를 소개하겠습니다. 상세한 사용법까지 알려주지 않습니다. 이러한 라이브러리들이 있고, 기능 구현에 활용할만한 것들은 직접 찾아보면서 사용해보세요☺️
Django에서 RESTful API를 쉽게 구축할 수 있도록 도와주는 라이브러리입니다. Serializer를 통한 객체 직렬화(JSON 형태로 변환), 인증 및 권한, 라우터, 필터링, 페이징 등의 기능을 제공하며 빠르게 개발이 가능하고 ORM을 지원하기 때문에 DB 작업에도 효율적입니다. 최지현 강사님 Django 강의(Chapter 13), 김인섭 강사님 Django 강의(Chapter 03)에서도 다루고 있는 중요한 라이브러리입니다. DRF를 사용하면 APIView
, ViewSet
을 상속시켜 CRUD(Create, Read, Update, Delete) 연산을 쉽게 처리할 수 있습니다. 또한, Token ・ Session ・ OAuth 등 다양한 인증 및 권한 설정을 제공하고 이를 통해 API 접근 제어를 관리할 수 있습니다.
🎯 사용 사례
Django로 API 서버를 만들 때 DRF를 사용하여 빠르고 효율적으로 개발
⚡️ 설치
> pip install djangorestframework # venv
> poetry add djangorestframework # poetry
🌱 기본 설정
# config/settings.py
INSTALLED_APPS = [
...
'rest_framework',
]
🌱 기본 코드 예시
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
class HelloWorld(APIView): # APIView 상속
def get(self, request):
return Response({"message": "Hello, world!"})
JSON 객체에 인증에 필요한 정보들을 담은 후 비밀키로 서명한 토큰으로, 인터넷 표준 인증 방식입니다. 클라이언트(사용자)가 로그인 요청을 보내면 서버가 JWT 토큰을 발급하여 헤더에 담아 클라이언트에게 보냅니다. 그 후, 클라이언트는 JWT 토큰을 로컬에 저장하고 API 호출 시마다 헤더에 JWT토큰을 담아 보냅니다. 서버에서는 헤더를 확인하여 사용자가 신뢰할만한지 체크하고, 인증이 되면 API에 대한 응답을 보냅니다.
우리는 HTTP 프로토콜을 사용하여 통신하는데, HTTP의 큰 특징은 다음과 같습니다.
1. 한 번 통신이 이뤄진 직후 연결이 끊어진다.(= Connectionless)
2. 이전 상태를 유지・기억하지 않는다.(= Stateless)
그렇기 때문에 매번 사용자의 신뢰성을 확인해야하고, 그럴 때 JWT 토큰이 필요합니다. -(참고) 매번 인증하지 않고 일정 기간동안 인증이 유지되는(=로그인이 유지되는) 상태로 만들기 위해 Access Token가 등장합니다.-
하지만 JWT 자체는 암호화되지 않았기 때문에 민감한 정보는 페이로드에 넣지 않도록 주의해야 합니다. 중요한 데이터는 암호화된 JWT나 다른 방식으로 보호하는 것이 좋습니다.
🎯 사용 사례
사용자 인증과 로그인 유지
토큰의 내용이나 구조를 완전히 제어하고 싶거나, 특정 사용 사례에 맞춘 맞춤형 토큰이 필요한 경우
⚡️ 설치
> pip install PyJWT # venv
> poetry add PyJWT # poetry
🌱 기본 설정
# config/settings.py
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": [
"config.authentication.JWTAuthentication" # 커스텀 JWT 인증 클래스 사용
],
}
로그인 인증을 위해서는 JWT보다 Simple JWT를 추천합니다! JWT토큰의 경우, 탈취 당했을 때를 대비해 JWT 토큰의 유효기간을 두는데 유효기간이 짧으면 로그인을 자주해야 하기때문에 사용자 경험적으로 좋지 못합니다. 그렇다고 유효기간을 길게 잡게되면 보안적으로 취약해지는 단점이 있습니다. Simple JWT는 이에 대한 해결 방법으로 Access Token과 Refresh Token을 사용합니다.
Simple JWT는 JWT의 장점을 활용하면서도, 리프레시 토큰, 토큰 만료 처리, 커스터마이징 가능 등의 기능을 제공하여 보안과 확장성을 높입니다. 특히 설정과 사용이 간단하며, DRF 프로젝트와 잘 호환되기 때문에 선호됩니다. 또한, 추가적인 보안 조치(토큰 블랙리스트 등)를 지원해 안전한 인증을 구현할 수 있습니다. 이외의 다양한 기능들은 공식문서에서 확인할 수 있습니다.
Refresh Token
과 Access Token
을 부여받고 로컬에 저장합니다.Access Token
을 넣고 API 통신합니다.Access Token
이 만료된 경우, 서버는 401 에러로 응답합니다. 클라이언트는 401 응답코드로 자신의 Access Token
이 만료됨을 알고 헤더에 Refresh Token
을 넣어 API를 재요청합니다.Refresh Token
으로 사용자 권한을 확인하고 응답쿼리 헤더에 새로운 Access Token
을 반환합니다.Refresh Token
마저 만료되었다면, 서버는 동일하게 401 에러를 보냅니다. 이 때는 재로그인이 필요합니다.🎯 사용 사례
JWT Token 보안 강화
⚡️ 설치
> pip install djangorestframework-simplejwt # venv
> poetry add djangorestframework-simplejwt # poetry
🌱 기본 설정
# config/settings.py
INSTALLED_APPS = [
...
'rest_framework_simplejwt',
...
]
...
REST_FRAMEWORK = {
...
'DEFAULT_AUTHENTICATION_CLASSES': (
...
'rest_framework_simplejwt.authentication.JWTAuthentication',
)
...
}
이후 토큰 기한 등, 상세 설정은 SimpleJWT (김인섭 강사님) 자료나 Simple JWT 공식문서를 통해 공부해보세요!
Django에서 사용자 인증과 소셜 로그인을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. 이메일 로그인뿐만 아니라 구글, 페이스북, 트위터 등 다양한 소셜 로그인을 지원합니다. Allauth는 다양한 소셜 네트워크와의 통합을 지원하며, 사용자 인증과 관련된 복잡한 설정을 쉽게 처리할 수 있어 편리합니다.
🎯 사용 사례
사용자 인증을 구현할 때, 이메일 로그인과 소셜 로그인을 모두 지원해야 하는 경우 유용합니다.
⚡️ 설치
pip install django-allauth
🌱 기본 설정
# settings.py
INSTALLED_APPS += [
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google',
]
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
)
SITE_ID = 1
Pillow는 Django 프로젝트에서 이미지 관련 작업을 할 때 주로 사용되는 라이브러리입니다. 이미지 업로드, 썸네일 생성 등 다양한 이미지 처리가 가능하며, 이 라이브러리는 간단하게 사용할 수 있습니다. Pillow는 Django의 ImageField와 함께 주로 사용되어, 업로드된 이미지를 변형하거나 압축하는 기능을 제공하며, 포맷 변환 및 이미지 필터 적용도 가능합니다. 최지현 강사님 Django 강의(Chapter 07)에서도 다루고 있는 라이브러리입니다!
🎯 사용 사례
이미지 처리
⚡️ 설치
> pip install Pillow
🌱 사용
from PIL import Image
Django에서 AWS S3와 같은 클라우드 저장소를 쉽게 사용할 수 있게 해주는 라이브러리입니다. 미디어 파일이나 정적 파일을 S3에 저장하고, 관리하는 데 유용합니다.
🎯 사용 사례
AWS S3는 파일 저장소로, Django에서 업로드된 파일을 효율적으로 관리하고 저장할 수 있습니다. 특히, 클라우드 저장소를 사용해 확장성과 비용 절감 효과를 볼 수 있습니다. S3는 확장성이 뛰어나며, 대용량 파일을 저장하거나 정적 파일 관리 등에 주로 사용됩니다.
⚡️ 설치
pip install django-storages[boto3]
🌱 기본 설정
# settings.py
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_ACCESS_KEY_ID = 'your-access-key'
AWS_SECRET_ACCESS_KEY = 'your-secret-key'
AWS_STORAGE_BUCKET_NAME = 'your-bucket-name'
Django에서 CORS(Cross-Origin Resource Sharing)를 쉽게 처리할 수 있는 라이브러리입니다. 다른 도메인에서 Django API에 접근할 수 있도록 설정할 때 사용됩니다.
🎯 사용 사례
프론트엔드와 백엔드가 서로 다른 도메인에 있을 때, CORS 문제를 해결합니다.
⚡️ 설치
pip install django-cors-headers
🌱 기본 설정
# config/settings.py
INSTALLED_APPS = [
'corsheaders',
...
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
...
]
# 접근 허용 도메인 리스트 설정
CORS_ALLOWED_ORIGINS = [
"http://example.com",
"http://localhost:3000",
]
# 모든 도메인에서 접근 허용
CORS_ORIGIN_ALLOW_ALL = True
Celery는 Django에서 비동기 작업이나 백그라운드 작업을 처리할 때 사용됩니다. 예를 들어, 이메일 발송이나 대용량 데이터 처리 등의 작업을 비동기적으로 처리해 서버의 부하를 줄일 수 있습니다. Celery는 메시지 브로커(주로 Redis나 RabbitMQ)를 통해 작업을 분배하며, 다양한 큐를 지원해 대규모 작업을 효과적으로 처리할 수 있습니다.
Celery의 주요 구성요소는 다음과 같습니다.
🎯 사용 사례
비동기 작업을 처리해야 할 때(예: 이메일 발송, 대용량 데이터 처리, 주기적 작업 실행) 사용합니다.
⚡️ 설치
> pip install celery
🌱 기본 설정
# celery.py 신규 생성하여 작성
from celery import Celery
app = Celery('your_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
Redis는 데이터베이스나 캐시 시스템으로 빠른 데이터를 저장하고 불러오는데 사용됩니다. DRF에서 세션 관리를 Redis로 처리하면, 확장성과 속도를 높일 수 있습니다. Redis는 메모리 기반이기 때문에 속도가 빠르며, 특히 분산 환경이나 대규모 트래픽 처리에 적합합니다. 세션 유지 및 캐시 최적화에 주로 사용됩니다. 보통 Celery와 함께 쓰입니다.
🎯 사용 사례
세션 관리, 캐싱, 실시간 데이터 분석
⚡️ 설치
> pip install django-redis
🌱 기본 설정
# config/settings.py
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
}
}