Django: WSGI

GreenBeanΒ·2022λ…„ 1μ›” 14일
0
post-thumbnail

WSGI

점프 투 μž₯κ³ : 4-08 WSGI

  • μž₯κ³  μ„œλ²„λ₯Ό κ΅¬λ™ν•˜κΈ° μœ„ν•΄ μ§€κΈˆκΉŒμ§€λŠ” python manager.py runserver 처럼 μž₯고의 λ‚΄μž₯ μ„œλ²„λ₯Ό κ΅¬λ™ν•˜λŠ” 방식을 μ‚¬μš©
  • μž₯고의 λ‚΄μž₯ μ„œλ²„λŠ” 이번 μž₯μ—μ„œ μ„€λͺ…ν•  μ›Ή μ„œλ²„μ™€ WSGI μ„œλ²„μ˜ κΈ°λŠ₯을 λͺ¨λ‘ ν¬ν•¨ν•˜κ³  있음
    • λ‹€λ§Œ λ‚΄μž₯ μ„œλ²„λŠ” κΈ°λŠ₯이 λ‹¨μˆœν•˜κ³  'λŒ€λŸ‰ μš”μ²­'μ΄λ‚˜ 'λ™μ‹œ μš”μ²­'을 효율적으둜 μ²˜λ¦¬ν•˜μ§€ λͺ»ν•˜λ―€λ‘œ 운영 ν™˜κ²½μ—λŠ” μ ν•©ν•˜μ§€ μ•ŠμŒ

μ›Ή λΈŒλΌμš°μ €

  • μ›Ή λΈŒλΌμš°μ €κ°€ μ›Ή μ„œλ²„μ— μš”μ²­ν•˜λŠ” νŽ˜μ΄μ§€λŠ” 크게 두 κ°€μ§€λ‘œ λΆ„λ₯˜
    • 정적 νŽ˜μ΄μ§€
    • 동적 νŽ˜μ΄μ§€

정적(static) νŽ˜μ΄μ§€

# μ›Ή λΈŒλΌμš°μ €λ‘œ λ‹€μŒ URL μš”μ²­
http://3.35.153.92:8000/static/style.css

# 그러면 μ›Ή λΈŒλΌμš°μ € 화면에 λ‹€μŒκ³Ό 같은 λ‚΄μš© 좜λ ₯
.comment {
    border-top:dotted 1px #ddd;
    font-size:0.7em;
}
  • μ„œλ²„λŠ” μœ„μ™€ 같은 μ›Ή λΈŒλΌμš°μ €μ˜ μš”μ²­μ„ λ°›μœΌλ©΄ μ„œλ²„μ˜ /static/style.css νŒŒμΌμ„ μ½μ–΄μ„œ 리턴
  • style.cssλŠ” νŒŒμΌμ΄λ―€λ‘œ 항상 λ³€ν•˜μ§€ μ•ŠλŠ” λ™μΌν•œ 값을 리턴할 것
    • ν™•μž₯자λͺ…이 js인 μžλ°”μŠ€ν¬λ¦½νŠΈλ‚˜ jpg, png와 같은 이미지 νŒŒμΌλ„ λ§ˆμ°¬κ°€μ§€
    • 이런 νŒŒμΌλ“€μ„ 정적 파일(static file)이라고 함
  • μ΄λ ‡κ²Œ μ›Ή λΈŒλΌμš°μ €μ—μ„œ css, js, jpg, png와 같은 정적 νŒŒμΌμ„ μš”μ²­ν•˜λŠ” 것을 정적 νŽ˜μ΄μ§€ μš”μ²­μ΄λΌκ³  함

동적(dynamic) νŽ˜μ΄μ§€

  • μ›Ή λΈŒλΌμš°μ €κ°€ κ²Œμ‹œνŒ 메인 νŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•˜λŠ” 경우λ₯Ό 생각해봀을 λ•Œ, μ„œλ²„λŠ” 이런 μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ 질문 λͺ©λ‘μ„ μ‘°νšŒν•˜μ—¬ 리턴
    • μ΄λ•Œ 응닡 데이터인 질문 λͺ©λ‘μ€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ λ‚΄μš©μ— 따라 μˆ˜μ‹œλ‘œ 변함
  • μ΄λ ‡κ²Œ 응닡이 μˆ˜μ‹œλ‘œ λ³€ν•˜λŠ” μš”μ²­μ„ 동적 νŽ˜μ΄μ§€ μš”μ²­μ΄λΌκ³  함

μ›Ή μ„œλ²„(Web Server)

  • μ›Ή μ„œλ²„λŠ” μ›Ή λΈŒλΌμš°μ €μ˜ 정적 μš”μ²­κ³Ό 동적 μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” μ„œλ²„
    • λŒ€ν‘œμ μΈ μ›Ή μ„œλ²„μ—λŠ” μ•„νŒŒμΉ˜(Apache), μ—”μ§„μ—‘μŠ€(Nginx) 등이 있음
    • μ—¬κΈ°μ„œλŠ” μž₯고와 κ°€μž₯ 잘 μ–΄μšΈλ¦¬λŠ” μ—”μ§„μ—‘μŠ€(Nginx)λ₯Ό μ›Ή μ„œλ²„λ‘œ μ‚¬μš©ν•  것
  • μ›Ή μ„œλ²„μ— 정적 νŽ˜μ΄μ§€ μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ 정적 νŒŒμΌμ„ 읽어 μ‘λ‹΅ν•˜λ©΄ λ˜λ―€λ‘œ κ°„λ‹¨ν•˜μ§€λ§Œ 동적 νŽ˜μ΄μ§€ μš”μ²­μ€ 쑰금 볡작
  • μ›Ή μ„œλ²„μ— 동적 νŽ˜μ΄μ§€ μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ μ›Ή μ„œλ²„λŠ” 파이썬 ν”„λ‘œκ·Έλž¨μ„ ν˜ΈμΆœν•΄μ•Ό 함
    • 예λ₯Ό λ“€μ–΄ 질문 λͺ©λ‘ νŽ˜μ΄μ§€ μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ 질문 λͺ©λ‘μ„ μ‘°νšŒν•˜μ—¬ λ¦¬ν„΄ν•˜λŠ” 파이썬 ν”„λ‘œκ·Έλž¨μ„ ν˜ΈμΆœν•΄μ•Ό ν•˜μ§€λ§Œ λŒ€λΆ€λΆ„μ˜ μ›Ή μ„œλ²„λŠ” 파이썬 ν”„λ‘œκ·Έλž¨μ„ ν˜ΈμΆœν•  수 μžˆλŠ” κΈ°λŠ₯이 μ—†μŒ
      • μ–΄λ–»κ²Œ 파이썬 ν”„λ‘œκ·Έλž¨μ„ ν˜ΈμΆœν•΄μ•Ό ν•˜λŠ”μ§€ λͺ¨λ₯΄κΈ° λ•Œλ¬Έ
  • μ΄λŸ¬ν•œ 이유둜 파이썬 ν”„λ‘œκ·Έλž¨μ„ ν˜ΈμΆœν•˜λŠ” WSGI(web server gateway interface) μ„œλ²„κ°€ λ°˜λ“œμ‹œ ν•„μš”
    • μ›Ή μ„œλ²„μ— 동적 μš”μ²­μ΄ λ°œμƒν•˜λ©΄ μ›Ή μ„œλ²„κ°€ WSGI μ„œλ²„λ₯Ό ν˜ΈμΆœν•˜κ³ , WSGI μ„œλ²„λŠ” 파이썬 ν”„λ‘œκ·Έλž¨μ„ ν˜ΈμΆœν•˜μ—¬ 동적 νŽ˜μ΄μ§€ μš”μ²­μ„ λŒ€μ‹  μ²˜λ¦¬ν•˜λŠ” 것

Tip! WSGIλŠ” 'μœ„μŠ€ν‚€', 'μœ„μŠ€κΈ°' ν˜Ήμ€ WSGI 철자λ₯Ό κ·ΈλŒ€λ‘œ 발음

WSGI μ„œλ²„

  • WSGI μ„œλ²„λŠ” μ›Ήμ„œλ²„κ°€ 동적 νŽ˜μ΄μ§€ μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ ν˜ΈμΆœν•˜λŠ” μ„œλ²„
    • WSGI μ„œλ²„μ—λŠ” μ—¬λŸ¬ μ’…λ₯˜κ°€ μžˆμ§€λ§Œ uwsgi와 Gunicorn을 κ°€μž₯ 많이 μ‚¬μš©ν•˜λ©° μ—¬κΈ°μ„œλŠ” Gunicorn을 μ‚¬μš©ν•  것
  • μ›Ήμ„œλ²„μ— 동적 νŽ˜μ΄μ§€ μš”μ²­μ΄ λ°œμƒν•˜λ©΄ μ›Ή μ„œλ²„λŠ” WSGI μ„œλ²„λ₯Ό ν˜ΈμΆœν•˜κ³  WSGI μ„œλ²„λŠ” λ‹€μ‹œ WSGI μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 호좜
    • μ—¬κΈ°μ„œ μ•Œμˆ˜ μžˆλŠ” μ€‘μš”ν•œ 사싀은 μ‹€μ œ 동적 νŽ˜μ΄μ§€ μš”μ²­μ€ κ²°κ΅­ WSGI μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ²˜λ¦¬ν•œλ‹€λŠ” 점
    • WSGI μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—λŠ” μž₯κ³ (Django), ν”ŒλΌμŠ€ν¬(Flask), 토넀이도(Tornado) 등이 있음
  • WSGI μ„œλ²„λŠ” μ›Ή μ„œλ²„μ™€ WSGI μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 쀑간에 μœ„μΉ˜
    • κ·Έλž˜μ„œ WSGI μ„œλ²„λŠ” WSGI 미듀웨어(middleware) λ˜λŠ” WSGI μ»¨ν…Œμ΄λ„ˆ(container)라고도 함

WSGI μ• ν”Œλ¦¬μΌ€μ΄μ…˜

  • WSGI μ„œλ²„λŠ” 항상 λ‹€μŒ νŒŒμΌμ„ κ²½μœ ν•˜μ—¬ μž₯κ³ (django) ν”„λ‘œκ·Έλž¨μ„ 호좜
# [파일λͺ…: C:\projects\mysite\config\wsgi.py]

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')

application = get_wsgi_application()
  • 이 νŒŒμΌμ— μ„ μ–Έλœ application이 λ°”λ‘œ μž₯고의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜
    • 이 νŒŒμΌμ€ μž₯κ³  ν”„λ‘œμ νŠΈ μƒμ„±μ‹œ μžλ™μœΌλ‘œ λ§Œλ“€μ–΄μ§€λ©° νŠΉλ³„ν•œ κ²½μš°κ°€ μ•„λ‹ˆκ³ λŠ” μˆ˜μ •ν•  ν•„μš”κ°€ μ—†μŒ

WSGI μˆœμ„œλ„

  • μ›Ή λΈŒλΌμš°μ €μ˜ 정적 νŽ˜μ΄μ§€ μš”μ²­μ€ [μ›Ή μ„œλ²„]κ°€ μ²˜λ¦¬ν•˜κ³ , 동적 νŽ˜μ΄μ§€ μš”μ²­μ€ [WSGI μ„œλ²„ β†’ WSGI μ• ν”Œλ¦¬μΌ€μ΄μ…˜]으둜 처리
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 λŒ“κΈ€