- Jake Gold는 16스레드 AMD 3700X에서 Go + SQLite CGI 프로그램을 돌려, 1990년대식 CGI가 현대 하드웨어에서 어느 정도 버틸 수 있는지 확인함
- 결과는 평범한 하드웨어에서도 초당 2400건 이상, 하루 2억 건 이상 요청 처리가 가능하다는 점을 보여줌
- CGI는 요청마다 프로세스를 시작·실행·종료하기 때문에 과거에는 오버헤드가 컸고, 이를 줄이기 위해 PHP와 FastCGI 같은 방식이 등장함
- Simon Willison은 2020년 datasette-ripgrep에서 Rust 기반 ripgrep CLI를 호출해 검색을 처리하며, 웹 요청 중 프로세스 실행을 피해야 한다는 오랜 믿음을 바꾸게 됨
- Go와 Rust처럼 시작이 빠른 언어와 다중 CPU 환경에서는 CGI식 처리가 예전보다 현실적인 선택지가 될 수 있지만, 일반적인 권장 방식은 아님
현대 하드웨어에서 다시 본 CGI 성능
- Serving 200 million requests per day with a cgi-bin은 Jake Gold가 Go + SQLite CGI 프로그램으로 1990년대식 CGI의 성능을 테스트한 글임
- 테스트 환경은 16스레드 AMD 3700X 기반 시스템임
- 핵심 결과는 CGI로도 평범한 하드웨어에서 초당 2400건 이상, 하루 2억 건 이상 요청을 처리할 수 있다는 점임
- CGI는 들어오는 요청마다 별도 프로세스를 시작하고, 실행한 뒤 종료하는 방식임
- 초기 웹 커뮤니티는 이 오버헤드를 피하려고, 코드를 메모리에 상주시켜 추가 비용을 줄이는 PHP와 FastCGI를 만들었음
CGI가 예전만큼 나쁘지 않을 수 있는 이유
- 과거 CGI의 병목 중 하나는 Perl, Python, Java처럼 매우 빠른 시작 속도를 목표로 설계되지 않은 언어로 웹 스크립트를 작성했다는 점임
- 오늘날 Go와 Rust를 사용하면 CGI 스타일 요청 처리가 훨씬 효과적으로 동작할 수 있음
- Simon Willison은 2020년 datasette-ripgrep을 만들며, Rust로 작성된 ripgrep CLI 도구를 셸로 호출해 검색을 실행했고 좋은 결과를 얻음
- CGI 프로그램은 별도 프로세스로 실행되므로 여러 CPU를 활용하는 구조와도 잘 맞을 수 있음
- 현대 서버는 384 CPU 스레드를 가질 수 있음
- 작은 VM도 16 CPU를 가질 수 있음
- CPU와 메모리 성능도 과거보다 크게 빨라짐
- 1998년식 웹 애플리케이션 작성 방식도 Go와 Rust를 만나면 흥미로운 실험 대상이 되지만, 대부분의 서비스가 따라야 할 기본 선택지는 아님