CGI, WSGI, ASGI
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의 일종으로 서버와 클라이언트 간의 효율적인 양방향 통신을 실현하기 위한 구조
결과적으로 웹에서도 채팅, 실시간 주식차트와 같은 실시간이 요구되는 응용프로그램의 개발을 한층 효과적으로 구현할 수 있게 됨