프로그래밍/Python

Python 웹 개발: Django 완벽 가이드

shimdh 2025. 2. 28. 09:18
728x90

웹 개발은 단순한 정적인 페이지에서부터 데이터베이스와 연동되는 복잡한 애플리케이션까지 다양한 형태로 발전해 왔습니다. Python은 웹 개발에 최적화된 언어 중 하나이며, 그중에서도 Django는 강력한 기능과 높은 생산성을 제공하는 웹 프레임워크로 널리 사용되고 있습니다.

Django는 "배터리가 포함된 프레임워크(Batteries Included)"라는 철학을 바탕으로, ORM(Object-Relational Mapping), URL 라우팅, 폼 처리, 보안 기능, 관리자 패널 등 대부분의 웹 개발에 필요한 기능을 기본적으로 제공하여 빠른 개발을 가능하게 합니다.

이번 글에서는 Django의 핵심 개념, 프로젝트 설정, ORM 활용, 템플릿 시스템, 그리고 간단한 블로그 애플리케이션 구축까지 차근차근 알아보겠습니다.


1. Django란 무엇인가?

🔹 Django의 특징

Django는 Python 기반의 고급 웹 프레임워크로, 대규모 애플리케이션부터 소규모 프로젝트까지 다양한 용도로 활용됩니다. Django의 주요 특징은 다음과 같습니다.

  • MTV 아키텍처(Model-Template-View): 코드의 구조를 명확하게 유지할 수 있음.
  • ORM(Object-Relational Mapping): SQL을 직접 사용하지 않고 Python 코드로 데이터베이스를 조작할 수 있음.
  • 강력한 관리자 인터페이스(Admin Panel): 기본적으로 제공되는 강력한 백오피스를 활용하여 데이터 관리 가능.
  • 보안 기능 제공: XSS, CSRF 공격 방지, 사용자 인증 기능 내장.
  • 빠른 개발 속도: 기본적으로 포함된 기능을 활용하여 웹 애플리케이션을 신속하게 구축할 수 있음.

2. Django 프로젝트 설정

Django를 사용하려면 먼저 Python이 설치되어 있어야 하며, django 패키지를 설치해야 합니다.

🔹 Django 설치

pip install django

🔹 Django 프로젝트 생성

프로젝트를 시작하려면 django-admin startproject 명령어를 사용합니다.

django-admin startproject myproject
cd myproject
python manage.py runserver
  • myproject/ 디렉터리가 생성되며, Django 프로젝트의 기본 구조가 자동으로 설정됩니다.
  • runserver 명령어를 실행하면 로컬 서버(127.0.0.1:8000) 가 실행되며, 브라우저에서 Django 기본 페이지를 확인할 수 있습니다.

3. Django의 MTV 아키텍처

Django는 Model-Template-View (MTV) 아키텍처를 따르며, 이는 MVC 패턴과 유사한 개념입니다.

컴포넌트 역할
Model(모델) 데이터베이스 테이블을 정의하고 ORM을 통해 데이터를 조작
Template(템플릿) HTML과 Django 템플릿 언어를 이용하여 동적인 웹 페이지 렌더링
View(뷰) 사용자 요청을 처리하고 응답을 반환하는 비즈니스 로직

4. Django URL 라우팅

Django에서는 urls.py 파일을 활용하여 특정 URL과 뷰(View)를 매핑할 수 있습니다.

🔹 URL 패턴 정의 (urls.py)

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('about/', views.about, name='about'),
]
  • path('', views.index, name='index') → 루트 URL 요청 시 index() 뷰 함수 실행.
  • path('about/', views.about, name='about')/about/ URL 요청 시 about() 함수 실행.

5. Django ORM (Object-Relational Mapping)

Django ORM을 사용하면 SQL을 직접 작성하지 않고도 Python 코드로 데이터베이스를 조작할 수 있습니다.

🔹 모델 정의 (models.py)

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    published_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title
  • title → 문자열 필드(최대 100자).
  • content → 긴 텍스트 저장.
  • published_date → 자동으로 현재 날짜가 저장됨.

🔹 데이터베이스 적용

python manage.py makemigrations
python manage.py migrate

위 명령어를 실행하면 데이터베이스에 Article 테이블이 생성됩니다.

🔹 데이터 저장 및 조회 (views.py)

from django.shortcuts import render
from .models import Article

def index(request):
    articles = Article.objects.all()  # 모든 게시글 조회
    return render(request, 'index.html', {'articles': articles})

6. Django 템플릿 시스템

Django는 Jinja2 기반의 템플릿 엔진을 사용하여 동적인 HTML 페이지를 생성할 수 있습니다.

🔹 템플릿 파일 (templates/index.html)

<!DOCTYPE html>
<html>
<head>
    <title>블로그</title>
</head>
<body>
    <h1>게시글 목록</h1>
    <ul>
        {% for article in articles %}
            <li>{{ article.title }} - {{ article.published_date }}</li>
        {% endfor %}
    </ul>
</body>
</html>
  • {% for article in articles %} → Python 리스트 데이터를 템플릿에서 반복 출력.
  • {{ article.title }}Article 객체의 title 속성을 출력.

7. Django 관리자 패널 (Admin Panel)

Django는 기본적으로 강력한 관리자 페이지를 제공하여, 데이터베이스 모델을 쉽게 관리할 수 있습니다.

🔹 관리자 패널 활성화 (admin.py)

from django.contrib import admin
from .models import Article

admin.site.register(Article)

🔹 관리자 계정 생성

python manage.py createsuperuser

위 명령어를 실행한 후 사용자명, 이메일, 비밀번호를 설정하면 관리자 페이지에 로그인할 수 있습니다.

  • http://127.0.0.1:8000/admin/ 에 접속하여 관리자 페이지 확인 가능.

8. Django로 간단한 블로그 애플리케이션 만들기

Django를 활용하여 간단한 블로그 애플리케이션을 구축할 수 있습니다.

🔹 프로젝트 및 앱 생성

django-admin startproject myblog
cd myblog
django-admin startapp blog

🔹 모델 정의 (models.py)

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

🔹 뷰 작성 (views.py)

from django.shortcuts import render, get_object_or_404
from .models import Post

def post_list(request):
    posts = Post.objects.all()
    return render(request, 'post_list.html', {'posts': posts})

🔹 URL 매핑 (urls.py)

urlpatterns = [
    path('', views.post_list, name='post_list'),
]

🔥 결론: Django로 강력한 웹 애플리케이션 개발하기

Django는 빠른 개발 속도, 강력한 보안 기능, 높은 생산성을 제공하여, 초보자부터 전문가까지 모두 활용할 수 있는 강력한 웹 프레임워크입니다.

🎯 핵심 정리

  • Django는 MTV 아키텍처를 기반으로 동작.
  • ORM을 활용하여 데이터베이스를 효율적으로 조작 가능.
  • 내장된 관리자 패널을 통해 데이터 관리 가능.
  • 템플릿 시스템을 활용하여 동적인 HTML 페이지 생성 가능.

Django를 활용하여 강력한 웹 애플리케이션을 만들어보세요! 🚀

728x90