OpenBSD와 CGI로 C 웹앱을 상용 서비스에 올린 사례, 프로세스당 요청 방식의 장단점
- CGI와 C로 쓴 바이너리 하나를 OpenBSD httpd로 서빙하는 구조로 Stripe 결제와 Postmark 메일까지 갖춘 상용 서비스 marketyour.games를 만듦
- 의존성은 빌드 시 필요한 libcurl과 libsodium 두 개뿐이고 libcjson과 SQLite는 단일 C 파일로 벤더링해서 프로젝트에 포함됨
- 요청마다 새 프로세스가 뜨므로 바이너리 파일 하나 교체로 배포가 끝나고 서버 재시작이나 다운타임이 없음
- 클린 빌드는 몇 초, 증분 빌드는 0.5초 미만으로 끝나며 정적 자산은 모두 실행 파일에 컴파일되어 메모리에서 서빙됨
Hacker News opinions
본문 글자가 헤더 빼고 거의 안 읽힌다는 거 아님? 이게 모던한 거냐고 묻고 싶음
단색 배색 해보려고 AAA 대비 기준으로 두 색 골랐는데 읽기 힘들었으면 고쳐볼게
C를 고른 이유가 궁금했는데 OKCupid 팀이 C++로 웹서버 직접 만든 적도 있고 Zig 글도 있었음 나도 C면 충분하다고 봄
라이브러리들이 어차피 C라서 네이티브 인터페이스 그대로 쓰는 게 편함. 런타임 하나 더 얹을 필요가 없음
글 자체는 AI로 쓴 것 같진 않음. 헤더랑 병렬 구조는 AI 블로그 느낌이 나긴 하는데 읽어보면 괜찮음
요청마다 fork하면 느림. 포크 한 번에 8ms 정도 걸리고 그래서 FastCGI로 프로세스를 오래 살려두는 게 보통임. 나도 PHP 웹서버 만들 때 fork에서 FastCGI로 바꿨음
SQLite는 WAL 모드 켜면 읽기는 동시에 되고 쓰기만 직렬로 감. busy timeout 안 걸면 막힌 쓰기가 바로 타임아웃 나더라
C 문자열 처리는 진짜 불편함. 출력은 괜찮은데 파싱이 지옥임