Django 프론트& 백엔드 개발

Django에서 템플릿·정적 파일을 샌드위치 구조로 쓰는 이유

Data Jun 2026. 1. 4. 09:41

Django에서는 템플릿(template)정적 파일(static)
보통 아래와 같은 샌드위치 구조로 관리합니다.

templates/
 └─ app_name/
     └─ index.html

static/
 └─ app_name/
     └─ images/
     └─ css/

이 구조에는 분명한 이유가 있습니다.

 

1. 템플릿 탐색은 INSTALLED_APPS 순서대로 진행된다

settings.py에서 APP_DIRS = True로 설정하면,
Django는 INSTALLED_APPS에 등록된 앱 순서대로 템플릿을 찾습니다.

INSTALLED_APPS = [
    ...
    'A',
    'B',
]

만약 두 앱 모두에 templates/index.html 이 있다면 A 앱의 index.html이 먼저 발견되어 사용됩니다.

즉, 샌드위치 구조가 아니면 원하지 않는 앱의 템플릿이 렌더링되는 문제가 발생할 수 있습니다.

➡️ templates/A/index.html, templates/B/index.html 처럼 앱 이름으로 한 번 더 감싸는 이유가 바로 이것입니다.

 

2. static 파일은 배포 시 한곳으로 모인다

Django에서 배포할 때는 collectstatic 명령어를 사용해
모든 앱의 static 파일을 하나의 디렉토리로 모읍니다.

이때 문제가 되는 상황은 다음과 같습니다.

  • A 앱: static/images/codeit.png
  • B 앱: static/images/codeit.png

파일명이 같으면 충돌이 발생하거나 의도하지 않은 파일로 덮어쓰기 될 수 있습니다.

 

그래서 static도 다음처럼 관리합니다

static/
 └─ A/
     └─ images/codeit.png
 └─ B/
     └─ images/codeit.png

 

3. 정리하면

  • 템플릿은 INSTALLED_APPS 순서대로 탐색됨
  • 샌드위치 구조가 아니면 다른 앱의 template을 먼저 찾을 수 있음
  • static 파일은 배포 시 한 디렉토리로 모이기 때문에
  • 앱 이름으로 구분하지 않으면 파일 이름 충돌 위험이 큼

그래서 Django에서는 template / static 모두 “샌드위치 구조”가 사실상 표준입니다.