C/C++용 최소주의 CGI·FastCGI 라이브러리 kcgi, 신뢰되지 않은 입력을 샌드박스로 분리 처리
- kcgi는 C와 C++ 웹 애플리케이션을 위한 오픈소스 CGI 및 FastCGI 라이브러리로, ISC 라이선스로 배포됨
- 차별화 기능은 신뢰되지 않은 입력 경로를 샌드박싱과 프로세스 분리로 처리하는 점임
- 입력 처리에는 쿼리 문자열, 쿠키, 본문, multipart 파싱과 검증이 포함되고, 인증, 출력 캐싱, 자동 압축, JSON과 XML 같은 형식 출력기도 제공함
- 빌드에 필요한 하드 의존성은 BSD make(Linux에서는 bmake)와 zlib뿐이고, 회귀 테스트를 돌리려면 libcurl이 추가로 필요함
- 배포는 Apache, nginx, OpenBSD httpd 환경에서 주로 쓰이며, chroot 안에서 실행하려면 바이너리를 정적 링크해야 함
Hacker News opinions
fastcgi 라이브러리들 써보면 소켓 넘겨받는 부분이 너무 불투명하더라. 그래서 라이브러리 버리고 스펙 보고 직접 짰더니 그냥 평범한 소켓 코딩이더라.
나는 C++로 넷스택 전체를 직접 짰음. 소켓부터 웹서버, TLS 암호 코드, 미들웨어까지 외부 서드파티 코드가 하나도 없음. Skylake 코어 하나에서 HTTPS 요청을 초당 약 60만 개 처리함.
예전엔 Java랑 .NET 뜨기 전에 C/C++이 웹 백엔드 기본이었는데, 그다음 느린 인터프리터 언어들이 자리를 차지했음. 지금은 그 스크립팅 언어들도 JIT를 붙이거나 Go나 Rust로 다시 쓰고 있음.
C++로 웹앱 짜서 먹고살았음. 지금도 다시 하라면 할 것 같음.
CPython 개발자한테 파이썬이 메모리 안전하냐고 물으니 '그런가?'라고 했다던 일화 있던데. 하드웨어 자체가 안전하지 않으니 결국 정도 차이고, 중요한 건 얼마나 정성 들이느냐임. 백엔드를 C로 짜든 LISP로 짜든 유효함.
성능 놓치는 거 많음. uWebSockets로 데모 서버 하나 띄워봐. Node.js 서버보다 10배에서 50배 빠르다니까.
C가 웹 백엔드 선택지로 Common Lisp과 동급이라는 건 개발 속도 신경 안 쓸 때나 맞는 말임. 랜덤 웹사이트를 C로 짜는 건 정당화가 약함. 고성능이 필요하거나 C 라이브러리를 바인딩으로 못 쓸 때나 이해됨.
그 회색 논리가 제일 위험함. 모든 게 회색이라 아무거나 괜찮다는 식으로 흘러가는 패턴이 있음. AsmBB 같은 건 멋지지만 이커머스를 어셈블리로 짜는 건 말이 안 됨.
Perl이 OG CGI 언어지. 2000년 전에 Perl로 온갖 아이디어를 웹에 쏟아 부었는데, 대부분 형편없고 보안도 약했음. 그래도 그때가 재밌었음.
나도 C로 TodoMVC 만들어본 적 있음. fcgi 써서 todomvc-c 저장소에 올려놨음.