본문 바로가기

Django 프로젝트 구조 완벽 이해하기

_Big 2025. 5. 9.
반응형

django 로고 이미지


처음 Django 프로젝트를 열었을 때, 낯선 폴더와 파일들에 압도당한 기분이셨나요? 저도 그랬습니다. Django를 배우기 시작했을 때 저는 늘 이렇게 생각했습니다. “이 모든 파일이 정말 필요한 걸까? 도대체 무슨 역할을 하는 거지?” 이 글에서는 Django 프로젝트 구조를 단계별로 설명하며, 각 구성 요소가 어떤 역할을 하는지, 무엇이 필수이고 선택적인지, 그리고 모든 요소가 어떻게 맞물려 돌아가는지를 알려드리겠습니다.

 

서론

Django의 기본 프로젝트 구조는 처음 보면 복잡해 보일 수 있지만, 이는 확장성과 유지보수성, 그리고 명확한 역할 분리를 위해 설계되었습니다. 각 요소의 역할을 이해하면 자신감을 얻을 뿐만 아니라, 애플리케이션을 디버깅하고 확장하며 배포하는 데 큰 도움이 됩니다.

자, 이제 Django 프로젝트의 표준 구조를 함께 파헤쳐봅시다!

1. 외부 프로젝트 폴더: 프로젝트의 루트

django-admin startproject myproject를 실행하면 Django는 myproject라는 최상위 폴더를 만듭니다. 이 폴더에는 다음과 같은 항목이 포함됩니다:

  • manage.py: 프로젝트와 상호작용할 수 있게 해주는 커맨드라인 유틸리티 (예: 개발 서버 실행, 마이그레이션 생성). 프로젝트의 “컨트롤 패널”이라고 생각하시면 됩니다.
  • 내부 프로젝트 폴더 (이름도 myproject): 핵심 프로젝트 설정과 구성이 저장되는 곳입니다.

주의할 점은: 외부 폴더는 전체 프로젝트를 담는 “컨테이너”이고, 내부 폴더는 Django의 중요한 설정 파일들이 들어 있는 장소라는 것입니다.

 

2. 내부 프로젝트 폴더: 핵심 설정과 URL

내부 myproject 폴더 안에는 다음과 같은 네 가지 주요 파일이 있습니다:

  • __init__.py: 해당 폴더를 파이썬 패키지로 인식하도록 표시. 일반적으로 수정할 필요는 없습니다.
  • settings.py: 프로젝트의 두뇌. 설치된 앱, 데이터베이스 연결, 미들웨어 등 모든 설정을 담고 있습니다.
  • urls.py: 트래픽 컨트롤러. 들어오는 요청을 올바른 뷰나 앱으로 라우팅합니다.
  • wsgi.py / asgi.py: 애플리케이션을 배포할 때 WSGI/ASGI 서버의 진입점 역할을 합니다.

일상적인 개발에서는 주로 settings.pyurls.py를 자주 다루게 됩니다.

 

3. 앱: 모듈화된 빌딩 블록

Django에서는 하나의 프로젝트가 하나 이상의 앱(app)으로 구성됩니다. 앱은 특정 기능을 담당하는 모듈화된 구성 요소로, 예를 들면 “블로그”, “쇼핑몰”, “사용자 인증” 등이 있습니다.

python manage.py startapp blog를 실행하면 Django는 blog라는 새 폴더를 만들고 그 안에 다음과 같은 파일들을 생성합니다:

  • admin.py: 앱의 모델이 Django 관리자 사이트에 어떻게 표시될지 설정.
  • apps.py: 앱 설정 클래스 (대부분 수정할 필요 없음).
  • models.py: 앱의 데이터베이스 모델 정의.
  • views.py: HTTP 요청을 처리하고 응답을 반환하는 로직.
  • tests.py: 앱의 단위 테스트 작성.
  • migrations/: 데이터베이스 스키마 변경 내역 추적.
  • __init__.py: 폴더를 파이썬 패키지로 표시.

기능을 앱 단위로 나누면 프로젝트를 유지보수하고 재사용하며 확장하기 훨씬 쉬워집니다.

 

4. 템플릿, 정적 파일, 미디어

핵심 파이썬 파일 외에도 Django 프로젝트에는 프런트엔드 자원이 포함됩니다:

  • templates/: 동적 콘텐츠를 렌더링할 HTML 템플릿 저장 폴더. 앱별 또는 중앙 집중식으로 관리 가능.
  • static/: CSS, JavaScript, 이미지 파일 등 프런트엔드에서 필요한 정적 파일 저장소.
  • media/: (선택적) 사용자 업로드 파일 저장소 (파일 업로드 기능이 있을 경우).

이러한 폴더의 경로는 settings.py에 설정하여 Django가 이들을 찾을 수 있도록 해야 합니다.

 

5. Django 프로젝트를 정리하는 베스트 프랙티스

수년간 Django 프로젝트를 진행하며 저는 다음과 같은 실용적인 팁을 얻었습니다:

  • 각 앱 안에 static과 templates 폴더를 따로 만들어 이름 충돌 방지.
  • 대규모 프로젝트는 settings를 base.py, dev.py, prod.py로 나누어 config/ 폴더에 관리.
  • 앱은 목적에 맞게 작고 집중적으로 유지. 관련 없는 기능을 한 앱에 몰아넣지 않기.
  • 가상 환경을 반드시 사용해 프로젝트별 의존성 관리.

프로젝트가 커질수록 구조는 발전하게 되지만, 잘 정리된 기초는 장기적으로 수많은 시간을 절약해 줍니다.

 

마치며

Django의 기본 구조는 단순히 임의로 만들어진 것이 아닙니다—확장 가능한 웹 애플리케이션을 구축한 수년의 경험이 녹아 있습니다. 각 요소가 어떻게 맞물려 돌아가는지를 이해하면 프로젝트를 자신 있게 수정하고 확장하며 배포할 수 있습니다.

여러분은 Django의 구조에서 어떤 부분이 가장 어려웠나요? 댓글로 여러분의 경험을 공유해 주세요—여러분의 이야기를 듣고, 도움이 될 만한 조언을 드리고 싶습니다!

 

 

Django 모델링: 데이터베이스 설계의 핵심

강력한 웹 애플리케이션은 모두 잘 구조화된 데이터베이스 위에 구축됩니다. Django 세계에서는 데이터를 제대로 모델링하는 것이 모든 것의 출발점입니다—사용자 인터랙션부터 백엔드 처리까

bigadmin.org

 

 

Django 여정: 현대 웹 개발을 위한 초보자 로드맵

어젯밤, 저는 또다시 새벽까지 Django 문서를 읽고 최신 프로젝트의 디버깅에 빠져 있었습니다. 커피 세 잔을 비운 후, 저는 하나의 깨달음을 얻었습니다: Django를 마스터하는 길은 처음 보이는 것

bigadmin.org

 

반응형

댓글