what is CGI( Common Gateway Interface )
CGI(Common Gateway Interface)는 웹 서버와 외부 프로그램(보통 스크립트나 실행 파일) 간에 데이터를 주고받기 위한 표준 인터페이스이다. CGI를 사용하면 웹 서버가 동적인 콘텐츠를 생성하거나 사용자 입력에 따라 처리 결과를 보여주는 웹 애플리케이션을 실행할 수 있다.
위에 블로그에 있는 사진을 참고하자면,

다음과 같다.
→ 아니 그럼 이게 백이랑 뭐가 다른 거임? 이라고 생각할 수 있다. 밀접한 관계가 있지만 엄연히 다르다.
CGI는 백엔드를 구현하는 하나의 방법이다.
웹 서버와 외부 프로그램(스크립트나 애플리케이션) 간의 데이터 교환 표준 인터페이스로, 주로 동적인 웹 페이지를 생성하는 데 사용되는게 CGI라면,
백엔드는 사용자의 요청을 처리하고 데이터베이스와 상호작용하며, 결과를 반환하는 전체 시스템 또는 서버 쪽 코드를 말한다.
추가적으로 이젠 CGI라는 개념을 거의 사용하지 않는다.
FastCGI, WSGI, ASP.NET, Node.js 등이 대체를 하기 때문이다.
근데 웹보안을 하면서 알고 있어야 하는 것은,
CGI 스크립트는 보통 /cgi-bin/ 디렉토리에 저장된다는 것이다.
php, jsp, asp 등과 같이 CGI를 통해 서비스를 하는 형태에서는 확장자를 통해 웹 어플리케이션 엔진에 요청 여부를 판단합니다. → ????
index.php 요청 → PHP 엔진으로 전달
index.jsp 요청 → JSP 엔진으로 전달
index.asp 요청 → ASP 엔진으로 전달
index.html 요청 → 정적 파일로 처리 (별도의 엔진 필요 없음)
그니깐 얘내들이 .cgi 확장자에서 발전된 형태라는 거임
실제동작 flow
- 사용자가 브라우저에서
http://example.com/index.php를 요청 - 웹 서버(Apache, Nginx 등)는
.php확장자를 확인 - 웹 서버는 이 확장자가 PHP 엔진으로 처리되어야 함을 인식하고, PHP 엔진에 요청을 전달
- PHP 엔진은
index.php파일의 내용을 실행하고 결과를 생성. - 웹 서버는 PHP 엔진으로부터 받은 결과를 사용자에게 응답으로 보내기
Python의 flask, django 와 Nodejs의 express 등은 서버,CGI,웹 어플리케이션 등이 통합된 프레임워크입니다. 미리 라우팅 된 경로에만 접근이 가능하도록 설정하여 서비스 되어집니다.
→ 이제 이해가 되기 시작한다. 이렇게 통합을 시켜서 하나의 프레임 워크로 만드니 CGI만 사용하지 않는다.