CGI, ASGI, WSGI

CGI(Common Gateway Interface)

CGI란

CGI는 공용 게이트웨이 인터페이스로 웹 서버와 외부 프로그램 간의 통신을 위한 표준 인터페이스이다.
CGI를 사용해 웹 서버가 클라이언트로부터 요청을 받고, 이러한 요청을 외부 프로그램으로 전달하여 프로그램이 요청을 처리하고 결과를 다시 웹 서버로 전달할 수 있다.
지금 말하는 외부 프로그램은 웹 서버에서 실행되는 프로그램이 될 수 있다. 예를 들어 python과 같은 스크립팅 언어로 작성된 CGI 스크립트가 웹 서버에서 실행되면, 이 스크립트는 웹 서버에서 동작하는 외부 프로그램이 된다. 즉 이 스크립트가 웹 서버와 통신하여 브라우저의 요청을 처리하고 그 결과를 브라우저에게 반환하는 것이다.
그래서 이 CGI를 사용하면 웹 서버와 외부프로그램 간의 데이터를 주고받을 수 있는 표준화된 인터페이스를 제공하고 이렇게 제공된 인터페이스에 의해 다양한 언어와 환경에서 동작하는 웹 애플리케이션을 개발할 수 있게 되었다.

등장 배경

웹이 처음 등장했을 때는 정적 페이지를 하이퍼링크로 연결하면 충분했다. 하지만 점차 동적 페이지에 대한 필요성이 커졌다. 이러한 동적 페이지는 페이지에 필요한 데이터를 저장하고, 꺼내는 등의 서버와의 통신이 늘어났고, 이러한 별도의 웹 서버 사이의 정보를 주고받는 규칙으로 정의된 것이 CGI 규격이다.


cf) 정적페이지, 동적 페이지

  • 정적 페이지
  • 간단하게는 저장된 그대로를 보여주는 웹페이로 정의내릴 수 있다.
    동적 페이지와의 차이를 비교해서 정적 페이지를 설명하면, 누구든 언제든 항상 같은 모습을 보여주는 페이지라고 할 수 있다. 예를 들어 논문을 보여주는 페이지를 열면, 언제든 누가 열든 같은 내용의 논문이 보일 것이다. 이런 페이지를 정적 페이지라고 할 수 있다.
  • 동적 페이지
  • 동적페이지는 동일한 접근을 하더라도 언제, 누구인지에 따라서 다른 내용을 표시되는 페이지를 말한다.
    예를 들어 로그인을 유저가 접속한 지역 정보에 따라 다른 날씨를 보여주거나, 로그인한 유저 정보에 따라 수강하는 강의 리스트를 보여주는 페이지 등이 정적 페이지라고 불린다.

CGI 작동 방식

  1. 클라이언트가 웹 서버에 요청을 보낸다.
  2. 웹 서버는 해당 요청을 처리하기 위해 CGI 스크립트를 실행한다.
  3. CGI 스크립트는 요청을 처리한 후 결과를 다시 웹 서버에 전송한다.
  4. 웹 서버는 이를 클라이언트에게 전달한다.

WSGI(Web Server Gateway Interface)

WSGI는 CGI 인터페이스를 기반으로 만들어진 Python 특화 웹 애플리케이션 인터페이스이다.
즉, 웹 서버와 Python 애플리케이션 간의 통신을 담당하는 인터페이스인 것이다. Python에 특화된 인터페이스이기 때문에 Python 애플리케이션과 다양한 웹 서버 간의 호환성을 제공한다.

WSGI 작동 방식

  1. 클라이언트가 웹 서버에 요청을 보낸다.
  2. 웹 서버가 클라이언트 요청을 받으면 WSGI 인터페이스를 구현한 Python 애플리케이션의 함수를 호출하여 요청을 처리한다.
  3. 이때 함수는 요청 객체(request)와 응답 객체(response)를 인자로 받고, 응답 객체를 반환한다.

이러한 작동 방식은 Python 애플리케이션이 웹 서버와 직접적으로 상호작용할 수 있도록 지원한다.
그러기에 요청을 할때마다 외부 프로그램을 호출해야 하는 CGI 보다 훨씬 빠른 성능을 제공한다.

또한, 이러한 방식에 의해 Python 애플리케이션은 웹 서버와 독립적으로 개발된다.
그러기에 다양한 웹 서버에서 동작할 수 있고 이는 Python 애플리케이션의 호환성과 이식성 향상할 수 있었다.

추가적으로 Python 웹 프레임워크(Django, Flask, Pyramid 등)에서 WSGI 인터페이스를 지원한다.

ASGI(Asynchronous Server Gateway Interface)

ASGI는 WSGI와 비슷한 목적을 가지고 있지만, 비동기 요청-응답 처리를 지원하는 인터페이스이다. ASGI는 비동기 웹 애플리케이션의 개발을 가능하게 하기에 WebSocket과 같은 실시간 통신 기술도 지원한다.

기존의 WSGI는 동기적인 방식으로 동작하기 때문에, 대용량 데이터를 처리하거나 간단한 웹 애플리케이션을 구축하기에는 좋으나 실시간 채팅 애플리케이션이나 비디오 스트리밍 서비스와 같이 높은 동시성을 요구하는 애플리케이션의 경우네는 비동기 코드를 처리하도록 설계되어 있는 ASGI가 더 적합하다.

'CS > Web' 카테고리의 다른 글

HTML과 HTML5의 차이점  (0) 2023.02.07
쿠키와 세션  (0) 2023.01.19
Get 방식과 Post방식  (0) 2022.05.02