Common Gateway Interface(CGI)
웹 서버와 외부 컨텐츠 제공 프로그램이나 스크립트 사이의 인터페이스 호출하는 조합을 말한다.
CGI를 통해 웹 서버는 동적 컨텐츠를 생성하거나 데이터베이스와 상호 작용하는 프로그램을 실행할 수 있다.
사용자가 웹 페이지에서 양식을 제출하거나 특정 페이지를 요청하면
웹 서버는 CGI 프로그램을 호출하여 요청을 처리하고 결과를 웹 페이지 형태로 사용자에게 돌려준다.
CGI 스크립트는 Perl, Python, Ruby, C 등 다양한 프로그래밍 언어로 작성될 수 있으며,
웹 서버와 외부 프로그램 사이의 데이터 교환을 위한 규약을 정했다.
CGI는 웹의 초기 시절부터 동적 웹 페이지 및 웹 어플리케이션 개발의 기반이 되었다.
하지만, 처리 속도와 서버 부하 측면에서 비효율적이라는 단점이 있어
이를 개선한 PHP, ASP.NET, Java Servlets 같은 더 효율적인 기술들이 개발되었다.
웹 서버와 외부 프로그램을 지나는 관문(gateway)를 연결하는 접점(interface)를
다양한 언어를 통해 작성할 수 있고 프로그램 호출방법, 출력 형식등을
정의하는 하나의 공통된(common) 규약을 제공하기 때문에 common gateway interface라고 부른다고 보면 된다.
CGI가 플랫폼이나 언어를 가리지 않으면서 동적 페이지를 만드는 좋은 기술이지만
가장은 단점은 성능과 보안이다.
1. 서버 과부하:
CGI 프로그램은 요청마다 새로운 프로세스를 생성한다. 즉 다시말해 사용자가 브라우저에서
CGI를 실행하는 버튼 하나를 클릭할 때마다 서버에서 프로세스를 생성해서 이를 처리한다.
이는 과한 메모리 사용과 CPU 자원을 많이 점유할 문제가 생길 수 있다.
2. 시스템 취약점 유발:
CGI를 실행해 CGI 스크립트가 시스템 자원에 접근하고 실행되기 때문에
잘못 작성된 스크립트는 시스템에 악영향을 주거나 보안 취약점을 유발할 수 있다.
이런 단점이 있어 현대 웹 애플리케이션들은
PHP, ASP.NET, Java Servlets와 같은 더 효율적이고 안전한 기술을 사용하고 있다.
이 기술들은 요청 처리를 위한 프로세스나 스레드를 효율적으로 관리하고
보안과 성능면에서도 개선된 방법으로 서버와 외부프로그램 사이의 상호작용을 한다.
Web Server:
인터넷을 통해 클라이언트에게 웹페이지를 제공하는 서버 컴퓨터를 말한다.
여기서 서버 컴퓨터는 하드웨어+소프트웨어 둘 다를 합친 걸 의미힌다.
HTTP 통신으로 데이터 전송:
사용자의 웹 브라우저가 HTTP 요청을 보내면 이에 받아 웹페이지나 데이터를 응답해준다.
이때 보내는 데이터는 정적인 파일부터 동적인 파일까지 다양하다.
정적 컨텐츠(HTML, CSS, JavaScript)
동적 컨텐츠(CGI, PHP, ASP.NET, Java Servlets)등이 있다.
보안:
SSL(Secure Socket Layer) 혹은 TLS(Transport Layer Security)
같은 보안 프로토콜을 사용해 데이터를 암호화하고, 안전한 데이터 전송을 가능하게 한다.
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)했다는 것을 의미한다.