본문 바로가기
공부/TIL•기타

CGI

by svcbn 2025. 12. 10.

12/09

 

집에 들어오자마자 기절했다가 일어났다. 뭐 한것도 별로 없는 것 같은데
오늘은 각종 SDK  공식문서를 읽다가 모르는 것들이 있어서, 배경지식 채우기 시간. 뭐 실제로 박아가면서 고생하는거야 이제부터 더 해야겠지만, 그래도 뭔지나 조금 알고 있으면 조금 도움이 되지 않을까?

 

CGI 란

CGI 는 Common Gateway Interface 로, 웹 서버의 기능을 확장하여 동적인 콘텐츠를 생성하기 위한 표준화된 규약 또는 인터페이스를 뜻한다. 웹 서버와 외부 응용 프로그램 사이에서 데이터를 주고받는 방법을 정의하는 것.

CGI 의 작동 방식은, 사용자의 HTTP 요청이 있을 때마다 웹 서버가 독립적인 새로운 프로세스를 생성하여, 외부 프로그램을 실행하고 그 결과를 반환하는 것이다. 순서를 따라가보자.

1. 클라이언트 요청
웹 브라우저(클라이언트)가 웹 서버에 동적인 페이지를 요청한다. (HTML  폼 제출)

2. 서버에서 CGI 프로그램 실행
웹 서버는 요청 URL 이 특정 CGI 프로그램에 연결되어 있음을 확인하고, 해당 프로그램을 새로운 프로세스로 실행한다.

3. 데이터 전달 (환경 변수 및 표준 입력)
웹 서버는 클라이언트의 요청 정보(폼 데이터, HTTP 헤더, 사용자 정보 등)를 CGI 프로그램에 환경 변수나 표준 입력(STDIN) 을 통해 전달한다.
GET 데이터는 주로 QUERY_STRING 환경 변수에 저장된다.
POST 데이터는 표준 입력을 통해 전달된다.

4. 프로그램 처리
CGI 프로그램은 전달받은 데이터를 바탕으로 필요한 처리(DB 조회, 계산, 파일 처리 등) 를 수행한다.

5. 결과 반환 (표준 출력)
프로그램은 처리 결과를 HTML 문서 형식으로 표준 출력 (STDOUT) 한다.

6. 서버, 클라이언트에게 응답
웹 서버는 CGI 프로그램의 표준 출력을 받아서 HTTP 응답으로 구성한 뒤, 이를 다시 클라이언트에게 보낸다.

7. 프로세스 종료
응답이 완료되면 실행되었던 CGI 프로세스는 종료.

 

정리하자면, 일반적인 HTTP 통신과 비슷한 흐름을 가지나, 클라이언트-서버 통신 과정에서 CGI 인터페이스를 사용하는 것. 즉 웹서버의 요청을 받아 처리해줄 로직을 담고 있는 프로그램 사이의 인터페이스이다. 웹 서버를 인터페이스를 통해 작동할 수 있기 때문에 어떤 언어든 CGI 스펙을 따른다면 통신이 가능하다.


장점

언어 독립성
CGI 는 단순히 표준 입출력과 환경 변수를 사용하는 인터페이스이므로, OS에서 실행 가능한 거의 모든 프로그래밍 언어로 서버 측 프로그램을 작성할 수 있다.

구현 / 설정 단순함
웹 서버 설정에서 특정 디렉터리를 CGI 실행 영역으로 지정하는 것만으로 쉽게 구현할 수 있다. 복잡한 모듈 설치나 프레임워크 설정이 필요하지 않다.

안정성
각 요청이 독립적인 프로세스로 처리되므로, 하나의 CGI 프로그램에 오류가 발생해도 웹 서버 자체의 동작이나 다른 요청 처리에 영향을 주지 않는다.

이식성
한 운영체제에서 개발된 CGI 스크립트는 다른 운영체제의 호환 가능한 웹 서버에서도 쉽게 실행할 수 있다.

 

단점

심각한 오버헤드
가장 큰 단점. 사용자 요청이 들어올 때마다 새로운 프로세스를 생성하므로, 프로세스 생성 및 종료 과정에서 많은 CPU, 메모리를 소모하며, 동시 접속자가 많아지면 서버 응답 속도가 현저히 느려진다.

비효율적 자원 관리
요청이 처리될 때마다 초기화 과정(라이브러리 로드, 환경 설정 등) 이 반복된다. DB 연결 같은 자원을 매번 새로 생성하므로 비효율적.

복잡한 상태 관리
각 요청이 독립적인 프로세스로 실행되고 바로 종료되기 때문에, 프로세스 간에 데이터를 공유하거나 사용자 세션 상태를 유지하기가 복잡하다.


 

그래서 다른 것 보다도 성능 문제로 인해, PHP, ASP, Java Servlet, Python / Ruby 프레임워크 처럼 메모리에 상주하며 효율적으로 요청을 처리하는 현대적인 웹 기술로 많이 대체되었다고 한다. 하지만, 결제 처리처럼 엄청 많은 요청이 동시에 들어오지는 않는 듯한 통신이라, MIDAS 결제 SDK 쪽에서는 장점들을 위해 사용되고 있는듯?

'공부 > TIL•기타' 카테고리의 다른 글

개발 반성회 (async / mvc)  (6) 2025.12.30
정적 / 동적 라이브러리  (0) 2025.12.18
ORM Document / Docset  (0) 2025.12.01
Breakpoint  (0) 2025.11.25
JSON  (0) 2025.11.24