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 라우팅 설정

  1. 앱 레벨 설정 (blog/urls.py)

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('', views.post_list, name='post_list'),
    ]
    
  2. 프로젝트 레벨 연동 (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/) 주소로 접속하여 데이터를 웹 환경에서 손쉽게 관리할 수 있습니다.