-
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
- 라인 순차 파일 구성(텍스트 파일)만 지원
-
캐시, 압축, 범위 요청 등 미지원