기술블로그-Django편

📌 Django ImageField 완전 정리 - 이미지 업로드 기능 구현 가이드

Chansman 2025. 5. 16. 15:50

📌 Django ImageField 완전 정리 - 이미지 업로드 기능 구현 가이드


🖼️ ImageField란?

ImageField는 Django 모델에서 이미지를 저장하기 위한 전용 필드 타입입니다. FileField를 상속하며, 이미지 파일인지 검증하는 기능이 추가된 형태입니다.

from django.db import models

class Photo(models.Model):
    image = models.ImageField(upload_to='photos/')

속성 설명

upload_to 업로드된 파일이 저장될 경로 (MEDIA_ROOT 기준)
height_field, width_field 이미지의 너비/높이를 저장할 필드 지정 가능

🧰 Pillow - 필수 이미지 처리 라이브러리

ImageField 사용 시 Pillow 라이브러리가 반드시 설치되어 있어야 합니다.

📦 설치

pip install Pillow

💡 역할

  • 이미지 형식 검증 (JPG, PNG, GIF 등)
  • 이미지 사이즈 확인 및 조절
  • 포맷 변환, 썸네일 생성 등 다양한 이미지 관련 기능 제공

🧼 django-cleanup - 자동 삭제 도우미

이미지를 수정하거나 객체를 삭제할 때, 기존 이미지 파일이 디스크에 남는 문제가 있습니다.

django-cleanup 라이브러리를 사용하면 이를 자동으로 정리해줍니다.

📦 설치

pip install django-cleanup

🔧 설정

# settings.py
INSTALLED_APPS = [
    ...
    'django_cleanup.apps.CleanupConfig',
]

✅ 객체 삭제 시 → 이미지 파일 자동 삭제
✅ ImageField 값 변경 시 → 이전 파일 자동 삭제


🗂️ MEDIA_ROOT & MEDIA_URL 설정

이미지 파일은 웹 서버에서 제공해야 하므로, 별도로 설정이 필요합니다.

# settings.py
import os

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# urls.py
from django.conf import settings
from django.conf.urls.static import static

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

설정 설명

MEDIA_ROOT 실제 이미지 파일이 저장될 디렉토리 경로
MEDIA_URL 브라우저에서 접근할 때 사용하는 URL 경로

✅ 정리 요약

항목 설명

ImageField 이미지 업로드를 위한 모델 필드
Pillow 이미지 처리를 위한 필수 라이브러리 (ImageField 필수)
django-cleanup 이미지 삭제 시 자동 파일 정리 기능 제공
MEDIA_ROOT 서버에 이미지가 저장될 물리적 경로
MEDIA_URL 웹에서 이미지 파일을 요청할 때 사용하는 URL

ImageField는 Django에서 이미지 처리 기능을 구현하는 데 있어 핵심 요소입니다. Pillow와 django-cleanup을 함께 사용하면 훨씬 안정적이고 깔끔한 이미지 업로드 시스템을 구축할 수 있습니다 🧩