본문 바로가기
TIL _Today I Learned/2024.08

[DAY 23] Django 웹 애플리케이션 개발

by gamdong2 2024. 8. 12.
[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.08.12

📕 학습 목록

  • Django 개요
  • MTV 패턴
  • 요청 - 응답 흐름
  • Django 프로젝트

 

📗 기억할 내용

[Django 개요]

장고는 파이썬으로 작성된 고수준 웹 프레임워크로, 웹 애플리케이션을 빠르고 효율적으로 개발할 수 있도록 여러 기능을 제공함. 장고는 웹 개발에 필요한 많은 기능을 내장하고 있어 코드의 반복을 줄이고 개발 시간을 절약할 수 있음 

 1. 장고 기본 개념

  • 장고 프로젝트: 웹 애플리케이션을 만드는 기본 단위. 하나의 프로젝트는 여러 앱으로 구성될 수 있음
  • 앱(App): 프로젝트 내에서 특정 기능을 담당하는 모듈. 예를 들어 블로그 기능이 필요한 경우 블로그 앱을 만들 수 있음
  • MTV 패턴: 장고는 MVC 패턴의 변형인 MTV(Model-Template-View) 패턴을 따름
    • Model: 데이터베이스 구조를 정의하고 데이터를 관리
    • Template: 사용자에게 보여지는 HTML 등의 레이아웃을 구성
    • View: 클라이언트의 요청을 받고, 처리 후 응답을 반환하는 로직

 

2. MTV 패턴의 요청-응답 흐름

장고의 MTV 패턴을 사용한 요청-응답 흐름

1. 웹 클라이언트: 사용자가 웹 브라우저나 다른 클라이언트를 통해 서버에 요청(Request)을 보냄
2. URL Conf (URL Configuration): 장고에서 URL과 뷰(View)를 연결해 주는 설정 파일. 클라이언트의 요청이 들어오면 URL Conf가 이를 분석하여 어떤 뷰로 전달할지 결정함
3. View: URL Conf에 의해 호출된 뷰는 클라이언트의 요청을 처리. 요청을 바탕으로 필요한 데이터베이스 작업(CRUD: Create, Read, Update, Delete)을 Model을 통해 수행하고, 처리 결과를 Template에 전달함
4. Model: 데이터베이스와 연동된 데이터 구조를 정의하는 부분. ORM(Object-Relational Mapping)을 통해 데이터베이스와 상호작용하며, 데이터를 저장하고 가져오는 작업을 수행함
5. DB (Database): Model에서 정의된 데이터 구조는 데이터베이스에 저장. Model은 ORM을 통해 데이터베이스와 통신하여 데이터를 저장하고 조회함
6. Template: View에서 전달된 데이터를 사용하여 HTML 등으로 렌더링(rendering)하는 역할. 클라이언트에게 보일 화면을 생성함
7. Response: Template을 통해 생성된 화면을 응답(Response)으로 클라이언트에 반환하여 웹 페이지가 사용자에게 표시됨

 

 

[Django 프로젝트]

 

1) 장고 설치 및 프로젝트 생성

① 장고 설치 

pip install django

 

② 프로젝트 생성

django-admin startproject myproject

③ 앱 생성

 

python manage.py startapp myapp

 

2) 프로젝트 및 앱 구조

  • 장고 프로젝트를 생성하면 다음 구조가 나타남
myproject/
├── myproject/
│   ├── __init__.py
│   ├── settings.py        # 설정 파일
│   ├── urls.py            # URL 매핑
│   ├── asgi.py
│   └── wsgi.py
└── myapp/
    ├── migrations/
    ├── __init__.py
    ├── admin.py           # 관리자 페이지 설정
    ├── apps.py
    ├── models.py          # 데이터베이스 모델 정의
    ├── tests.py           # 테스트 코드
    ├── views.py           # 비즈니스 로직
    └── urls.py            # 앱별 URL 매핑

 

3) 모델 (Model)

  • 데이터베이스의 구조를 정의하는 역할
  • 모델을 정의한 후, 장고가 이를 데이터베이스 테이블로 변환해 줌
# myapp/models.py

from django.db import models

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

    def __str__(self):
        return self.title

 

4)  URL 설정

  • 장고는 urls.py 파일을 통해 URL을 관리함
  • 프로젝트와 앱별로 URL을 설정하여 라우팅할 수 있음
# myproject/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),  # myapp의 URL 설정을 포함
]
# myapp/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('post/<int:id>/', views.post_detail, name='post_detail'),
]

 

5) 뷰 (View)

  • 요청을 처리하고 응답을 반환하는 역할
  • 함수형 뷰(Function-based view)와 클래스형 뷰(Class-based view) 두 가지 방식이 있음
    • 함수형 뷰: 파이썬 함수를 사용하여 요청을 처리하는 방식. URL과 직접 연결된 함수로, 주로 짧고 간단한 로직을 구현할 때 사용. 함수형 뷰는 가독성이 높고 이해하기 쉽지만, 복잡한 로직을 구현하거나 여러 요청 방식을 처리할 때 코드가 복잡해질 수 있음
    • 클래스형 뷰: 파이썬 클래스를 사용하여 뷰를 정의하는 방식. 코드의 재사용성을 높이고, 특정 기능을 위한 장고의 제네릭 뷰를 상속받아 빠르게 뷰를 구현할 수 있는 장점이 있음. 복잡한 뷰 로직을 깔끔하게 정리할 수 있고, 다양한 HTTP 메서드(GET, POST 등)를 별도의 메서드로 관리할 수 있어 더 구조화된 코드 작성을 지원함
# myapp/views.py

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

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

def post_detail(request, id):
    post = get_object_or_404(Post, id=id)
    return render(request, 'myapp/post_detail.html', {'post': post})

 

6) 템플릿 (Template)

  • 템플릿은 HTML 파일로, 사용자에게 보여지는 화면을 구성
  • 장고의 템플릿 엔진을 사용하여 동적 데이터를 표시할 수 있음
<!-- myapp/templates/myapp/index.html -->

<!DOCTYPE html>
<html>
<head>
    <title>My Blog</title>
</head>
<body>
    <h1>Blog Posts</h1>
    <ul>
        {% for post in posts %}
            <li><a href="{% url 'post_detail' post.id %}">{{ post.title }}</a></li>
        {% endfor %}
    </ul>
</body>
</html>
<!-- myapp/templates/myapp/post_detail.html -->

<!DOCTYPE html>
<html>
<head>
    <title>{{ post.title }}</title>
</head>
<body>
    <h1>{{ post.title }}</h1>
    <p>{{ post.content }}</p>
    <p>Published on: {{ post.created_at }}</p>
</body>
</html>

 

7) 관리자 페이지 설정

  • 장고는 기본적으로 관리자 페이지를 제공
  • admin.py 파일에서 모델을 등록하여 관리자 페이지에서 데이터를 관리할 수 있음
# myapp/admin.py

from django.contrib import admin
from .models import Post

admin.site.register(Post)

 

8) 데이터베이스 마이그레이션

  • 모델을 정의한 후, 데이터베이스에 반영하기 위해 마이그레이션을 진행해야 함
python manage.py makemigrations
python manage.py migrate

 

9) 장고 서버 실행

  • 장고 서버를 실행하여 로컬에서 개발 중인 웹 애플리케이션을 확인할 수 있음
python manage.py runserver

 


 

📙 내일 일정

  • Django 웹 애플리케이션 개발

 

 

 

 

 

 

'TIL _Today I Learned > 2024.08' 카테고리의 다른 글

[DAY 25] Django 웹 애플리케이션 개발, 웹 크롤링  (0) 2024.08.14
[DAY 24] Django 웹 애플리케이션 개발  (0) 2024.08.13
[DAY 22] Flask  (0) 2024.08.09
[DAY 21] Flask  (0) 2024.08.08
[DAY 20] SQL  (0) 2024.08.07