Django REST framework은 웹 애플리케이션과 API를 구축하는 데 사용되는 강력한 도구입니다. 그러나 대용량 파일을 처리해야 할 때, 일부 추가적인 고려 사항이 필요합니다. 이 글에서는 Django REST framework에서 대용량 파일을 처리하는 방법에 대해 알아보겠습니다.
1. 파일 업로드 설정
먼저, settings.py
파일에서 파일 업로드에 대한 설정을 확인해야 합니다. 아래와 같이 설정해야 합니다:
# settings.py
# 파일 크기 제한 설정
FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 10 # 10MB
# 임시 디렉토리 설정
FILE_UPLOAD_TEMP_DIR = '/tmp/uploads'
위의 설정에서 파일 업로드의 최대 메모리 크기를 FILE_UPLOAD_MAX_MEMORY_SIZE
변수로 설정하고, 임시 디렉토리를 FILE_UPLOAD_TEMP_DIR
변수로 설정합니다. 이 설정은 대용량 파일 업로드의 원활한 처리를 돕습니다.
2. Chunked 업로드 사용
Django REST framework는 큰 파일을 여러 작은 청크로 나누어 업로드하는 “Chunked 업로드”를 지원합니다. 이를 사용하면 대용량 파일이 메모리에 전체적으로 로드되지 않아도 되므로, 서버의 성능에 큰 영향을 미칠 수 있는 대용량 파일 업로드 문제를 방지할 수 있습니다.
Django REST framework에서 Chunked 업로드를 사용하려면 아래와 같이 설정해야 합니다:
# settings.py
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.MultiPartParser', # Chunked 업로드를 위한 parser 추가
]
}
위의 설정을 적용하면, 클라이언트에서 Chunked 업로드를 지원하는 요청을 보낼 수 있습니다.
3. Chunked 업로드 처리
Django REST framework는 Chunked 업로드를 처리하기 위한 다양한 방법을 제공합니다. 가장 일반적인 방법은 FileUploadView
를 상속하여 사용자 정의 View를 만드는 것입니다. 아래는 예시입니다:
# views.py
from rest_framework.views import APIView
class LargeFileUploadView(APIView):
parser_classes = [ChunkedUploadParser] # Chunked 업로드를 위한 parser 사용
def post(self, request, format=None):
file_obj = request.data['file']
# 파일 처리 로직 작성
return Response('File uploaded successfully')
위의 예시에서는 LargeFileUploadView
라는 사용자 정의 View를 만들고 ChunkedUploadParser
를 사용하여 Chunked 업로드를 처리합니다. post()
메서드에서는 업로드된 파일을 가져와 실제 파일 처리 작업을 수행할 수 있습니다.
4. static_chunk_size 설정
대용량 파일 업로드 시, 기본적으로 Chunked 업로드 크기가 1MB로 설정되어 있습니다. 만약 더 큰 크기의 청크를 사용하고 싶다면, settings.py
에서 REST_FRAMEWORK
설정에 static_chunk_size
를 추가하여 원하는 크기로 설정할 수 있습니다. 아래는 예시입니다:
# settings.py
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.MultiPartParser',
],
'STATIC_CHUNK_SIZE': 5 * 1024 * 1024 # 5MB로 Chunked 업로드 크기 설정
}
위의 예시에서는 STATIC_CHUNK_SIZE
를 5MB로 설정하였습니다.
결론
위에서 소개한 방법을 따르면 Django REST framework에서 대용량 파일을 처리하는데 도움이 될 것입니다. 파일 업로드 설정, Chunked 업로드 사용, Chunked 업로드 처리 등을 고려하여 안정적이고 효율적인 대용량 파일 처리가 가능합니다.