장고 Django

[Django] Django

PaperDrop 2026. 4. 18. 16:26

▪️Django

웹 서비스를 만들기 시작하면 반드시 한 번은 만나게 되는 이름이 있다. 바로 Django다.

 

인스타그램, 핀터레스트, 디스커스(Disqus) 같은 대규모 서비스도 Django를 기반으로 성장했다. 단순히 “파이썬 웹 프레임워크”라고만 설명하기에는 부족하다. Django는 웹 서비스를 빠르게, 안정적으로, 그리고 유지보수하기 쉽게 만들기 위한 하나의 철학에 가깝다.

 

이번 글에서는 Django가 무엇인지, 왜 사용하는지, 어떤 구조로 동작하는지, 실제 개발에서는 어떻게 활용되는지까지 한 번에 정리해보겠다.

 

 

 

▪️Django란?

Django는 Python 기반의 웹 프레임워크다.

 

프레임워크는 웹 서비스를 만들 때 반복적으로 필요한 기능들을 미리 제공해주는 뼈대다.

예를 들어:

  • 회원가입 / 로그인
  • 데이터베이스 연결
  • 관리자 페이지
  • URL 처리
  • 보안 기능
  • HTML 렌더링

이런 것들을 처음부터 직접 만들 필요 없이, Django가 이미 제공한다.

 

Django의 공식 슬로건은 다음과 같다.

The web framework for perfectionists with deadlines.

 

즉, “마감이 있는 완벽주의자를 위한 웹 프레임워크”다.

이 문장이 Django를 가장 정확하게 설명한다.

 

 

 

▪️왜 Django를 사용할까?

많은 프레임워크가 있지만 Django가 특히 강력한 이유는 다음 5가지다.

 

1. 개발 속도가 매우 빠르다

Django는 대부분의 웹 서비스에 필요한 기능을 기본 제공한다.

 

예를 들어 회원 관리 기능이 필요한 경우:

  • User 모델
  • 로그인 / 로그아웃
  • 비밀번호 암호화
  • 세션 관리
  • 관리자 페이지

를 직접 구현하지 않아도 된다.

 

단 몇 줄만으로 사용할 수 있다.

from django.contrib.auth.models import User

이미 준비되어 있는 기능을 조합하기만 하면 된다.

 

즉, 개발자는 비즈니스 로직에 집중할 수 있다.

 

2. 보안 기능이 기본 탑재되어 있다

웹 서비스는 보안이 매우 중요하다.

 

Django는 대표적인 웹 공격을 기본적으로 방어한다.

  • SQL Injection
  • XSS(Cross Site Scripting)
  • CSRF(Cross Site Request Forgery)
  • 클릭재킹
  • 세션 하이재킹

예를 들어 HTML 폼을 만들 때:

<form method="post">
    {% csrf_token %}
    <input type="text" name="title">
</form>

{% csrf_token %} 한 줄만 넣어도 CSRF 공격 방어가 적용된다.

 

초보 개발자가 놓치기 쉬운 보안 요소를 Django가 기본적으로 챙겨준다.

 

3. 관리자 페이지가 자동 생성된다

Django를 처음 써보면 가장 놀라는 기능이다.

 

모델만 정의하면 관리자 페이지(admin)가 자동으로 만들어진다.

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

 

그리고 admin에 등록하면:

from django.contrib import admin
from .models import Post

admin.site.register(Post)

바로 이런 기능이 생긴다.

  • 게시글 추가
  • 수정
  • 삭제
  • 검색
  • 필터링

즉, 별도의 백오피스를 만들지 않아도 운영이 가능하다.

초기 스타트업이나 MVP 개발에서 엄청난 시간을 절약할 수 있다.

 

4. ORM 덕분에 SQL을 직접 많이 쓰지 않아도 된다

Django는 ORM(Object Relational Mapping)을 제공한다.

 

ORM은 데이터베이스를 파이썬 객체처럼 다룰 수 있게 해주는 기능이다.

 

SQL을 직접 쓰면:

SELECT * FROM post WHERE id = 1;

 

Django ORM에서는:

Post.objects.get(id=1)

처럼 작성한다.

 

조금 더 복잡한 예시도 가능하다.

Post.objects.filter(title__contains="Django")

이 방식의 장점은:

  • 코드가 더 읽기 쉽다
  • 데이터베이스 종류가 바뀌어도 수정이 적다
  • SQL Injection 위험이 줄어든다

물론, 성능 최적화가 필요한 상황에서는 raw SQL도 사용할 수 있다.

 

 

 

▪️Django의 핵심 구조: MTV 패턴

Django는 일반적인 MVC(Model-View-Controller) 대신 MTV(Model-Template-View) 구조를 사용한다.

 

처음에는 이름이 헷갈릴 수 있지만 실제 역할은 단순하다.

1) Model

데이터베이스 구조를 정의한다.

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

위 코드는 Post 테이블을 의미한다.

 

2) View

실제 로직을 처리한다.

사용자가 요청을 보내면 View가 데이터를 가져오고, 어떤 화면을 보여줄지 결정한다.

from django.shortcuts import render
from .models import Post


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

 

3) Template

사용자에게 보여지는 화면이다.

<h1>게시글 목록</h1>

{% for post in posts %}
    <h2>{{ post.title }}</h2>
    <p>{{ post.content }}</p>
{% endfor %}

 

4) 전체 흐름

전체 흐름은 다음과 같다.

사용자 요청
→ URL
→ View 실행
→ Model로 데이터 조회
→ Template 렌더링
→ 사용자에게 HTML 응답

 

이 구조 덕분에 코드 역할이 명확하게 분리된다.

  • 데이터 처리
  • 비즈니스 로직
  • 화면 표현

을 따로 관리할 수 있기 때문에 프로젝트가 커져도 유지보수가 쉽다.

 

 

 

▪️Django 프로젝트는 어떤 구조로 되어 있을까?

Django 프로젝트를 생성하면 보통 다음과 같은 구조가 만들어진다.

myproject/
├── manage.py
├── myproject/
│   ├── settings.py
│   ├── urls.py
│   ├── wsgi.py
│   └── asgi.py
└── blog/
    ├── models.py
    ├── views.py
    ├── urls.py
    ├── admin.py
    └── templates/

 

각 파일의 역할은 다음과 같다.

파일 역할
manage.py Django 명령 실행
settings.py 프로젝트 설정
urls.py URL 연결
models.py 데이터베이스 모델
views.py 요청 처리 로직
admin.py 관리자 페이지 설정

 

예를 들어 URL 연결은 이렇게 한다.

from django.urls import path
from .views import post_list

urlpatterns = [
    path("posts/", post_list),
]

이제 /posts/로 접속하면 post_list 함수가 실행된다.

 

 

 

▪️Django로 실제로 무엇을 만들 수 있을까?

Django는 단순 블로그뿐 아니라 거의 모든 웹 서비스를 만들 수 있다.

 

만들 수 있는 서비스 예시)

  • 블로그
  • 쇼핑몰
  • 커뮤니티
  • SaaS 서비스
  • 예약 시스템
  • 관리자 페이지
  • 기업 내부 시스템
  • REST API 서버
  • AI 서비스 백엔드

특히 Python 생태계와 연결이 쉽기 때문에 다음 조합이 강력하다.

Django + Pandas + AI 모델 + 데이터 분석

 

예를 들어:

  • 사용자가 파일 업로드
  • Django가 처리
  • Pandas로 데이터 분석
  • AI 모델이 결과 생성
  • 웹 화면에 출력

같은 구조를 쉽게 만들 수 있다.

최근 AI 기반 서비스들이 Django를 많이 사용하는 이유다.

 

 

 

▪️Django와 Flask는 무엇이 다를까?

파이썬 웹 프레임워크를 이야기하면 Flask와 항상 비교된다.

항목 Django Flask
철학 필요한 기능 대부분 제공 최소 기능만 제공
개발 속도 매우 빠름 초기 세팅 필요
자유도 다소 제한적 매우 높음
관리자 페이지 기본 제공 직접 구현
ORM 기본 제공 선택
추천 상황 큰 프로젝트, 서비스 개발 간단한 API, 실험용

 

쉽게 말하면:

  • Django = 풀옵션 SUV
  • Flask = 가벼운 스포츠카

빠르게 완성도 높은 서비스를 만들고 싶다면 Django가 더 유리하다.

 

반대로 구조를 완전히 직접 설계하고 싶다면 Flask가 더 잘 맞을 수 있다.

 

 

 

 

▪️Django 단점

1. 처음에는 구조가 복잡해 보인다

파일이 많고, 규칙이 많다.

 

처음 접하면:

  • 왜 settings.py가 필요한지
  • 왜 app을 따로 만드는지
  • URL, View, Template가 왜 나뉘는지

헷갈릴 수 있다.

 

하지만 프로젝트 규모가 커질수록 이 구조 덕분에 오히려 편해진다.

2. 작은 프로젝트에는 다소 무겁다

간단한 API 하나만 만들고 싶다면 Django는 과할 수 있다.

 

예를 들어 단순히:

  • JSON 응답 하나
  • 라우터 하나
  • 테스트용 서버 하나

정도라면 Flask나 FastAPI가 더 가볍다.

3. Django만의 방식에 익숙해져야 한다

Django는 “이렇게 개발하는 것이 좋다”는 철학이 강하다.

 

즉, 자유도보다 일관성을 중요하게 생각한다.

 

처음에는 답답할 수 있지만, 팀 프로젝트에서는 오히려 장점이 된다.

누가 코드를 봐도 비슷한 구조이기 때문이다.

 

 

 

 

▪️Django를 시작하는 가장 쉬운 방법

아래 4단계만 하면 바로 첫 프로젝트를 실행할 수 있다.

1단계: 설치

pip install django

 

2단계: 프로젝트 생성

django-admin startproject myproject
cd myproject

 

 

3단계: 서버 실행

python manage.py runserver

 

http://127.0.0.1:8000

 

 

4단계: 앱 생성

python manage.py startapp blog

이제 blog 앱 안에서 실제 기능을 개발하면 된다.

 

 

 

 

▪️초보자가 가장 많이 하는 실수

Django를 처음 배울 때 대부분 아래 실수를 한다.

  1. URL 연결을 안 함
  2. app을 settings.py에 등록하지 않음
  3. migration을 안 함
  4. template 폴더 위치를 잘못 둠
  5. model 수정 후 migrate를 하지 않음

특히 가장 많이 놓치는 명령은 이것이다.

python manage.py makemigrations
python manage.py migrate

 

Model을 수정했다면 반드시 실행해야 데이터베이스에 반영된다.

 

 

 

 

▪️결론: Django는 “빠르게, 제대로” 만들고 싶을 때 가장 강력하다

Django는 단순히 웹 프레임워크가 아니다.

  • 빠른 개발
  • 강력한 보안
  • 명확한 구조
  • 자동화된 관리자 기능
  • 뛰어난 확장성

을 모두 갖춘, 실무 중심의 프레임워크다.

 

 

특히 다음과 같은 사람에게 가장 추천한다.

  • 처음으로 웹 서비스를 만드는 사람
  • 빠르게 MVP를 출시하고 싶은 스타트업
  • 관리자 페이지가 필요한 서비스
  • Python 기반 AI / 데이터 프로젝트를 웹으로 연결하고 싶은 개발자

만약 지금까지 “웹 개발은 너무 어렵다”라고 느꼈다면, Django는 생각보다 훨씬 쉽게 시작할 수 있는 좋은 선택이다.

 

그리고 한 번 익숙해지면, 블로그 하나를 넘어 실제 서비스까지 만들 수 있게 된다.