[Team_ForV] Python Web Framework
카테고리: Team_ForV
태그: python
아키텍처를 보며..
python
으로 웹 application을 만들 때
-> 기본적으로 socket을 제공하니까 개 노가다 하면 만들 수야 있겠지만 의미도 없고..
-> 따라서, python
을 이용하여 WSGI
라는 인터페이스를 만들어 사용하고 있다.
WSGI가 뭔데?
WSGI
는 ‘Web Server GateWay Interface’의 약자로 web server로 들어오는 request를 python으로 쓰여진 web application으로 forwarding 해주는 interface를 말한다.
예시) gunicorn
, uwsgi
등등이 있음
- Q) 근데, flask, django 사용했을 때 gunicorn 같은 거 없이도 web server 잘 돌아가던데?
- 사실은 프레임워크 안에 자체적으로 WSGI가 내장되어 있어서 잘 돌아갔던 것..
web application을 만들기 위해선 flask
나 django
가 제공해주는 template
나 view
를 가지고 python
으로 웹 서버를 만드는 것인데..(결국 flask
나 django
는 프레임워크에 불과하다는 소리!)
-> 실제로 deploy까지 하게 되면 WSGI
라는 인터페이스가 있고, 그런 인터페이스의 제공을 위해 gunicorn
등을 이용하는 것이다.
-> 다만, python web server는 보안 및 퍼포먼스의 문제가 있어 전문적 web server를 proxy server
로 두는데..
Proxy Server는 무엇이냐
Proxy
: 서버와 클라이언트 사이에서 대리로 통신을 수행해주는 것
즉, Client가 자신을 거쳐 다른 네트워크에 접속할 수 있도록 중간에서 대리해주는 서버를 말한다.
사용자가 많거나, performance, security를 고려하여 전문적 server를 두는 것이다.
아키텍처를 보며 다시 정리해보자!
- 웹 브라우저의 동작방식
사용자가 서비스를 이용하려면 웹 브라우저에 URL을 입력하는데, 이 때 웹 브라우저가 URL을 사용해서 서버에 요청하는 페이지는 크게 2가지 종류가 있다.- 정적 페이지 요청
예를 들어http://3.37.58.70:5000/static/hello.css
라는 URL 접속 요청이 들어오면, 서비스는static/hello.css
라는 파일을 찾아서 웹 브라우저로 보내주는 것이다. .js, .jpg, .png 등등의 파일은 변하지 않는 성질 때문에 ‘정적 파일’이라고 하며, 웹 브라우저에서 이런 정적 파일을 요청하는 행위를 ‘정적 페이지 요청’이라 한다. - 동적 페이지 요청
서버의 데이터베이스에 어떤 내용이 있는지에 따라 수시로 변하는 파일들이 있다. 웹 브라우저의 이러한 요청을 ‘동적 페이지 요청’이라고 한다. 이러한 동적 요청은 정적 요청과는 달리 조금 복잡한 과정을 거쳐 응답한다.
- 정적 페이지 요청
-
동적 페이지 요청의 처리를 위해 웹 서버와 WSGI 서버가 필요하다!
웹 서버에 동적 페이지 요청이 들어오면 파이썬 프로그램을 호출해야 한다
-> 대부분의 웹 서버는 어떻게 파이썬 프로그램을 호출해야 하는지 모르기 때문에 파이썬 프로그램을 호출하지 못한다.
-> 이런 경우에 파이썬 프로그램을 호출하는 WSGI 서버가 필요한 것이다.즉, 동적 페이지 요청의 과정은
웹 서버가 WSGI 서버 호출 -> WSGI 서버가 파이썬 프로그램을 호출 -
WSGI 서버의 동작 원리를 구체적으로 보자
웹 서버
로 들어온 동적 페이지 요청 ->WSGI 서버
를 호출 ->WSGI 어플리케이션
호출 -> 동적 요청 처리즉, 동적 페이지 요청은 결국
WSGI 애플리케이션
이 처리하는 것이고, 이런WSGI 애플리케이션
에는django
,flask
,fast api
등이 있는 것이다!++
WSGI 서버
는웹 서버
와WSGI 애플리케이션
중간에 위치해서WSGI 미들웨어
,WSGI 컨테이너
라고도 한다.
다음 글 소개
python을 이용한 백엔드 framework의 work flow에 대해 살펴보았다.
다음에는 본격적으로 이 프로젝트에 쓰인 두 가지 서버에 대하여 정리해보는 시간을 갖도록 하자.
먼저 django
로 쓰인 api server에 대해 살펴보자.
Reference
1) https://liveyourit.tistory.com/251 [프록시 서버란?]
2) https://wikidocs.net/81076 [점프 투 플라스크]
3) https://www.youtube.com/watch?v=5rjhJRyu8s8&t=0s [django, flask 배포 스택 구성]
댓글 남기기