ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CGI란?
    프로그래밍 기초 공부 2022. 10. 14. 23:26

    열입곱 번째로 포스팅하게 하게 될 내용은 CGI에 관한 내용입니다.

     

    CGI(Common Gateway Interface)란?

    웹서버와 애플리케이션 간에 데이터를 주고 받는 방법이나 규약을 CGI라고 함
    CGI란 서버와 외부 스크립트 또는 프로그램과 상호작용할 때 이루어지는 입출력을 정의한 표준
    웹서버와 요청을 받아 처리해줄 로직을 담고 있는 애플리케이션 프로그램 사이의 인터페이스

     

    • CGI는 특별한 라이브러리나 도구를 의미하는 것이 아니고, 별도로 제작된 웹서버와 프로그램간의 교환방식
    • 웹서버가 특정 언어로 쓰인 구체적인 프로그램이 아니라 이 인터페이스에 의존하고 있기 때문에 어떤 언어든 이 인터페이스를 구현하기만 한다면 웹서버와 소통할 수 있음
    • 별도로 만들어 놓은 프로그램에 HTML의 Get or Post 방법으로 클라이언트의 데이터를 환경변수로 전달하고, 
      프로그램의 표준 출력 결과를 클라이언트에게 전송하는 것
    • 즉, 자바 어플리케이션 코딩을 하듯 웹 브라우저용 출력 화면을 만드는 방법

     

     

    CGI특징

    • CGI는 가장 오래된 인터페이스이고, 거의 모든 웹서버를 지원 가능
    • CGI를 구동하는 방법이 한가지는 아니지만, 대표적인 방법이 Apache HTTPd
    • 웹서버와 통신하기 위해 CGI를 사용하는 프로그램은 매 리퀘스트마다 서버를 재시작해야 함
    • CGI의 장점은 간편함, CGI를 사용하는 프로그램을 작성할 때 세줄 정도만 추가하면 됨
      • 그러나 이런 간편함은 때로 대가를 치뤄야할 때도 있음
    • 웹서버가 파일을 읽을 수 있어야 하기 때문에 파일을 항상 읽기 가능한 권한으로 만들어야 함
    • 스크립트 파일이 Byte Order Mark를 포함하지 않아야 함

     

     

    CGI 장점

    • 언어, 플랫폼 독립적이다(스펙만 준수하면 됨)
    • 매우 단순하고 다른 server-side 프로그래밍 언어에 비해 advanced task를 훨씬 쉽게 수행할 수 있음
    • 재사용할 수 있는 CGI 코드 라이브러리가 풍부함
    • CGI가 웹서버에서 실행될 때 안전함
    • CGI 코드를 수행하는데 특정 라이브러리가 필요하지 않기 때문에 매우 가벼움  

     

    CGI 단점

    • 속도가 느림
      • 요청이 올 때마다 DB connection을 새로 열어야 함
    • HTTP 요청마다 새로운 프로세스를 만들기 때문에 서버 메모리를 많이 잡아먹음
    • 페이지 로드 사이에 데이터가 메모리에 캐시될 수 없음

     

     

    CGI와 서블릿의 주요 차이점

    1. CGI 스크립트는 네이티브 OS로 작성되어 특정 디렉토리에 저장, 반면 서블릿 프로그램은 대개 Java로 작성되어 Java 바이트 코드로 컴파일되고 JVM에서 실행
    2. CGI는 플랫폼에 따라 다르므로 운영 체제간에 전환하기가 어려움, 반대로 서블릿은 JVM이 설치된 운영 체제에서 실행될 수 있으므로 플랫폼에 독립적임
    3. CGI 스크립트는 서버의 원시 OS에 작성된 실행 가능 프로그램, 반대로 서블릿은 JVM에서 실행되는 Java 바이트 코드로 컴파일
    4. Servlet은 Java를 사용하기 때문에 CGI보다 안전함
    5. 서블릿의 속도, 성능 및 효율성은 CGI보다 우수함
    6. CGI 스크립트는 직접 처리 할 수 ​​있움, 반대로 서블릿은 먼저 프로그램을 변환하고 컴파일 한 다음 처리함

     

    CGI와 서블릿은 같은 방식으로 작동하지만 서블릿은 빠르고 안전하며 플랫폼 독립적이며 쉽게 개발할 수 있으며

    여러 API를 통해 액세스 할 수 있고 다양한 웹 서버에서 지원되므로 서블릿을 CGI보다 유리하게 사용할 수 있음

    '프로그래밍 기초 공부' 카테고리의 다른 글

    AJAX란?  (0) 2022.10.17
    JSP란?  (0) 2022.10.17
    HeidiSQL(하이디 SQL)이란?  (0) 2022.10.10
    Servlet이란?  (0) 2022.10.10
    HTML, CSS, JS란?  (0) 2022.10.09
Designed by Tistory.