유저가 웹 페이지를 요청했을 때 서버는 요청된 페이지를 보내준다. 하지만 유저가 웹페이지에서 특정 form을 채운 뒤 웹페이지를 보내면 이는 보통 애플리케이션에 의해 처리 되어야 한다. 웹서버는 보통 form 정보를 처리해줄 애플리케이션 프로그램에 정보를 보내고, confirmation 메시지를 돌려준다.
예를 들어, 회원가입 정보라면 서버는 이 정보를 애플리케이션에 보내 회원가입 관련 로직이 수행되도록 할 것이고, 애플리케이션은 회원가입 로직을 수행한 뒤 결과를 서버에 다시 보내줄 것이다. 이렇게 서버와 애플리케이션이 소통할 때 CGI 기반으로 만들어진 프로그램이라면 CGI 스펙을 따라 소통이 이루어진다.
그러니까 CGI도 그냥 인터페이스인데, 무엇과 무엇 사이의 인터페이스냐면 웹 서버와 요청을 받아 처리해줄 로직을 담고 있는 애플리케이션 프로그램 사이의 인터페이스인 것이다. 웹 서버가 특정 언어로 쓰인 구체적인 프로그램이 아니라 이 인터페이스에 의존하고 있기 때문에 어떤 언어든 이 인터페이스를 구현하기만 한다면(CGI 스펙을 따른다면) 웹 서버와 소통할 수 있다.
CGI에 문제가 있어서 servlet이 나온 것으로 알고있는데 CGI의 장점과 단점을 알아보면.
카운터, 방명록, 인터넷 쇼핑몰, 게시판, 검색엔진 등등에 사용된다.
유닉스, 리눅스 계열의 서버에서는 보통 Perl, PHP라는 프로그램을 사용한다. 여기서 php는 DB와의 연동이 쉽다는 이유로 perl보다 많이 사용된다고 한다. 윈도우NT계열은 ASP라는 기법을 많이 사용하고 있음.
참고 글
https://live-everyday.tistory.com/197
https://blog.daum.net/nikkiji/10340710