Webbol - COBOL로 작성된 미니멀 정적 웹 서버

1 month ago 12

  • COBOL로 작성된 미니멀 정적 웹 서버로, GnuCOBOL을 이용해 현대적인 시스템 프로그래밍이 가능함을 보여줌
  • 현재 디렉터리의 정적 파일 제공, MIME 타입 자동 감지, HTTP 상태 코드 처리(200/403/404/413), 경로 탐색 공격 차단, 리퀘스트 로그 출력 등 기능을 제공
  • 단일 스레드로 한 번에 하나의 요청만 처리 가능하며, 파일 크기는 최대 64KB 지원
  • GnuCOBOL이 설치된 POSIX 호환 환경(Linux/macOS/BSD) 에서 동작하며, make로 컴파일 후 ./webserver 명령으로 8080 포트에서 실행 가능
  • COBOL 언어로 작성된 네트워크 프로그램의 예로서, 레거시 언어로도 현대적 웹서버를 구현할 수 있음을 입증하는 프로젝트

프로젝트 개요

  • Webbol은 COBOL 언어와 GnuCOBOL 컴파일러를 이용해 개발된 미니멀 정적 웹 서버임
  • 목적은 간단한 정적 파일 제공과 COBOL의 현대적 사용성을 입증하는 것

주요 기능

  • 현재 디렉토리의 정적 파일 서빙
  • 일반적인 파일 형식에 대해 자동 MIME 타입 감지
  • HTTP 상태 코드 200(OK), 403(Forbidden), 404(Not Found), 413(Payload Too Large) 지원
  • 경로 이동 공격(../ 등) 방지
  • 전체 HTTP 헤더를 포함한 청결한 요청 로그 기록
  • 루트 경로 요청 시 index.html 기본 제공

시스템 요구 사항

  • GnuCOBOL (cobc) 컴파일러 필요
  • POSIX 호환 운영체제 필요 (Linux, macOS, BSD)
  • make 도구 필요

동작 예시 및 접근 방법

구조와 파일 구성

  • Makefile: 빌드 설정
  • README.md: 설명 안내 파일
  • config.cpy, socket-defs.cpy, http-structs.cpy, file-structs.cpy: 서버, 소켓, HTTP, 파일 처리 구조 정의
  • path-utils.cbl: 경로 검증 및 정리
  • mime-types.cbl: MIME 타입 판단 로직
  • file-ops.cbl: 파일 읽기 작업
  • http-handler.cbl: HTTP 요청/응답 처리
  • webserver.cbl: 메인 서버 프로그램

지원 MIME 타입

  • HTML: text/html
  • CSS: text/css
  • JavaScript: application/javascript
  • JSON, XML, Plain text, PNG, JPEG, GIF, SVG, ICO, PDF 등
  • 추가 MIME 타입 등록은 mime-types.cbl 파일에서 가능

보안 기능

  • 경로 이동 방지: ‘..’ 시퀀스가 포함된 요청 차단
  • 디렉토리 접근 제한: 현재 디렉토리 및 하위 디렉토리 파일만 제공
  • 안전한 파일 핸들링: 파일 시스템 접근 전 경로 검증 및 유효성 검사

제한 사항

  • 싱글 스레드 기반: 한 번에 하나의 요청만 처리 가능
  • SSL/TLS(HTTPS) 미지원
  • 최대 파일 크기: 64KB
  • 라인 순차 파일 구성(텍스트 파일)만 지원
  • 캐시, 압축, 범위 요청 등 미지원

Read Entire Article