TIL - CGI, Web Server, MIME Type

손찬호·2024년 5월 5일
0

TIL

목록 보기
19/21

CGI

Common Gateway Interface(CGI)
웹 서버와 외부 컨텐츠 제공 프로그램이나 스크립트 사이의 인터페이스 호출하는 조합을 말한다.

CGI를 통해 웹 서버는 동적 컨텐츠를 생성하거나 데이터베이스와 상호 작용하는 프로그램을 실행할 수 있다.
사용자가 웹 페이지에서 양식을 제출하거나 특정 페이지를 요청하면
웹 서버는 CGI 프로그램을 호출하여 요청을 처리하고 결과를 웹 페이지 형태로 사용자에게 돌려준다.

CGI 스크립트는 Perl, Python, Ruby, C 등 다양한 프로그래밍 언어로 작성될 수 있으며,
웹 서버와 외부 프로그램 사이의 데이터 교환을 위한 규약을 정했다.
CGI는 웹의 초기 시절부터 동적 웹 페이지 및 웹 어플리케이션 개발의 기반이 되었다.
하지만, 처리 속도와 서버 부하 측면에서 비효율적이라는 단점이 있어
이를 개선한 PHP, ASP.NET, Java Servlets 같은 더 효율적인 기술들이 개발되었다.

왜 CGI라고 부를까?

웹 서버와 외부 프로그램을 지나는 관문(gateway)를 연결하는 접점(interface)를
다양한 언어를 통해 작성할 수 있고 프로그램 호출방법, 출력 형식등을
정의하는 하나의 공통된(common) 규약을 제공하기 때문에 common gateway interface라고 부른다고 보면 된다.

동작 과정

  1. 사용자 요청:
    사용자가 웹 브라우저를 통해 특정 작업(e.g 양식 제출)을 요청한다.
  2. 웹 서버 전달:
    웹 서버는 이 요청을 받아 CGI 스크립트나 프로그램을 호출한다.
    요청 정보는 환경 변수를 통해 CGI 프로그램에 전달된다.
  3. CGI 스크립트 실행:
    CGI 스크립트는 서버에서 실행되며, 요청에 따른 처리(e.g 데이터베이스 조회)를 수행한다.
  4. 응답 생성:
    처리 결과를 바탕으로 CGI 스크립트는 HTML 페이지나 다른 형태의 결과를 생성한다.
  5. 결과 반환:
    생성된 결과는 웹 서버를 통해 사용자에게 전달되고, 사용자의 브라우저는 이를 표시한다.

CGI 단점

CGI가 플랫폼이나 언어를 가리지 않으면서 동적 페이지를 만드는 좋은 기술이지만
가장은 단점은 성능과 보안이다.
1. 서버 과부하:
CGI 프로그램은 요청마다 새로운 프로세스를 생성한다. 즉 다시말해 사용자가 브라우저에서
CGI를 실행하는 버튼 하나를 클릭할 때마다 서버에서 프로세스를 생성해서 이를 처리한다.
이는 과한 메모리 사용과 CPU 자원을 많이 점유할 문제가 생길 수 있다.
2. 시스템 취약점 유발:
CGI를 실행해 CGI 스크립트가 시스템 자원에 접근하고 실행되기 때문에
잘못 작성된 스크립트는 시스템에 악영향을 주거나 보안 취약점을 유발할 수 있다.

이런 단점이 있어 현대 웹 애플리케이션들은
PHP, ASP.NET, Java Servlets와 같은 더 효율적이고 안전한 기술을 사용하고 있다.
이 기술들은 요청 처리를 위한 프로세스나 스레드를 효율적으로 관리하고
보안과 성능면에서도 개선된 방법으로 서버와 외부프로그램 사이의 상호작용을 한다.

Web Server

Web Server:
인터넷을 통해 클라이언트에게 웹페이지를 제공하는 서버 컴퓨터를 말한다.
여기서 서버 컴퓨터는 하드웨어+소프트웨어 둘 다를 합친 걸 의미힌다.

Web server의 역할

  1. HTTP 통신으로 데이터 전송:
    사용자의 웹 브라우저가 HTTP 요청을 보내면 이에 받아 웹페이지나 데이터를 응답해준다.
    이때 보내는 데이터는 정적인 파일부터 동적인 파일까지 다양하다.
    정적 컨텐츠(HTML, CSS, JavaScript)
    동적 컨텐츠(CGI, PHP, ASP.NET, Java Servlets)등이 있다.

  2. 보안:
    SSL(Secure Socket Layer) 혹은 TLS(Transport Layer Security)
    같은 보안 프로토콜을 사용해 데이터를 암호화하고, 안전한 데이터 전송을 가능하게 한다.

Web server 예시

  • Apache HTTP Server (Apache):
  • Apache Tomcat:
    주로 Java 서블릿과 JSP(Java Server Pages) 애플리케이션을 위한 웹 컨테이너로 사용되고
    가벼운 웹 서버 기능도 제공한다.
  • LiteSpeed Web Server:
    Apache와 호환되는 고성능 웹 서버로, 더 적은 자원으로 더 빠른 속도를 제공한다.
  • Nginx: 고성능을 자랑하며, 특히 정적 콘텐츠를 처리하거나
    리버스 프록시, 로드 밸런서 역할로 사용될 때 높은 효율성을 보인다.
  • Microsoft Internet Information Services (IIS):
    윈도우 서버 운영 체제에 기본적으로 포함되어 있는 웹 서버로, .NET 어플리케이션을 실행하는 데 사용한다.

MIME Type

MIME(Multipurpose Internet Mail Extensions) Type:
문서, 파일, 메일의 데이터 형식을 설명하는 인터넷 표준을 말한다.

원래는 이메일로 다양한 파일 형식을 전송하기 위해 개발되었지만
현재는 웹에서도 파일 형식을 식별하는데 사용하고 있다.
web server가 클라이언트 요청에 응답해서 데이터를 보내줄 때
HTTP 헤더에 해당 데이터의 MIME 타입을 명시한다.
응답을 받은 클라이언트 브라우저는 바이너리 데이터를 명시된 MIME 타입에 맞춰서 처리한다.

MIME 타입은 타입/서브타입 형태로 구성된다.
예를 들어, HTML 문서의 MIME 타입은 text/html이고,
JPEG 이미지의 MIME 타입은 image/jpeg로 표시한다.

여담으로 기존 이메일은 ASCII 텍스트만 지원했다.
이러한 제한을 넘어서 MIME Type은 다양한 형태의 콘텐츠(Multipurpose)를 주고 받을 수 있도록
기능을 확장(Extensions)했다는 것을 의미한다.

profile
매일 1%씩 성장하려는 주니어 개발자입니다.

0개의 댓글

관련 채용 정보