[Django] Intro & Design Pattern

Yujin·2023년 10월 4일
0
post-thumbnail

클라이언트 (Client)

  • 서비스를 요청하는 주체
  • 웹 사용자의 인터넷이 연결된 장치
  • 웹 브라우저

서버 (Server)

  • 클라이언트의 요청에 응답하는 주체
  • 앱을 저장하는 컴퓨터
  • 웹 페이지

가상 환경

  • Python 애플리케이션과 그에 따른 패키지들을 격리하여 관리할 수 있는 독립적인 실행 환경

Django 프로젝트 생성 전 루틴(1~4) + git(5~7)

  1. 가상환경(venv) 생성 : python -m venv venv
  2. 가상환경 활성화 : source venv/Scripts/activate
  3. Django 설치 : pip install Django
  4. 의존성 패키지 파일 생성 : pip freeze > requirements.txt
    • 패키지 설치시마다 진행

  1. .gitignore 파일 생성 (첫 add 전)
  2. git 저장소 생성
  3. Djgnao 프로젝트 생성

가상환경 사용 이유

  1. 의존성 관리
    • 라이브러리 및 패키지를 각 프로젝트마다 독립적으로 사용 가능
  2. 팀 프로젝트 협업
    • 모든 팀원이 동일한 환경과 의존성 위에서 작업하여 버전 간 충돌을 방지

LTS (Long-Term Support)

  • 프레임워크나 라이브러리 등의 소프트웨어에서 장기간 지원되는 안정적인 버전을 의미할 때 사용
  • 기업이나 대규모 프로젝트에서는 소프트웨어 업그레이드에 많은 비용과 시간이 필요하기 때문에 안정적이고 장기간 지원되는 버전이 필요

Django Project

  • 애플리케이션의 집합
  • DB 설정, URL 연결, 전체 앱 설정 등

Django Application

  • 독립적으로 작동하는 기능 단위 모듈
  • 각자 특정한 기능을 담당하며, 다른 앱들과 함께 하나의 프로젝트를 구성

디자인 패턴

  • 소프트웨어 설계에서 발생하는 문제를 해결하기 위한 일반적인 해결책
  • 공통적인 문제를 해결하는데 쓰이는 형식화된 관행

MVC 디자인 패턴

  • Model, View, Controller
  • 애플리케이션을 구조화하는 대표적인 패턴
  • 데이터, 사용자 인터페이스, 비즈니스 로직을 분리
  • 시각적 요소와 뒤에서 실행되는 로직을 서로 영향 없이, 독립적이고 쉽게 유지 보수할 수 있는 애플리케이션을 만들기 위함

MTV 디자인 패턴

  • Model, Template, View
  • Django에서 애플리케이션을 구조화하는 패턴
  • 기존 MVC 패턴과 동일하나, 명칭을 다르게 정의한 것
    • 기존 MVC 패턴에서 View → Template, Controller → View
  • Model
    • 데이터와 관련된 로직을 관리
    • 응용프로그램의 데이터 구조를 정의하고, 데이터베이스의 기록을 관리
  • Template
    • 레이아웃과 화면을 처리
    • 화면상의 사용자 인터페이스 구조와 레이아웃을 정의
  • View
    • Model & Template과 관련한 로직을 처리해서 응답을 반환
    • 클라이언트의 요청에 따라 처리를 분기하는 역할

프로젝트 구조

  • settings.py
    • 프로젝트의 모든 설정을 관리
  • urls.py
    • URL과 이에 해당하는 적절한 views를 연결
  • init.py
    • 해당 폴더를 패키지로 인식하도록 설정
  • asgi.py
    • 비동기식 웹 서버와의 연결 관련 설정
  • wsgi.py
    • 웹 서버와의 연결 관련 설정
  • manage.py
    • Django 프로젝트와 다양한 방법으로 상호작용하는 커맨드라인 유틸리티

앱 구조

  • admin.py
    • 관리자용 페이지 설정
  • models.py
    • DB와 관련된 Model을 정의
    • MTV 패턴의 M
  • views.py
    • HTTP 요청을 처리하고 해당 요청에 대한 응답을 반환
    • url, mode, template과 연계
    • MTV 패턴의 V
  • apps.py
    • 앱의 정보가 작성된 곳
  • tests.py
    • 프로젝트 테스트 코드를 작성하는 곳

요청과 응답

🔮 URLs

# urls.py

from django.contrib import admin
from django.urls import path
from articles import views  # articles 패키지에서 views 모듈을 가져옴

urlpatterns = [
    path('admin/', admin.site.urls),
    path('articles/', views.index),
]

🔮 View

  • 특정 경로에 있는 template과 request 객체를 결합하여 응답 객체를 반환하는 index view 함수를 정의
  • 모든 view 함수는 첫 번째 인자로 request(요청) 객체를 필수적으로 받음

🔮 Template

  • 폴더명은 반드시 templates 여야 하며, 개발자가 직접 생성해야 함

데이터 흐름에 따른 코드 작성

  • URLs → View → Template

render 함수

  • 주어진 템플릿을 주어진 컨텍스트 데이터와 결합하고, 렌더링된 텍스트와 함께 HttpResponse(응답) 객체를 반환하는 함수
  • render(request, template_name, context)
    1. request : 응답을 생성하는 데 사용되는 요청 객체
    2. template_name : 템플릿 이름의 경로
    3. context : 템플릿에서 사용할 데이터 (딕셔너리 타입으로 작성)

0개의 댓글