프로젝트 / 앱 / 설정 / 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 | 사용할 앱 등록 |
| DATABASES | DB 설정(SQLite, MySQL, PostgreSQL 등) |
| ALLOWED_HOSTS | 접속 가능한 도메인 목록 |
| STATIC / MEDIA 설정 | 정적 파일(CSS, JS, 이미지) 관리 |
| LANGUAGE_CODE / TIME_ZONE | 언어, 시간대 설정 |
| TEMPLATES | HTML 템플릿 파일 위치 설정 |
| MIDDLEWARE | 요청(Request) 처리 과정 필터 |
예시
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'main', # 내가 만든 앱 등록
]
3. Django의 MTV 구조
장고는 MTV 패턴을 사용합니다.
MVC 패턴에서 이름만 조금 바뀐 구조입니다.
| MVC | MTV | 역할 |
|---|---|---|
| Model | Model | 데이터 구조(DB) 관리 |
| View | Template | 사용자에게 보여지는 화면(HTML) |
| Controller | View | 요청을 처리하고 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. 전체 흐름 정리 (이해하기 쉽게)
| 단계 | 설명 | 예시 |
|---|---|---|
| 1 | URL로 요청 발생 | http://example.com/ |
| 2 | URLs가 View로 연결 | urls.py |
| 3 | View에서 처리 | views.py |
| 4 | 필요하면 DB 데이터 조회 | models.py |
| 5 | Template으로 HTML 렌더링 | templates/ |
이 흐름을 이해하면 장고는 이미 반 이상 끝났다고 볼 수 있습니다.
결론
장고 구조 요약
| 위치 | 핵심 역할 |
|---|---|
| 프로젝트 | 전체 서비스 관리 |
| 앱 | 기능별 분리 |
| settings.py | 전체 설정 |
| models.py | 데이터(DB) |
| views.py | 로직 처리 |
| urls.py | 길 안내 |
| templates | HTML 화면 |
다음 단계도 원하시면 이어서 학습 도와드릴게요
- Django Admin으로 데이터 관리하기
- 모델을 HTML에 표시하기(ORM + QuerySet)
- Django에서 로그인/회원가입 구현
- Nginx + Gunicorn 배포 환경 구축
어떤 부분부터 더 깊게 들어가볼까요?