728x90
반응형
  • 3줄 요약
    1. 만들어놓은 것 그대로 제공하는 리소스를 정적 리소스라 하고, 데이터 처리에 따라 값이 다를 수 있는 리소스를 동적 리소스라 한다.
    2. 웹 서버는 정적 리소스 처리를 담당하기 때문에 동적 리소스를 처리하기 위해 웹 어플리케이션을 사용한다.
    3. CGI는 웹 서버와 웹 어플리케이션 서버 간 통신을 위한 공통의 인터페이스이고, 매 요청 때마다 프로세스를 생성해야 한다는 CGI의 단점을 보완한 게 WSGI, 비동기에 취약하다는 WSGI의 단점을 보완한 게 ASGI이다.
  • 정적 리소스 (Static Resource) vs. 동적 리소스 (Dynamic Resource)
    1. 정적 리소스 (Static Resource)
      • 만들어놓은 것 그대로 제공하는 리소스
      • ex) 파일이나 이미지, HTML 페이지 등
    2. 동적 리소스 (Dynamic Resource)
      • 상호작용을 통한 데이터 처리가 필요한 리소스
      • 값이 그때그때 다를 수 있는 리소스
      • 대표적으로 데이터베이스의 처리가 필요한 경우 ‘동적’이라는 말이 붙는다.
      • → 서버가 사용자의 '요청(Request)'에 따라 데이터를 가공처리한 뒤에 생성되어진 웹 페이지를 보여주게 된다.
  • 웹 서버(Web Server) vs 웹 어플리케이션 서버(Web Application Server)
    1. Web Server 웹 서버
      • 정적인 리소스 요청을 처리하는 프로그램으로, 웹 서버의 종류에는 아파치(Apach)와 Nginx 등이 있다.
      • 동적 컨텐츠를 처리하기 위해 데이터 베이스 쿼리문 처리와 같은 동적 요청이 들어오면 웹 어플리케이션에 요청을 넣는다.
    2. Web Application 웹 어플리케이션 → 보통 WAS라고 부른다.
      • 웹 서버로부터 오는 동적인 요청을 처리하는 서버로, 로직을 수행한 뒤 웹 서버에 결과를 돌려준다.
      • 기능
        1. 프로그램 실행 환경과 데이터베이스 접속 기능을 제공
        2. 여러 개의 트랜잭션을 관리
        3. 업무를 처리하는 비즈니스 로직 수행
      • 종류에는 아파치 톰캣, 제우스, 제티(Jetty), 레진(Resin) 등이 있다.
      • 예시 : nginx가 웹 서버가 django가 백엔드에서 돌린 웹애플리케이션 서버에 해당한다
  • 💡 Web Server 는 다소 광범위한 용어라서 Hardware 로서의 의미와 Software 로서의 의미를 함께 가지고 있어 여기에서는 Software 로서의 의미에 집중한다.
  • CGI / WSGi / ASGI 개념 → 참고자료https://kangbk0120.github.io/articles/2022-02/cgi-wcgi-asgi
    1. CGI (Common Gateway Interface)
      • 웹 서버가 동적인 리소스를 처리하기 위해 웹 어플리케이션과 소통할 때 서버 간, 그리고 언어 간 요청을 공통의 형태로(→Common Gateway Interface) 처리하기 위해 만들어진 인터페이스
      • → 즉 한마디로 웹 서버와 웹 어플리케이션이 소통할 수 있는 인터페이스
      • 단점
        • 요청이 들어올 때마다 애플리케이션 프로세스를 다시 생성해 실행해야 한다.
        • C와 같은 컴파일 언어보다 파이썬과 같은 스크립트 언어에서 실행에 더 많은 시간이 필요하기 때문에 더욱 단점이 두드러진다.
      • 동작 원리
        1. Web Server 가 Client 로 부터 HTTP Request 를 받는다.
        2. Web Server 는 Request 에 대한 정보(Method, Url, Parameters, ...)를 환 경숭수오와 tanad rddIIut 을 통해 전달하면서 Script 를 실행한다.
        3. Script 는 비즈니스 로직을 수행하고 Standard Output 으로 결과를 Web Server 에게 전달한다.
        4. Web Server 는 이를 다시 Client 에게 전달한다.
    2. WSGI (Web Server Gateway Interface)
      • 이름과 달리 범용적이라기보다는 파이썬에서 사용되는 개념
      • CGI의 단점을 보완하기 위해 고안되었다.
      • CGI가 환경 변수나 STDIN 등으로 처리했지만 WSGI에서는 웹 서버가 요청에 대한 정보를 어플리케이션에 전달할 때 Callable object(호출 가능한 객체), 즉 함수나 객체로 처리한다.
      • → 서버에서 Callable object를 통해서 요청에 대한 정보와 Callback 함수를 전달하면 애플리케이션은 이 요청을 처리하고 Callback 함수를 실행한다.
      • 하나의 동기적인 callable이 요청을 받아 응답을 리턴하는 방식으로, 비동기 요청 처리에 취약하다.
      • WSGI compatible하다 : 앞서 설명한 인터페이스를 구현하는 서버나 어플리케이션을 설명하는 용어
      • WSGI application : WSGi 어플리케이션 지칭
      • WSGI Middleware : 중간에서 인증이나 쿠키 등을 관리하는 역할을 하며, WSGI application의 일종으로, gunicorn을 포함한다.
    3. WSGI Middleware
      • 인증, 라우팅, 세션, 쿠키, 에러 페이지 보여주기 등 공통적으로 필요한 기능들을 웹 어플리케이션 실행 전후에 추가해주는 역할을 하는 WSGI 어플리케이션의 일종.
      • gunicorn이 WSGI Middleware 기능을 가진 라이브러리 중 하나이다.
      • gunicorn은 WSGI Middleware의 기능 뿐 아니라 그 자체로도 웹 서버의 역할을 할 수도 있다. 그래서 WSGI Server 나 Stand alone WSGI Container 라고 불리기도 한다.
      • Nginx 는 주로 Buffering, Reverse Proxying, Load Balancing 등의 기능을 위해 Gunicorn 앞단에 배치하고, Gunicorn 은 Django 로 작성한 Web Application 에 HTTP 요청을 전달해주는 역할의 WSGI HTTP Server 로서 사용하는 것이다.
      • Gunicorn 을 사용할 땐 worker process 의 개수와 worker class(async 방식인 Gevent, Tornado, ...)를 설정하여 요청 처리 성능을 높일 수 있다.
    4. ASGI
      • 비동기에 취약한 WSGi를 보완하기 위해 고안되었다. ⇒ WSGI + 비동기
      • → WSGI는 하나의 동기적인 callable이 요청을 받아 응답을 리턴하는 방식으로, 길게 유지돼야 하는 연결(ex. long-poll HTTP나 Websocket)에는 적합 X
      • WSGI에 대한 호환성은 유지하면서 비동기적인 요청까지 처리할 수 있는 인터페이스
      • ASGI 서버로는 주로 uvicorn 등을 많이 사용한다.
  • 참고자료
반응형

+ Recent posts