DJango 서버개발, 정적 파일(자바스크립트, CSS) 및 미디어 파일(업로드된 파일) 설정하기

Django는 웹 애플리케이션을 개발하기 위한 강력한 프레임워크로, 데이터베이스와의 상호작용, URL 라우팅, 사용자 인증 등의 기능을 제공합니다. 본 글에서는 Django 프로젝트에서 정적 파일과 미디어 파일을 설정하는 방법에 대해 자세히 설명하겠습니다. 정적 파일은 자바스크립트, CSS 파일을 포함하며, 미디어 파일은 사용자가 업로드한 파일으로 정의합니다.

1. Django 프로젝트 생성

먼저, Django 프로젝트를 생성해야 합니다. Django가 설치되어 있지 않은 경우, 다음 명령어로 설치합니다:

pip install django

Django를 설치한 후, 프로젝트를 생성합니다:

django-admin startproject myproject

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

cd myproject

2. 정적 파일 설정

정적 파일은 주로 CSS, JavaScript, 이미지 파일 등을 포함하며, 웹 애플리케이션의 프론트엔드 요소를 구성합니다. Django에서는 정적 파일을 관리하기 위해 `STATIC_URL`, `STATICFILES_DIRS`, `Collectstatic` 같은 설정을 활용합니다.

2.1 settings.py 설정

`settings.py` 파일을 열어 정적 파일의 설정을 추가합니다. 아래와 같은 설정을 추가합니다:


# settings.py
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 정적 파일 설정
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

위의 설정에서 `STATIC_URL`은 정적 파일에 접근하기 위한 URL 경로를 정의합니다. `STATICFILES_DIRS`는 정적 파일이 저장된 디렉토리 경로를 설정합니다. 위 예시에서는 프로젝트의 루트 디렉토리에 `static`이라는 폴더를 생성했다고 가정하고 있습니다.

2.2 정적 파일 생성 및 사용

이제 `static` 폴더를 생성하고 CSS 또는 JavaScript 파일을 추가할 수 있습니다. 예를 들어, `static/css/styles.css` 파일을 생성합니다:


/* static/css/styles.css */
body {
    font-family: Arial, sans-serif;
    background-color: #f0f0f0;
}

HTML 파일에서 이 CSS 파일을 사용하기 위해 템플릿 파일을 만들어야 합니다. 예를 들어, `templates/index.html` 파일을 생성하고 다음 코드를 추가합니다:







    
    
    
    정적 파일 예제


    

정적 파일을 적용한 Django 예제

템플릿에서 `{% static ‘css/styles.css’ %}`를 사용하여 정적 파일 경로를 설정하였습니다. 이 코드는 Django의 template tag를 이용하여 정적 파일의 실제 URL을 생성합니다.

2.3 Django 정적 파일 서버 실행

개발 중에는 Django가 자동으로 정적 파일을 제공하지만, 프로덕션 환경에서는 Nginx 또는 Apache와 같은 웹 서버를 사용하는 것이 좋습니다. 그러나 개발 중에 정적 파일을 수동으로 제공하기 위해, Django의 개발 서버를 실행합니다:

python manage.py runserver

이제 웹 브라우저에서 `http://127.0.0.1:8000`에 접속하면 정적 파일이 포함된 페이지를 확인할 수 있습니다.

3. 미디어 파일 설정

미디어 파일은 사용자가 업로드한 파일을 포함합니다. Django에서 미디어 파일을 관리하는 방법에 대해 설명하겠습니다.

3.1 Media 설정

`settings.py`에 미디어 파일에 대한 설정을 추가합니다. 아래와 같은 코드를 추가합니다:


# settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

`MEDIA_URL`은 미디어 파일에 접근하기 위한 URL 경로를 정의하고, `MEDIA_ROOT`는 파일이 저장될 디렉토리 경로를 설정합니다. 여기서는 프로젝트의 루트에 `media` 디렉토리를 생성한다고 가정합니다.

3.2 모델 생성 및 파일 업로드 처리

이제 미디어 파일을 업로드할 수 있는 모델을 생성하겠습니다. `app/models.py`에 아래와 같은 모델을 추가합니다:


from django.db import models

class Upload(models.Model):
    title = models.CharField(max_length=100)
    file = models.FileField(upload_to='uploads/')

    def __str__(self):
        return self.title

`Upload` 모델은 파일 업로드를 위해 필요한 필드를 정의합니다. `FileField`를 사용하여 파일을 저장합니다. `upload_to` 매개변수는 업로드된 파일이 저장될 경로를 설정합니다.

3.3 폼 생성

파일 업로드를 처리하기 위해 Django의 Form을 생성합니다. `app/forms.py` 파일을 생성하고 다음 코드를 추가합니다:


from django import forms
from .models import Upload

class UploadForm(forms.ModelForm):
    class Meta:
        model = Upload
        fields = ['title', 'file']

3.4 뷰(View) 및 URL 설정

이제 뷰를 생성하여 파일 업로드를 처리합니다. `app/views.py` 파일에 아래와 같은 뷰를 추가합니다:


from django.shortcuts import render
from .forms import UploadForm

def upload_file(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('upload_file')  # 업로드 후 페이지로 리다이렉트
    else:
        form = UploadForm()
    
    return render(request, 'upload.html', {'form': form})

`upload_file` 함수는 업로드 요청을 처리하며, POST 방식일 경우 폼 데이터를 확인하고 유효하다면 파일을 저장합니다. 그런 후 사용자에게 피드백을 주기 위해 폼을 다시 렌더링합니다.

3.5 URLconf 설정

`urls.py` 파일을 수정하여 업로드 URL을 추가합니다:


from django.urls import path
from .views import upload_file

urlpatterns = [
    path('upload/', upload_file, name='upload_file'),
]

3.6 템플릿 생성

마지막으로 업로드 폼을 위한 템플릿을 생성합니다. `templates/upload.html` 파일을 생성하고 다음과 같은 코드를 추가합니다:







    
    
    파일 업로드


    

파일 업로드

{% csrf_token %} {{ form.as_p }}

3.7 미디어 파일 제공 설정

개발 중에 미디어 파일을 제공하기 위해 `urls.py`에 다음과 같은 설정을 추가합니다:


from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

`static()` 함수는 미디어 파일을 제공하는 URL 경로를 설정합니다.

4. 결론

이제 Django 프로젝트에서 정적 파일과 미디어 파일을 설정하는 방법에 대해 배웠습니다. 정적 파일은 CSS와 JavaScript와 같은 클라이언트 측 리소스를 포함하고, 미디어 파일은 사용자가 업로드한 파일을 관리합니다. 이 두 가지 설정을 통해 Django 애플리케이션의 기능을 확장하고 사용자 경험을 개선할 수 있습니다.

이 포스팅이 Django 개발에 도움이 되길 바랍니다. 추가적인 질문이나 의견이 있다면 댓글로 남겨주세요.