[TIL] 파이썬과 장고의 작동원리

오진선·2025년 1월 15일
0

TIL

목록 보기
29/29
post-thumbnail

🐍 파이썬의 작동 원리

💻 인터프리터 언어

  • 파이썬 코드는 소스 코드를 한 줄씩 읽고 해석하는 인터프리터에 의해 실행된다.
  • 실행 흐름:
    1. 파이썬 소스 코드 작성: .py 파일을 작성한다.
    2. 바이트코드로 변환: 인터프리터가 코드를 .pyc 바이트코드로 변환한다.
    3. 실행: 파이썬 가상 기계(PVM)이 바이트코드를 실행한다.

🧱 객체지향 언어

  • 모든 것이 객체(Object)로 표현된다.
  • 클래스와 객체를 사용해 데이터를 구조화하고 동작을 정의한다.

📦 모듈과 패키지 시스템

  • 파이썬은 다양한 기능을 모듈 단위로 나누어 제공한다.
  • 예) os, sys, json 같은 기본 모듈, django 같은 서드파티 모듈.

🌐 장고의 작동 원리

장고는 웹 프레임워크로, 웹 요청(Request)을 처리해 응답(Response)을 반환하는 작업을 자동화한다.
장고의 작동 원리를 간단히 정리해보면 다양한 구조가 독립적인 역할을 수행한다.


💡 장고 요청-응답 흐름의 이해 (Request-Response Cycle)

  1. 클라이언트의 요청:

    • 사용자가 브라우저에서 URL(예: http://example.com/blog/)을 요청한다.
    • 이 요청은 HTTP 프로토콜을 통해 장고 서버로 전달된다.
  2. WSGI 서버 처리:

    • 장고는 WSGI(Web Server Gateway Interface) 서버를 통해 요청을 받는다.
    • WSGI는 HTTP 요청을 Python 애플리케이션에서 처리할 수 있도록 중개 역할을 한다.
    • WSGI는 장고와 웹 서버(Apache, Nginx) 간의 인터페이스 역할을 한다.
  3. URL 라우팅:

    • 요청 URL은 urls.py에서 어느 뷰(View)가 요청을 처리할지 결정한다.
    • 예) /blog/ 요청은 blog.views.index 함수로 전달된다.
  4. 뷰(View) 처리:

    • 뷰(View)는 요청 데이터를 받고 비즈니스 로직을 처리한다.
    • 필요시 데이터베이스(Model)와 상호작용해 데이터를 가져온다.
    • 결과 데이터를 템플릿(HTML)에 전달한다.
  5. 템플릿 렌더링:

    • 템플릿 시스템은 HTML 파일과 데이터를 결합하여 최종 HTML 응답을 생성한다.
  6. 응답 반환:

    • 생성된 HTML 파일이 HTTP 응답으로 클라이언트(브라우저)에게 반환된다.

🧩 장고의 MTV 아키텍처

장고는 MTV (Model-Template-View) 구조를 사용한다. 개발자는 가장 편하게 구조적인 구현을 수행할 수 있다.

구조 요소역할
Model데이터베이스 구조와 동작 정의 (데이터 저장, 조회, 수정 등).
View요청을 처리하고, 필요한 데이터를 가져와 템플릿에 전달.
Template사용자 화면(HTML)을 정의하고 데이터를 동적으로 렌더링한다.

예제: 블로그 글 요청 처리

  • URL: /blog/
  • 요청 흐름:
    1. URL: /blog/urls.py에서 blog.views.index 뷰로 전달.
    2. 뷰(View): 데이터베이스에서 블로그 글을 가져와 템플릿에 전달.
    3. 템플릿(Template): 가져온 데이터를 HTML에 렌더링하여 사용자에게 반환.

🔗 장고 ORM의 역할

장고는 ORM(Object-Relational Mapping)을 사용해 데이터베이스와 상호작용한다.

  • ORM은 파이썬 객체와 데이터베이스 간의 변환을 제공한다.
  • SQL을 직접 작성하지 않아도 데이터를 저장/조회할 수 있다.

ORM을 통한 데이터 저장

# blog/models.py
from django.db import models

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

# 데이터 저장
post = Post(title="My First Post", content="Hello, Django!")
post.save()

# 데이터 조회
all_posts = Post.objects.all()

filter, update, delete 메서드 예시

# 데이터 필터링
filtered_posts = Post.objects.filter(title__contains="Django")

# 데이터 업데이트
Post.objects.filter(id=1).update(title="Updated Title")

# 데이터 삭제
Post.objects.filter(id=1).delete()

🛡️ 장고 미들웨어 요약

장고는 요청(Request)과 응답(Response) 사이에 다양한 미들웨어를 사용해 보안, 성능, 다국어 지원 등을 자동화한다.

주요 미들웨어

  • CSRF 미들웨어: Cross-Site Request Forgery(CSRF) 공격을 방지하여 요청의 안전성을 보장.
  • SessionMiddleware: 세션 데이터를 관리하고 요청과 사용자 데이터를 연결.
  • AuthenticationMiddleware: 사용자의 인증 상태를 확인하고 request.user 객체를 제공.
  • CommonMiddleware: URL 정리(슬래시 추가/제거)와 브라우저 동작 수정.
  • SecurityMiddleware: HSTS, X-Content-Type-Options 등 보안 헤더 추가.
  • MessageMiddleware: 임시 메시지를 저장하고 전달.
  • LocaleMiddleware: 사용자 언어 설정을 처리해 다국어 지원.

사용 미들웨어 확인

settings.py에서 활성화된 미들웨어는 MIDDLEWARE 항목에서 확인할 수 있다.

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

사용자 정의 미들웨어

필요에 따라 직접 미들웨어를 작성하여 프로젝트의 요구 사항에 맞는 동작을 추가할 수 있다.

from django.utils.deprecation import MiddlewareMixin

class CustomMiddleware(MiddlewareMixin):
    def process_request(self, request):
        print("Request processed")

    def process_response(self, request, response):
        print("Response processed")
        return response

📂 장고의 주요 파일 역할

파일역할
manage.py장고 프로젝트 관리 명령어 (서버 실행, 마이그레이션 등).
settings.py프로젝트 설정 (데이터베이스, 앱, 미들웨어, 정적 파일 등).
urls.pyURL 요청을 뷰(View)로 라우팅.
views.py요청을 처리하고 응답 생성.
models.py데이터베이스 구조 정의 및 ORM 관리.
admin.py관리자 페이지 설정.
templates/사용자 화면을 구성하는 HTML 템플릿 저장.
static/정적 파일 (CSS, JS, 이미지 등).

🗂 장고의 정적 파일 관리

장고는 CSS, JavaScript, 이미지와 같은 정적 파일을 관리하기 위한 구조를 제공한다.

  • 정적 파일 디렉토리: static/ 디렉토리를 사용해 정적 파일을 저장.
  • settings.py에 정적 파일 관련 설정:
    STATIC_URL = '/static/'
    STATICFILES_DIRS = [BASE_DIR / "static"]
  • 정적 파일 로딩:
    {% load static %}
    <link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">

🛠 장고 관리 페이지의 강점

장고는 기본 제공 관리자 페이지(admin)를 통해 데이터를 쉽게 관리할 수 있다.

  • admin.py 파일에서 데이터베이스 모델을 등록하면 관리자 페이지에서 이를 제어 가능.

  • 관리자 페이지 등록 예시:

    from django.contrib import admin
    from .models import Post
    
    @admin.register(Post)
    class PostAdmin(admin.ModelAdmin):
        list_display = ('title', 'created_at')
        search_fields = ('title',)

✏️ 장고 폼 시스템

장고는 폼을 생성, 렌더링, 검증하는 강력한 시스템을 제공한다.

  • 폼 클래스 정의:

    from django import forms
    from .models import Post
    
    class PostForm(forms.ModelForm):
        class Meta:
            model = Post
            fields = ['title', 'content']
  • 폼을 템플릿에 렌더링:

    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Save</button>
    </form>
  • 폼 검증 및 저장:

    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()

🚀 장고의 강점 요약

  • 빠른 개발: 장고는 많은 기능(인증, 관리 페이지 등)을 기본 제공하여 빠르게 개발 가능.
  • 보안: SQL 인젝션, XSS, CSRF 등 주요 보안 문제를 기본적으로 해결.
  • 확장성: Django REST Framework(DRF)를 활용한 REST API, WebSocket 등 다양한 기능 통합.
  • 커뮤니티: 풍부한 문서와 오픈소스 커뮤니티의 지원.

profile
₍ ᐢ. ̫ .ᐢ ₎

0개의 댓글