[Team_ForV] Python Web Framework

Update:     Updated:

카테고리:

태그:

아키텍처를 보며..

image

python으로 웹 application을 만들 때
-> 기본적으로 socket을 제공하니까 개 노가다 하면 만들 수야 있겠지만 의미도 없고..
-> 따라서, python을 이용하여 WSGI 라는 인터페이스를 만들어 사용하고 있다.

WSGI가 뭔데?

image image

WSGI는 ‘Web Server GateWay Interface’의 약자로 web server로 들어오는 request를 python으로 쓰여진 web application으로 forwarding 해주는 interface를 말한다.
예시) gunicorn, uwsgi 등등이 있음

Q) 근데, flask, django 사용했을 때 gunicorn 같은 거 없이도 web server 잘 돌아가던데?
사실은 프레임워크 안에 자체적으로 WSGI가 내장되어 있어서 잘 돌아갔던 것..

web application을 만들기 위해선 flaskdjango가 제공해주는 templateview를 가지고 python으로 웹 서버를 만드는 것인데..(결국 flaskdjango는 프레임워크에 불과하다는 소리!)
-> 실제로 deploy까지 하게 되면 WSGI라는 인터페이스가 있고, 그런 인터페이스의 제공을 위해 gunicorn 등을 이용하는 것이다.
-> 다만, python web server는 보안 및 퍼포먼스의 문제가 있어 전문적 web server를 proxy server로 두는데..

Proxy Server는 무엇이냐

image image

Proxy: 서버와 클라이언트 사이에서 대리로 통신을 수행해주는 것
즉, Client가 자신을 거쳐 다른 네트워크에 접속할 수 있도록 중간에서 대리해주는 서버를 말한다.
사용자가 많거나, performance, security를 고려하여 전문적 server를 두는 것이다.

아키텍처를 보며 다시 정리해보자!

image

  1. 웹 브라우저의 동작방식
    사용자가 서비스를 이용하려면 웹 브라우저에 URL을 입력하는데, 이 때 웹 브라우저가 URL을 사용해서 서버에 요청하는 페이지는 크게 2가지 종류가 있다.
    • 정적 페이지 요청
      예를 들어 http://3.37.58.70:5000/static/hello.css라는 URL 접속 요청이 들어오면, 서비스는 static/hello.css라는 파일을 찾아서 웹 브라우저로 보내주는 것이다. .js, .jpg, .png 등등의 파일은 변하지 않는 성질 때문에 ‘정적 파일’이라고 하며, 웹 브라우저에서 이런 정적 파일을 요청하는 행위를 ‘정적 페이지 요청’이라 한다.
    • 동적 페이지 요청
      서버의 데이터베이스에 어떤 내용이 있는지에 따라 수시로 변하는 파일들이 있다. 웹 브라우저의 이러한 요청을 ‘동적 페이지 요청’이라고 한다. 이러한 동적 요청은 정적 요청과는 달리 조금 복잡한 과정을 거쳐 응답한다.
  2. 동적 페이지 요청의 처리를 위해 웹 서버와 WSGI 서버가 필요하다!
    웹 서버에 동적 페이지 요청이 들어오면 파이썬 프로그램을 호출해야 한다
    -> 대부분의 웹 서버는 어떻게 파이썬 프로그램을 호출해야 하는지 모르기 때문에 파이썬 프로그램을 호출하지 못한다.
    -> 이런 경우에 파이썬 프로그램을 호출하는 WSGI 서버가 필요한 것이다.

    즉, 동적 페이지 요청의 과정은
    웹 서버가 WSGI 서버 호출 -> WSGI 서버가 파이썬 프로그램을 호출

  3. WSGI 서버의 동작 원리를 구체적으로 보자
    웹 서버로 들어온 동적 페이지 요청 -> WSGI 서버를 호출 -> WSGI 어플리케이션 호출 -> 동적 요청 처리

    즉, 동적 페이지 요청은 결국 WSGI 애플리케이션이 처리하는 것이고, 이런 WSGI 애플리케이션에는 django, flask, fast api 등이 있는 것이다!

    image

    ++ 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 배포 스택 구성]

Team_ForV 카테고리 내 다른 글 보러가기

댓글 남기기