CGI(Common Gateway Interface)

이재원·2024년 2월 26일
  • 서버와 애플리케이션 간에 데이터를 주고 받는 방식 또는 컨벤션

  • 웹 서버와 외부 프로그램 간의 인터페이스를 위한 표준

  • CGI를 사용하면, 웹 서버는 동적 콘텐츠를 생성하거나 클라이언트의 요청에 따라 데이터를 처리할 수 있는 외부 프로그램을 호출할 수 있다.

  • Perl, PHP, Python, C 등 다양한 프로그래밍 언어로 작성될 수 있으며, 웹 서버에 의해 실행

  • 사용자의 요청에 따라 CGI 스크립트가 실행되고, 스크립트는 실행 결과를 웹 서버로 다시 보내며, 서버는 그 결과를 사용자에게 전달

  • 초기의 웹서버는 정적인 콘텐츠(서버에 저장된 HTML 파일과 같은 고정된 문서)만을 클라이언트에게 전송하는 역할만 했다. 이는 웹페이지를 보는 것만 가능했고, 사용자의 입력을 기반으로 콘텐츠를 생성하거나, 데이터베이스와 상호 작용하는 등의 작업을 수행할 수 없었다.

  • 웹의 사용이 확대되면서 사용자와 상호작용하는 동적인 웹 페이지의 필요성이 증가했다. (사용자의 입력을 받아 처리하고, 그 결과를 사용자에게 돌려주는 기능이). 예를 들어, 양식(form)을 통해 데이터를 제출하고, 서버에서 이 데이터를 처리한 후 사용자에게 특정 결과를 보여주는 과정이 이에 해당.

  • CGI는 클라이언트(보통 웹 브라우저)로부터 요청을 받으면, 그 요청에 맞는 외부 프로그램(스크립트)을 실행시키는 방식으로 동작

    • 이 외부 프로그램은 Perl, Python, C 등 다양한 프로그래밍 언어로 작성될 수 있으며, 데이터 처리, 데이터베이스 조회, 동적 콘텐츠 생성 등의 작업을 수행한다.
    • 외부 프로그램의 처리결과는 다시 웹 서버를 통해 클라이언트에게 전달된다. 이를 통해 웹 페이지는 동적으로 생성되고 사용자와의 상호작용이 가능해졌다.
  • CGI는 1990년대 초반 웹 개발의 초기 단계에서 널리 사용되었지만, 각 요청마다 새로운 프로세스를 처리하는 등 고성능이 필요한 환경에서 효율적이지 않은 문제로 인해 PHP, ASP.NET, Java Servlets와 같은 기술들이 CGI를 대체하여 널리 사용되고 있다.

  • CGI을 대체하는 기술들은 요청 처리를 위해 새로운 프로세스를 생성하는 대신, 쓰레드를 사용하거나 특정 런타임 환경 내에서 실행되는 코드를 통해 성능을 개선하고, 다양한 추가 기능을 제공한다. 그럼에도 불구하고, CGI는 간단한 웹 애플리케이션 개발이나 레거시 시스템에서 일부 사용되고 있다.

CGI의 작동

  • 웹브라우저는 사용자가 입력한 데이터와 함께 서버로 요청을 전송한다.
  • 사용자가 정적인 콘텐츠를 요청하는 경우, 웹 서버는 저장된 HTML 문서 등을 그대로 사용자에게 전달한다.
  • 사용자가 동적 콘텐츠를 요청하는 경우(예: 양식 제출, 데이터 검색 등), 웹 서버는 CGI 프로그램을 호출하여 사용자의 요청을 처리한다.
  • 서버는 동적 콘텐츠를 요청하는 경우에, 지정된 CGI프로그램을 실행하여 데이터를 처리한뒤 결과를 HTML 형태로 생성하여 서버로 반환한다.
  • 서버는 CGI프로그램으로 받은 결과를 사용자의 웹 브라우저로 전송한다.

Servlet과의 차이점

  • Servlet은 Java 언어로 작성된 서버 측 프로그램으로, 웹 서버 또는 애플리케이션 서버에서 실행
  • Servlet은 CGI와 유사한 기능을 제공
  • Servlet은 CGI와 달리 각 요청마다 새로운 프로세스를 생성하지 않으며, JVM내에서 실행되며, 쓰레드를 사용하여 메모리 사용량과 처리시간을 크게 줄인다.
  • 플랫폼 독립성: Servlet은 Java로 작성되므로, Java가 실행될 수 있는 모든 플랫폼에서 실행될 수 있다.
  • 상태 정보 유지: Servlet은 세션 관리를 통해 사용자 상태 정보를 유지할 수 있다.

CGI 프로그램의 구조

개별 CGI 프로그램

  • 각 동적 페이지가 요구하는 기능에 따라 별도의 CGI 프로그램을 구현

장점

  • 기능별로 프로그램을 분리하여 관리하기 때문에, 코드의 모듈성이 증가하고 유지보수가 용이

단점

  • 각 기능마다 별도의 프로그램을 유지해야 하므로, 전체 시스템의 복잡성이 증가하고 리소스 사용 증가

공유 CGI 프로그램

  • 하나의 CGI 프로그램이 여러 페이지의 요청을 처리할 수 있도록 설계
  • CGI 프로그램은 요청된 작업의 종류를 식별하고, 그에 따라 적절한 처리를 수행
    장점
  • 코드의 재사용성이 증가하고, 시스템의 전체적인 관리가 용이

단점

  • 프로그램이 복잡해지고, 다양한 작업을 처리하기 위한 로직을 포함해야 하므로, 개발과 테스트가 더 어려워질 수 있다.

현대 웹 어플리케이션 프레임워크

  • CGI를 직접적으로 사용하는 것보다는, PHP, Ruby on Rails, Django 같은 웹 어플리케이션 프레임워크를 사용하는 경우가 많다.
  • 동적 콘텐츠의 생성, 데이터베이스 관리, 사용자 인증 등을 위한 고급 기능과 함께, 요청을 처리하는 효율적인 방법을 제공한다.

cgi-bin에 넣고 사용?

profile
최고가 되기 위한 여정

0개의 댓글