장고(Django) 기본 구조 이해하기

프로젝트 / 앱 / 설정 / MVC(MTV) 흐름 완전 정리

장고를 설치하고 프로젝트를 만들면 여러 파일과 폴더가 자동 생성됩니다.
처음 보면 복잡하지만 전체 구조를 이해하면 개발이 훨씬 쉬워집니다.

1. 프로젝트(Project)와 앱(App) 구조

장고에서는 다음처럼 구성됩니다.

구성역할
프로젝트(Project)웹 서비스 전체를 관리하는 최상위 공간
앱(App)특정 기능(게시판, 로그인, 블로그 등)을 담당하는 모듈

비유

  • 프로젝트 = 집 전체
  • 앱 = 방(주방, 거실, 침실 등 기능별 공간)

예시 폴더 구조

mysite/                 프로젝트 루트
 ├─ manage.py
 ├─ mysite/             프로젝트 설정 폴더(Config)
 |   ├─ settings.py     프로젝트 전체 설정
 |   ├─ urls.py         전체 URL(길 안내) 관리
 |   ├─ asgi.py/wsgi.py 배포 관련 설정
 ├─ main/               앱(기능별 모듈)
 |   ├─ models.py       DB 데이터 구조 정의
 |   ├─ views.py        화면에 보여줄 내용 처리
 |   ├─ urls.py         앱별 URL 관리(선택)
 |   ├─ templates/      HTML 템플릿 폴더
 |   ├─ admin.py        관리자 페이지 설정
 |   └─ apps.py         앱 정보 등록

2. Config(프로젝트 설정 폴더)에서 하는 일

mysite/settings.py에서는 프로젝트 전체 설정을 관리합니다.

설정 항목설명
INSTALLED_APPS사용할 앱 등록
DATABASESDB 설정(SQLite, MySQL, PostgreSQL 등)
ALLOWED_HOSTS접속 가능한 도메인 목록
STATIC / MEDIA 설정정적 파일(CSS, JS, 이미지) 관리
LANGUAGE_CODE / TIME_ZONE언어, 시간대 설정
TEMPLATESHTML 템플릿 파일 위치 설정
MIDDLEWARE요청(Request) 처리 과정 필터

예시

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'main',  # 내가 만든 앱 등록
]

3. Django의 MTV 구조

장고는 MTV 패턴을 사용합니다.
MVC 패턴에서 이름만 조금 바뀐 구조입니다.

MVCMTV역할
ModelModel데이터 구조(DB) 관리
ViewTemplate사용자에게 보여지는 화면(HTML)
ControllerView요청을 처리하고 Model과 Template 연결

흐름 예시

사용자 요청 → View → Model(DB 조회) → View → Template(HTML 응답)

4. Model / View / URLs / Template 역할 설명

(1) Model → 데이터 설계도

models.py

DB 테이블을 정의하는 곳입니다.

예시

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

이 코드를 실행하면 DB에 게시글 테이블이 자동 생성됩니다.


(2) View → 화면에 보여줄 내용(로직 처리)

views.py

예시

from django.http import HttpResponse

def home(request):
    return HttpResponse("Hello Django")

사용자가 특정 URL로 요청하면 View가 처리하여 결과를 반환합니다.


(3) URLs → 길 안내(페이지 연결)

urls.py

사용자가 어떤 URL로 요청하면 어떤 View로 가야 하는지 연결합니다.

프로젝트 전체 URL (mysite/urls.py)

from django.contrib import admin
from django.urls import path
from main import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home),  # 메인 페이지 연결
]

(4) Templates → HTML 화면

main/templates/main/home.html (폴더명 자유)

<!DOCTYPE html>
<html>
<head>
    <title>Django Home</title>
</head>
<body>
    <h1>Hello Django Template</h1>
</body>
</html>

View에서 Template을 불러오는 방식

from django.shortcuts import render

def home(request):
    return render(request, 'main/home.html')

5. 전체 흐름 정리 (이해하기 쉽게)

단계설명예시
1URL로 요청 발생http://example.com/
2URLs가 View로 연결urls.py
3View에서 처리views.py
4필요하면 DB 데이터 조회models.py
5Template으로 HTML 렌더링templates/

이 흐름을 이해하면 장고는 이미 반 이상 끝났다고 볼 수 있습니다.


결론

장고 구조 요약

위치핵심 역할
프로젝트전체 서비스 관리
기능별 분리
settings.py전체 설정
models.py데이터(DB)
views.py로직 처리
urls.py길 안내
templatesHTML 화면

다음 단계도 원하시면 이어서 학습 도와드릴게요

  • Django Admin으로 데이터 관리하기
  • 모델을 HTML에 표시하기(ORM + QuerySet)
  • Django에서 로그인/회원가입 구현
  • Nginx + Gunicorn 배포 환경 구축

어떤 부분부터 더 깊게 들어가볼까요?

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.