C로 만든 현대적인 웹 앱

4 hours ago 2

C와 CGI로 만든 상용 웹 제품 marketyour.games는 계정, 검색, 결제 등을 제공하며, JavaScript 없이 점진적 향상을 따름 BCHS(OpenBSD, C, httpd, SQLite) 스택으로 프레임워크, 템플릿 언어, 별도 데이터베이스 서버, 컨테이너 없이 구현함 요청마다 새 프로세스를 실행하므로 바이너리 파일 하나를 교체하면 새 요청부터 새 버전이 실행되며, 서버 재시작이나 중단 없이 배포함 적은 의존성과 단순한 구조 덕분에 빌드와 운영 부담이 작지만, 쿠키 처리와 입력 파싱, 검증, 이스케이프 같은 기본 기능은 직접 마련해야 함 현대 커널의 포크 최적화와 단순한 운영 구조 덕분에 CGI를 다시 선택할 만하며, 포크 비용이 문제가 되면 FastCGI로 전환할 수 있다고 봄 상용 제품에 적용한 C와 CGI 1994년에는 C 프로그램을 cgi-bin 디렉터리에 넣고 Apache가 요청마다 포크하도록 해 동적 웹사이트를 만들었으며, 32년 뒤에도 근본적으로 같은 기술로 상용 웹 제품을 출시함 marketyour.games는 사용자 계정, 콘텐츠 크리에이터 검색 대시보드, 크리에이터를 정리하는 폴더, Stripe 결제, Postmark 트랜잭션 이메일을 갖춤 점진적 향상을 따르며 JavaScript를 요구하지 않음 전체 구성은 바이너리 하나, SQLite 파일 하나, 추가 라이브러리 세 개로 이루어져 있어 전체 구조를 머릿속에 담을 수 있을 만큼 단순함 BCHS 스택과 빌드, 배포 구조 BCHS는 OpenBSD, C, httpd, SQLite로 구성됨 프레임워크 없이 C 프로그램이 CGI 환경 변수를 읽고 응답함 템플릿 언어 없이 C 코드가 HTML을 직접 출력함 별도 데이터베이스 서버 없이 SQLite C API로 데이터베이스 파일을 엶 컨테이너 없이 정적으로 링크한 바이너리를 빌드해 디렉터리에 배치함 요청마다 새 프로세스를 생성하므로 배포는 파일 하나를 교체하는 작업임 서버 재시작이나 서비스 중단이 없으며, 새 요청은 새 바이너리를 실행함 OpenBSD는 합리적인 기본 설정과 pledge, unveil 같은 C 프로그램 보안 도구를 제공함 httpd는 기본적으로 chroot 안에서 서비스하므로 CGI 바이너리도 파일시스템의 제한된 영역에서 실행됨 추가 라이브러리 세 개를 사용함 libcurl: Stripe와 Postmark로 보내는 모든 외부 요청을 처리함 libsodium: 무작위 식별자 ...

Read Entire Article