WSGI (web server gateway interface)에 대하여 :
장고의 내장서버
장고의 내장 서버는 이번 장에서 설명할 웹 서버와 WSGI 서버의 기능을 모두 포함하고 있다. 다만 내장 서버는 기능이 단순하고 '대량 요청'이나 '동시 요청'을 효율적으로 처리하지 못하므로 운영 환경에는 적합하지 않다. 이 방식은 python mange.py runserver 명령어를 통해 실행했다.
먼저 정적 페이지, 동적페이지에 대해서 알아보자.
정적(static) 페이지
웹 브라우저로 다음 URL을 요청해 보자. (여러분의 고정IP를 사용하자.)
http://3.37.58.70:8000/static/bootstrap.min.css
그러면 웹 브라우저 화면에 다음과 같은 내용이 그대로 출력될 것이다.
@charset "UTF-8";/*! * Bootstrap v5.1.3 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) (... 생략 ...)확장자명이 js인 자바스크립트나 jpg, png와 같은 이미지 파일도 마찬가지이다. 이런 파일들을 정적 파일(static file)이라고 한다.
파이보 서버는 위와 같은 웹 브로우저의 요청을 받으면 서버의 /static/bootstrap.min.css 파일을 읽어서 리턴한다. bootstrap.min.css는 파일이므로 항상 변하지 않는 동일한 값을 리턴할 것이다. 확장자명이 js인 자바스크립트나 jpg,png와 같은 이미지 파일도 마찬가지이다. 이런 파일들을 정적 파일(statci file)이라고 한다.
동적(dynamic) 페이지
이번에는 웹 브라우저가 파이보 메인페이지(http://3.37.58.70:8000/)를 요청하는 경우를 생각해 보자. 파이보 서버는 이런 요청이 들어오면 질문 목록을 조회하여 리턴한다. 이때 응답 데이터인 질문 목록은 데이터베이스의 내용에 따라 수시로 변한다.
이렇게 응답이 수시로 변하는 요청을 동적 페이지 요청이라고 한다.
WSGI 서버는 웹서버가 동적 페이지 요청을 처리하기 위해 호출하는 서버이다. WSGI 서버에는 여러 종류가 있지만 Gunicorn과 uwsgi를 가장 많이 사용한다. 파이보는 Gunicorn을 사용할 것이다.
웹서버에 동적 페이지 요청이 발생하면 웹 서버는 WSGI 서버를 호출하고 WSGI 서버는 다시 WSGI 애플리케이션을 호출한다. 여기서 알수 있는 중요한 사실은 실제 동적 페이지 요청은 결국 WSGI 애플리케이션이 처리한다는 점이다. WSGI 애플리케이션에는 장고(Django), 플라스크(Flask) 등이 있다. 파이보 시스템이 사용할 WSGI 애플리케이션은 우리가 지금껏 공부해온 장고이다.
WSGI 서버는 웹 서버와 WSGI 애플리케이션 중간에 위치한다. 그래서 WSGI 서버는 WSGI 미들웨어(middleware) 또는 WSGI 컨테이너(container)라고도 한다.
웹 서버에 동적 페이지 요청이 들어오면 웹 서버는 파이썬 프로그램을 호출해야 한다. 예를 들어 질문 목록 페이지 요청이 들어오면 질문 목록을 조회하여 리턴하는 파이썬 프로그램을 호출해야 한다.
하지만 대부분의 웹 서버는 파이썬 프로그램을 호출할 수 있는 기능이 없다. 어떻게 파이썬 프로그램을 호출해야 하는지 모르기 때문이다.
이러한 이유로 파이썬 프로그램을 호출하는 WSGI(web server gateway interface) 서버가 반드시 필요하다. 웹 서버에 동적 요청이 발생하면 웹 서버가 WSGI 서버를 호출하고, WSGI 서버는 파이썬 프로그램을 호출하여 동적 페이지 요청을 대신 처리하는 것이다.
파이썬 프로그램을 Gunicorn(WSGI)가 Django로부터 호출
출처 :https://wikidocs.net/75556
'Django' 카테고리의 다른 글
Django 가장 중요한 부분 (onChange 함수) (0) | 2023.08.21 |
---|---|
react 1일차 (0) | 2023.08.17 |
Swagger 설치법 (0) | 2023.08.14 |
장고 복습 (0) | 2023.08.14 |
Django 교육 3일차 (0) | 2023.08.09 |