CGI(Common Gateway Interface) 이해하기 : 웹 페이지를 동적으로 만드는 기술

LeeYulhee·2024년 1월 11일
3
post-thumbnail

👉 CGI란(Common Gateway Interface)?


  • 웹 서버와 외부 프로그램 간의 통신을 위한 표준 방법
  • 사용자의 요청에 따라 서버에서 실행되는 프로그램을 통해 동적인 웹 페이지를 생성하거나 데이터를 처리하는 데 사용
  • 웹 서버와 어떤 외부 프로그램이나 스크립트가 상호 작용할 수 있게 해주는 방법
  • CGI 자체는 웹 애플리케이션 서버라기보다는 웹 서버가 외부 프로그램(즉, CGI 스크립트)과 통신할 수 있도록 하는 규약 혹은 인터페이스
    • 웹 애플리케이션 서버(WAS)는 더 다양한 기능을 제공
      • 애플리케이션 로직 처리, 여러 컴포넌트 간의 통합, 세션 관리, 보안, 트랜잭션 관리 등
  • CGI는 초기 웹 개발에서 매우 중요한 역할을 했지만, 현대의 웹 개발에서는 더 효율적이고 강력한 기술들로 대체되고 있음
    • Node.js, Django 같은 현대 프레임워크 등으로 대체



👉 CGI 스크립트(CGI 프로그램)란?


  • CGI 규약을 따라 웹 서버와 상호작용하는 프로그램
  • 웹 서버가 사용자의 요청에 대해 동적인 콘텐츠를 생성하고 응답할 수 있도록 도와 줌
  • 보통 Perl, Python, C 등 다양한 프로그래밍 언어로 작성될 수 있음



👉 CGI 처리 흐름


  1. HTTP Request
    • 사용자가 웹 페이지의 특정 부분을 클릭하거나 양식을 제출
  2. CGI 스크립트를 게이트웨이로 다른 파일이나 프로그램에 연계 → 처리 실행
    • CGI 스크립트는 그 요청을 받아서 필요한 작업을 수행한 후 결과를 웹 서버에 다시 전송
  3. 웹 서버는 이 결과를 사용자의 웹 브라우저에 전송하여 사용자에게 보여줌


👉 CGI 스크립트(프로그램) 예시


  1. HTML 폼 페이지 작성

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>CGI Form Example</title>
    </head>
    <body>
        <form action="/cgi-bin/welcome.py" method="post">
            <label for="name">Enter your name:</label>
            <input type="text" id="name" name="name">
            <input type="submit" value="Submit">
        </form>
    </body>
    </html>
  2. Python으로 CGI 스크립트 작성 후 welcome.py로 저장

    #!/usr/bin/env python3
    
    import cgi
    import cgitb
    
    cgitb.enable()  # 디버깅을 위해 CGI 트레이스백 활성화
    
    print("Content-Type: text/html")    # HTML로 응답을 보냄
    print()                             # 빈 줄로 헤더와 본문을 구분
    
    # 폼 데이터 파싱
    form = cgi.FieldStorage()
    name = form.getvalue('name')
    
    print("<html><head>")
    print("<title>CGI Form Response</title>")
    print("</head><body>")
    print("<h1>Welcome, {}</h1>".format(name if name else "Guest"))
    print("</body></html>")
    
  3. CGI 스크립트에 실행 권한 부여

    chmod 755 welcome.py
  4. Apache 웹 서버 설정 파일에 다음과 같이 설정하여 CGI 스크립트를 사용할 수 있게 설정

    <Directory "/path/to/cgi-bin">
        AllowOverride None
        Options +ExecCGI
        Require all granted
        AddHandler cgi-script .py
    </Directory>
  5. 웹 브라우저에서 http://example/form.html에 접근하여 폼에 이름을 입력하고 제출하면, CGI 스크립트 welcome.py가 실행되어 입력된 이름을 포함한 환영 메시지가 출력



👉 서블릿과 CGI 프로그램(스크립트)의 공통점과 차이점


  • 공통점
    • 둘 다 웹 서버가 클라이언트의 요청에 따라 동적인 콘텐츠를 생성하고 응답하는 데 사용
    • 정적 HTML 파일만 처리하는 웹 서버의 기능을 확장하여, 프로그래밍을 통해 동적인 웹 페이지를 생성
  • CGI
    • 언어 독립성
      • CGI는 Perl, Python, C 등 다양한 언어로 작성할 수 있음
    • 프로세스 생성
      • 각 요청에 대해 새로운 프로세스를 생성
      • 이로 인해 높은 트래픽에서 성능 저하가 일어날 수 있음
    • 자원 사용
      • 각 요청마다 새 프로세스가 생성되기 때문에 자원 사용이 비효율적일 수 있음
    • 이식성
      • 다양한 웹 서버와 운영 체제에서 쉽게 사용할 수 있음
      • 단순하고 기본적인 개념으로, 간단한 스크립트로 빠르게 구현할 수 있음
  • 서블릿
    • 언어 제한
      • Java 언어로만 작성
    • 스레드 모델
      • 각 요청에 대해 새로운 스레드를 생성
      • 이는 프로세스 생성보다 자원을 효율적으로 사용
    • 성능
      • CGI에 비해 더 높은 성능 제공
      • 특히 동시 요청을 처리하는 경우
    • 자바 환경 통합
      • Java 기술 스택과 완벽하게 통합되어 있어, Java 기반의 기존 시스템과 연동하기 좋음
      • Java의 객체지향적 특성을 활용할 수 있음
profile
끝없이 성장하고자 하는 백엔드 개발자입니다.

1개의 댓글

comment-user-thumbnail
2024년 7월 22일

정리가 너무 깔끔해요!! 잘 배우고 갑니다

답글 달기

관련 채용 정보