_won_
wonprogrammer
_won_
전체 방문자
오늘
어제
  • 분류 전체보기
    • woncoding
      • TIL
      • WIL
    • source Code
      • Python
      • Programmers
      • BAEKJOON

블로그 메뉴

  • 방명록

티스토리

Github · Wonprogrammer
hELLO · Designed By 정상우.
_won_

wonprogrammer

TIL | 2.15.수 [WSGI / ASGI]
woncoding/TIL

TIL | 2.15.수 [WSGI / ASGI]

2023. 2. 18. 16:23

WSGI와 ASGI

CGI

WSGI와 ASGI에 대해 알아가기 전, CGI에 대해 먼저 알아보자면

CGI란 Common Gateway Interface 이다.

 

우리가 서버와 사용자간의 정보를 주고 받을때 사용자의 요청을 서버는 보여주면 된다. 다만, 동적인 요청이 들어온다면 그 요청에 맞는 결과값을 리턴 해줘야 한다.

(로그인을 예를들어보면 로그인 정보가 맞는 회원에 대한 정보가 각각의 사용자에 맞게 보여줘야 한다.)

 

하지만 이럴때 만약, 서버마다 애플리케이션 언어마다 다른 형태를 가진다면 매우 번거로운 일이기 때문에, 가능한 공통의 표준 인터페이스를 제공해주어야하는데 이 인터페이스를 CGI라고 한다.

 

 

이런 CGI의 큰 단점은, 요청이 들어올 때마다 애플리케이션 프로세스를 다시 실행해야 한다는 점이다.

아래 그림과 같이 만약 대량의 요청이 동시에 들어온다면 그 때마다 새로운 프로세스를 생성하고, 사라졌다가 다시 생성해야 한다. 이렇게 되면 오버헤드가 심해지고, 성능 저하의 원인이 될 수 있다.

 

이를 보완하기 위해 만들어진 인터페이스가 WSGI라고 볼 수 있다.

 


WSGI란?

WSGI는 파이썬에서 사용되는 인터페이스의 한 종류로 Web Server Gateway Interface의 약자입니다.

앞에서 CGI의 가장 큰 단점은 요청이 들어올 때마다 새로운 프로세스를 생성한다는 점인데, 이런 단점을 보완하기 위해 WSGI는 한 프로세스에 모든 요청을 받아들인다.

 

 

즉, WSGI는 많은 요청을 callback으로 받아 처리하게 되는데 대표적으로 두 가지 방법이 존재한다.

  1. nginx, apache에서 내장 모듈로 제공하는 server-often high profile 방식 (ex: modwsgi, mod-python 등)
  2. Python 코드로 작성된 Web App Server (ex: gunicorn, cherrypy 등)

결국 WSGI는 웹 서버와 애플리케이션 사이에 미들웨어 역할을 하며 기술적으로는 웹 서버도 WSGI에 대한 작동 코드가 필요하고, 애플리케이션 또한 WSGI에 대한 작동 코드가 필요한 Client-Server Model을 응용한 것이라고 보면 된다.

간단히 말하자면, 웹 서버가 애플리케이션의 코드를 직접적으로 읽을 수 없으므로 중간의 미들웨어가 해당 코드를 읽어서 결과를 대신 반환해주는 인터페이스라고 보면 된다.

 


ASGI란?

하지만, 위의 WSGI의 경우에 동기 함수 처리만을 지원하여 여러 작업을 동시에 처리하는 것에 한계가 있다.

(예를 들어, 현대 웹 서비스에서는 웹 소켓 등을 사용한 실시간 채팅 서비스 등을 할 수도 있는데, WSGI로는 이러한 서비스를 구현하는 데 어려움이 있다)

 

ASGI는 이를 개선하기 위해 만들어졌습니다. ASGI 공식 설명을 보면 “ASGI는 WSGI의 정신적 계승자입니다. 파이썬 웹 서버, 프레임워크, 어플리케이션 사이에 비동기적인 표준 인터페이스를 제공합니다. WSGI가 파이썬 앱에 대한 동기성에 대한 표준을 제공했다면 ASGI는 동기성과 비동기성 모두에 대한 표준을 제공합니다”라고 되어 있다.

ASGI는 곧 WSGI에 대한 호환성을 가지면서 비동기적인 요청을 처리할 수 있는 인터페이스라고 볼 수 있다.

 

 

 

 


 

추가 개념

동기 / 비동기

  • 동기 : 데이터의 요청과 결과가 한 자리에서 동시에 일어나는것을 말합니다.
  • 비동기 : 요청한 결과는 동시에 일어나지 않는다는 의미입니다.

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'woncoding > TIL' 카테고리의 다른 글

TIL | 2.17.금 [웹 서버와 WAS]  (1) 2023.02.19
TIL | 2.16.목 [Docker]  (0) 2023.02.18
TIL | 2.14.화 [Django ↔️ PostgreSQL]  (0) 2023.02.18
TIL | 2.13.월 [Open API]  (0) 2023.02.14
TIL | 2.10.금 [CI/CD]  (0) 2023.02.13
    'woncoding/TIL' 카테고리의 다른 글
    • TIL | 2.17.금 [웹 서버와 WAS]
    • TIL | 2.16.목 [Docker]
    • TIL | 2.14.화 [Django ↔️ PostgreSQL]
    • TIL | 2.13.월 [Open API]
    _won_
    _won_
    Coding Practice blog

    티스토리툴바