WIPIVERSE

SCGI

SCGI(Simple Common Gateway Interface)는 웹 서버와 외부 애플리케이션 간의 통신을 위한 프로토콜이다. CGI(Common Gateway Interface)의 대안으로 설계되었으며, FastCGI와 유사한 목적을 가지나 더 단순한 구조를 지향한다.

개요 SCGI는 2001년 닐 셰메나워(Neil Schemenauer)에 의해 제안되었다. 기존 CGI가 요청마다 프로세스를 생성하는 비효율성을 해결하고, FastCGI의 복잡한 바이너리 프로토콜 구현 부담을 줄이기 위해 고안되었다. HTTP 요청 헤더와 본문을 단순화된 형식으로 백엔드 애플리케이션에 전달한다.

프로토콜 구조 SCGI 프로토콜은 요청(Request)과 응답(Response)으로 구성된다.

  • 요청 형식: 넷스트링(netstring) 인코딩 방식을 사용하여 헤더 정보를 전송한다. 헤더는 키-값 쌍의 리스트로 구성되며, CONTENT_LENGTH, SCGI(버전, 보통 1), REQUEST_METHOD, REQUEST_URI 등 CGI 환경 변수와 유사한 정보를 포함한다. 헤더 이후에는 HTTP 요청 본문이 그대로 이어진다.
  • 응답 형식: 별도의 프로토콜 래퍼 없이 표준 HTTP 응답(상태 줄, 헤더, 본문)을 그대로 반환한다. 웹 서버는 백엔드로부터 받은 응답을 클라이언트에게 전달한다.

특징 및 장단점

  • 단순성: 프로토콜 사양이 매우 짧고 단순하여 구현이 용이하다. 상태 유지(persistent connection) 기능을 기본으로 지원한다.
  • 성능: CGI처럼 프로세스를 매번 생성하지 않고 데몬 프로세스가 지속적으로 요청을 처리하므로 오버헤드가 적다.
  • 확산도: FastCGI나 HTTP 리버스 프록시 방식(예: uWSGI, Gunicorn 등)에 비해 표준 라이브러리 지원이나 웹 서버 모듈(mod_scgi 등)의 생태계가 상대적으로 제한적이다.

주요 구현체 및 사용처 파이썬의 flup 라이브러리, 라이트트pd(lighttpd), nginx(ngx_http_scgi_module), 아파치(mod_scgi) 등에서 지원된다. 초기 구글 앱 엔진(Google App Engine)의 파이썬 런타임 환경 등에서 내부적으로 사용된 바 있다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기