Data Engineering

CGI, WSGI, ASGI

incastle 2022. 2. 5. 22:17

django, flask등의 python 기반의 웹 프레임워크는 어떻게 서버와 통신을 하는가?

서버와 통신을 할 때 사용되는 인터페이스로서 CGI, WSGI, ASGI 등이 사용된다. 

 

CGI(Common gateway Interface)

웹서버와 외부 프로그램을 연결해주는 표준화된 프로토콜 

클라이언트의 요청이 있을 때마다 프로세스를 추가 생성 삭제 작업을 반복해서 비효율적이다. (오버헤드 심함 + 메모리)

 

WSGI(Web Server Gateway Interface)

WSGI는 모든 요청을 한 프로세스에서 처리를 한다.

많은 요청을 콜백으로 받아 처리를 함, CGI는 매 요청마다 Fork 등의 함수를 통해 커널 리소스를 추가/반납함

 

ASGI(Asynchronous Server Gateway Interface)

WSGI로도 충분히 클라이언트의 요청을 웹 서버가 받아 내 애플리케이션으로 가져올 수 있도록 만들 수 있음

but 대용량 트래픽 처리를 유연하기 하기 위해서는 여전히 부족함 

특히 웹 소켓 등을 사용한 실시간 채팅 서비스 등은 WSGI로 부족함

크게 다르지 않지만 ASGI는 기본적으로 요청을 비동기로 처리한다는 점이 차이가 크다

 

웹 소켓(WebSocket)

위 배경에서 웹소켓이 나오기 이전에는 모두 클라이언트의 요청이 없다면, 서버로부터 응답을 받을 수 없는 구조였다

웹소켓을 이용하면 하나의 HTTP 접속으로 양방향 메시지를 자유롭게 주고받을 수 있다

Transport protocol의 일종으로 서버와 클라이언트 간의 효율적인 양방향 통신을 실현하기 위한 구조

결과적으로 웹에서도 채팅, 실시간 주식차트와 같은 실시간이 요구되는 응용프로그램의 개발을 한층 효과적으로 구현할 수 있게 됨