Django란?
Django(장고)는 파이썬으로 작성된 고수준 웹 프레임워크다. 2005년 미국 캔자스의 Lawrence Journal-World 신문사에서 웹 개발을 하던 Adrian Holovaty와 Simon Willison이 만들었다. 신문사의 빠른 개발 요구사항을 충족시키기 위해 탄생한 Django는 "완벽주의자들을 위한 웹 프레임워크"라는 슬로건을 가지고 있다.
Django의 핵심 철학
1. DRY (Don't Repeat Yourself)
코드의 중복을 최소화하라. Django는 재사용 가능한 앱과 컴포넌트를 통해 이를 실현한다.
2. 빠른 개발
프로토타입에서 프로덕션까지 빠르게 개발할 수 있도록 설계되었다. 기본적으로 필요한 기능들이 대부분 내장되어 있다.
3. 명시적인 것이 암시적인 것보다 낫다
파이썬의 철학을 그대로 따른다. 마법같은 동작보다는 명확하고 이해하기 쉬운 코드를 지향한다.
MVT 아키텍처
Django는 MVT(Model-View-Template) 패턴을 사용한다. 이는 MVC 패턴의 변형으로 볼 수 있다.
# Model - 데이터 구조 정의
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
# View - 비즈니스 로직 처리
def article_list(request):
articles = Article.objects.all()
return render(request, 'articles/list.html', {'articles': articles})
# Template - 표현 계층
# articles/list.html
{% for article in articles %}
<h2>{{ article.title }}</h2>
<p>{{ article.content }}</p>
{% endfor %}
Django의 주요 구성 요소
1. ORM (Object-Relational Mapping)
SQL을 직접 작성하지 않고도 데이터베이스를 다룰 수 있다. 데이터베이스 독립적이어서 SQLite, PostgreSQL, MySQL, Oracle 등을 쉽게 전환할 수 있다.
# SQL 대신 파이썬 코드로 쿼리
articles = Article.objects.filter(
created_at__gte=datetime.now() - timedelta(days=7)
).order_by('-created_at')
2. URL 라우팅
깔끔하고 우아한 URL 설계를 지원한다.
urlpatterns = [
path('articles/', views.article_list, name='article_list'),
path('articles/<int:pk>/', views.article_detail, name='article_detail'),
path('api/v1/', include('api.urls')),
]
3. 미들웨어
요청과 응답 처리 과정에 개입할 수 있는 훅을 제공한다. 인증, 세션, CSRF 보호 등이 미들웨어로 구현되어 있다.
4. Forms
HTML 폼을 파이썬 클래스로 정의하고 유효성 검사를 자동화한다.
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = ['title', 'content']
def clean_title(self):
title = self.cleaned_data.get('title')
if len(title) < 5:
raise forms.ValidationError('제목은 5자 이상이어야 합니다.')
return title
5. Admin 인터페이스
모델을 등록하면 자동으로 관리자 페이지가 생성된다. CRUD 작업을 위한 별도 개발이 필요없다.
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'created_at']
search_fields = ['title', 'content']
Django의 앱 구조
Django는 프로젝트를 여러 개의 앱으로 나누어 관리한다. 각 앱은 특정 기능을 담당하는 독립적인 모듈이다.
myproject/
├── manage.py
├── myproject/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── blog/
│ ├── migrations/
│ ├── __init__.py
│ ├── models.py
│ ├── views.py
│ ├── urls.py
│ └── admin.py
└── users/
├── migrations/
├── __init__.py
├── models.py
├── views.py
└── admin.py
Django의 강력한 기능들
1. 마이그레이션
모델 변경사항을 데이터베이스에 자동으로 반영한다.
python manage.py makemigrations
python manage.py migrate
2. 캐싱
다양한 캐싱 백엔드를 지원한다. Memcached, Redis, 데이터베이스 캐싱 등을 쉽게 적용할 수 있다.
3. 국제화(i18n)와 지역화(l10n)
다국어 지원이 내장되어 있어 글로벌 서비스 개발이 용이하다.
4. 보안
- CSRF 토큰 자동 생성
- SQL 인젝션 방지
- XSS 공격 방지
- 클릭재킹 방지
- HTTPS 리다이렉션
5. 테스팅
강력한 테스트 프레임워크가 내장되어 있다.
from django.test import TestCase
from .models import Article
class ArticleTestCase(TestCase):
def test_article_creation(self):
article = Article.objects.create(
title="Test Article",
content="Test Content"
)
self.assertEqual(article.title, "Test Article")
Django의 장단점
장점
- 빠른 개발 속도
- 풍부한 기능 내장
- 강력한 보안 기능
- 확장성과 재사용성
단점
- 학습 곡선이 가파름
- 작은 프로젝트에는 과할 수 있음
- 모놀리식 구조
Django는 "배터리 포함" 철학으로 웹 개발에 필요한 거의 모든 기능을 제공하는 풀스택 프레임워크다. 빠른 개발과 안정성, 보안을 중시하는 프로젝트라면 Django는 여전히 최고의 선택지 중 하나다.
'Backend study > Django' 카테고리의 다른 글
Django 언어 설정과 국제화(i18n) - LANGUAGE_CODE (3) | 2025.07.11 |
---|---|
Django 프로젝트에서 자동 생성되는 데이터베이스 테이블 (0) | 2025.07.08 |
APIView와 ViewSet (0) | 2025.07.02 |
Django에서 시간대(Timezone) 다루기 - django.utils.timezone (0) | 2025.06.30 |
Django 프로젝트 구조와 명령어 완벽 가이드 (0) | 2025.06.27 |