웹 브라우저(Chrome, Firefox 등)에서 사용자가 특정 URL을 입력하거나 버튼을 클릭하여 서버로 요청을 보낸다.
사용자 (브라우저) → 서버로 요청 전송 (예: https://example.com/home)
웹 서버(Nginx, Apache)가 요청을 받아서 Django 애플리케이션으로 전달한다.
웹 서버는 정적 파일(이미지, CSS, JavaScript 등)을 제공하거나, 동적 요청을 애플리케이션 서버로 넘긴다.
Nginx / Apache → 요청을 애플리케이션 서버로 전달
Django는 단독으로 실행되지 않으며, Gunicorn이나 uWSGI 같은 WSGI 서버가 Django 애플리케이션을 실행해 요청을 전달한다.
Gunicorn / uWSGI → Django의 WSGI 엔트리포인트 실행 (wsgi.py)
Django는 urls.py
에서 요청받은 URL을 분석하고, 적절한 View로 연결한다.
from django.urls import path
from . import views
urlpatterns = [
path('home/', views.home, name='home'),
]
Django URL 매칭 → home/ 요청이 들어오면 views.home 실행
View는 URL과 연결된 함수 또는 클래스이며, 모델과 템플릿을 호출해 응답을 생성한다.
from django.shortcuts import render
from .models import Post
def home(request):
posts = Post.objects.all() # 모델에서 데이터 조회
return render(request, 'home.html', {'posts': posts}) # 템플릿에 데이터 전달
View 실행 → Model에서 데이터 조회 → Template에 데이터 전달
Django ORM을 사용하여 데이터베이스에서 데이터를 가져오거나 저장할 수 있다.
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
Model → 데이터베이스에서 데이터를 가져옴
Django의 템플릿 엔진은 데이터를 받아 HTML을 생성하고, 이를 클라이언트에게 반환한다.
<!DOCTYPE html>
<html>
<head>
<title>홈</title>
</head>
<body>
<h1>게시글 목록</h1>
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.content }}</p>
{% endfor %}
</body>
</html>
Template → View에서 전달받은 데이터를 이용해 HTML 생성
생성된 HTML 응답이 Django를 통해 애플리케이션 서버(Gunicorn, uWSGI) → 웹 서버(Nginx, Apache) → 클라이언트(브라우저)로 전달된다.
템플릿에서 HTML 렌더링 → 사용자 브라우저로 전송 → 화면 표시
@nullvuild