Django 기초
1. Django의 핵심 철학 및 특징
Django는 Python 언어로 작성된 가장 인기 있는 풀스택(Full-Stack) 웹 프레임워크 중 하나입니다. 개발 속도를 높이고 웹 개발에 필요한 대부분의 기능을 포괄적으로 제공합니다.
A. 배터리 포함 (Batteries Included)
Django는 웹 개발에 필요한 거의 모든 기능(ORM, 관리자 인터페이스, 템플릿 엔진, 라우팅, 세션, 보안 등)을 프레임워크 자체에 내장하고 있어, 외부 라이브러리 추가 없이 바로 사용할 수 있습니다.
B. MVT 아키텍처 (Model-View-Template)
일반적인 MVC 패턴을 변형한 Django 고유의 아키텍처 패턴입니다.
-
Model: 데이터베이스 구조를 정의하고 비즈니스 로직을 처리합니다.
-
Template: 사용자에게 보여지는 화면(HTML, CSS, JS)을 구성합니다.
-
View: 사용자 요청을 받아 Model과 Template 사이의 흐름을 제어하고 데이터를 처리합니다.
C. 강력한 ORM (Object-Relational Mapping)
SQL 쿼리를 직접 작성하지 않고 Python 코드를 사용하여 데이터베이스를 조작할 수 있어 생산성이 높고 특정 데이터베이스에 대한 종속성을 낮춰줍니다.
D. 자동 관리자 사이트 (Automatic Admin Interface) 
모델을 정의하기만 하면 데이터를 관리할 수 있는 완벽한 백오피스 인터페이스를 자동으로 생성해 줍니다.
2. Django 프로젝트와 앱(App) 구조
-
프로젝트 (Project): 전체 웹 애플리케이션의 설정과 환경을 담는 컨테이너입니다.
-
앱 (App): 프로젝트 내에서 특정 기능(블로그, 회원 관리 등)을 담당하는 모듈 단위입니다.
3. Django 실습 및 개발 단계별 가이드
① 환경 설정 및 프로젝트 생성
# 1. Django 설치
pip install django
# 2. 프로젝트 생성 (현재 디렉토리에 생성)
django-admin startproject myproject .
# 3. 앱 생성 (예: blog 앱)
python manage.py startapp blog
-
프로젝트 기본 구조 (
myproject/)-
manage.py: 프로젝트 관리 명령어 실행 스크립트 -
settings.py: 프로젝트 설정 파일 (생성한 앱을INSTALLED_APPS에 등록 필요) -
urls.py: 프로젝트 레벨 URL 라우팅 설정 -
wsgi.py/asgi.py: 동기/비동기 서버 진입점
-
② MVT 컴포넌트 개발
A. Model 작성 (blog/models.py)
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
B. 데이터베이스 적용 (마이그레이션)
python manage.py makemigrations
python manage.py migrate
C. View 작성 (blog/views.py)
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all().order_by('-created_at')
return render(request, 'blog/post_list.html', {'posts': posts})
D. URL 라우팅 설정
-
앱 레벨 설정 (
blog/urls.py)from django.urls import path from . import views urlpatterns = [ path('', views.post_list, name='post_list'), ] -
프로젝트 레벨 연동 (
myproject/urls.py)from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('blog/', include('blog.urls')), ]
E. Template 작성 (blog/templates/blog/post_list.html)
<!DOCTYPE html>
<html>
<head>
<title>블로그 목록</title>
</head>
<body>
<h1>최신 블로그 포스트</h1>
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>작성일: {{ post.created_at }}</p>
<p>{{ post.content|linebreaksbr }}</p>
<hr>
{% endfor %}
</body>
</html>
③ 서버 실행 및 관리자 사이트 설정
# 개발 서버 실행
python manage.py runserver
# 관리자 슈퍼유저 계정 생성
python manage.py createsuperuser
-
관리자 페이지 모델 등록 (
blog/admin.py)from django.contrib import admin from .models import Post admin.site.register(Post)-
[http://127.0.0.1:8000/admin/](http://127.0.0.1:8000/admin/)주소로 접속하여 데이터를 웹 환경에서 손쉽게 관리할 수 있습니다.
-