[CS] CGI / WebServer / MIME Type

Web Server (웹 서버)

정의

웹 서버는 클라이언트(보통 웹 브라우저)의 HTTP 요청을 받아, 응답을 반환하는 서버 프로그램이다. 정적인 HTML 파일을 제공하거나, 동적인 요청을 CGI나 WAS로 전달하기도 한다.

주요 기능

  • HTTP 요청 수신 (GET, POST 등)
  • 정적 리소스 제공 (HTML, CSS, 이미지 등)
  • 동적 요청을 외부 프로그램이나 백엔드로 전달 (예: CGI, PHP, Node.js)
  • MIME 타입에 따라 적절한 Content-Type 헤더 설정

대표적인 웹 서버

  • Apache HTTP Server
  • Nginx
  • Microsoft IIS
  • Python의 http.server (간단 테스트용)

CGI (Common Gateway Interface)

정의

CGI는 웹 서버와 외부 애플리케이션(주로 백엔드 스크립트) 사이의 인터페이스이다.
동적인 웹 페이지(검색 결과, 사용자 입력 처리 등)를 만들기 위해 웹 서버가 외부 프로그램을 실행하고, 그 출력 결과를 브라우저에 전달하는 방식이다.

동작 방식

[클라이언트 요청] --> [웹 서버] --> [CGI 스크립트 실행 (ex. Python, C)] --> [HTML 출력]

예시 (CGI 스크립트 in Python)

#!/usr/bin/env python3

print("Content-Type: text/html\n")
print("<html><body><h1>Hello, CGI!</h1></body></html>")
  • 웹 서버는 이 스크립트를 실행하고 출력 결과를 브라우저에 응답으로 보냄.
  • 실행된 CGI 프로그램은 반드시 HTTP 헤더를 출력해야 하며, 그 뒤에 HTML을 출력.

CGI 특징

항목 설명
구현 언어 C, Python, Perl, Shell 등
처리 방식 프로세스 생성 (비효율적이나 간단)
단점 요청마다 새 프로세스 생성 → 느림
대안 FastCGI, PHP-FPM, WAS (Tomcat 등)

MIME Type (Multipurpose Internet Mail Extensions)

정의

MIME 타입은 전송되는 파일이나 데이터의 형식을 명시하는 문자열 포맷이다.
웹 서버는 HTTP 응답의 Content-Type 헤더에 MIME 타입을 지정하여 브라우저가 데이터를 어떻게 해석해야 하는지 알려준다.

형식

Content-Type: text/html
  • 기본 형식: type/subtype
  • 예:
    • text/html → HTML 문서
    • text/css → CSS 스타일시트
    • application/json → JSON 데이터
    • image/png → PNG 이미지
    • application/octet-stream → 바이너리 (다운로드용)

웹 서버의 역할

웹 서버는 요청된 파일의 확장자에 따라 MIME 타입을 결정한다.
Apache, Nginx는 .conf 또는 .mime.types 파일에서 이를 정의함.