# COBOL로 작성된 Minecraft 서버

> Clean Markdown view of GeekNews topic #18454. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18454](https://news.hada.io/topic?id=18454)
- GeekNews Markdown: [https://news.hada.io/topic/18454.md](https://news.hada.io/topic/18454.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-12-27T09:48:20+09:00
- Updated: 2024-12-27T09:48:20+09:00
- Original source: [github.com/meyfa](https://github.com/meyfa/CobolCraft)
- Points: 1
- Comments: 1

## Topic Body

- # CobolCraft
  - COBOL로 작성된 Minecraft 서버로, Minecraft 1.21.4 버전을 지원함

- ## 기능
  - 다음 기능들이 이미 구현되어 있음
    - 무한 지형 생성 및 동적 청크 로딩
    - 월드 및 플레이어 데이터 디스크 저장
    - Minecraft 파일 형식 지원 (기존 월드 가져오기)
    - 최대 10명의 동시 플레이어를 지원하는 멀티플레이어
    - 핑/서버 상태 (서버 목록에 온라인으로 표시)
    - 블록 파괴 및 배치
    - 블록 상호작용 (오른쪽 클릭, 예: 문 열기)
    - 플레이어 인벤토리 (창의적 모드로 제한)
    - 채팅
    - 명령어 (게임 내 및 대화형 콘솔을 통해)
    - `server.properties`를 통한 설정
    - 화이트리스트 (지속적; `whitelist.json`에 저장)
  - 다중 상태, 방향, 상호작용 블록은 많은 전문 코드가 필요하며, 이 프로젝트의 범위를 초과함
    - 일부 지원되는 블록: 횃불, 슬래브, 계단, 회전된 기둥, 버튼, 문, 트랩도어, 침대

- ## 사용 방법
  - GnuCOBOL을 사용하여 개발되었으며, Linux에서 실행하도록 설계됨
  - Windows와 같은 다른 운영 체제에 대한 지원은 테스트되지 않았으나, Docker를 사용하여 플랫폼 독립적 배포 가능
  - Linux에서 배포하려면 다음 전제 조건이 설치되어야 함
    - `cobc`, `make`, `g++`, `zlib`, `curl`, 최신 Java 버전
  - `make`를 실행하여 빌드하고, `make run`으로 포트 25565에서 서버 시작
  - Docker 사용 시:
    - Docker Hub에서 이미지 가져오기 또는 직접 빌드 가능
    - Docker 컨테이너 실행 시 외부에서 접근 가능하도록 설정 가능

- ## 왜?
  - COBOL에 대한 많은 소문과 오명이 있어, 프로젝트를 통해 이 언어에 대해 더 알아보고자 함
  - COBOL은 비즈니스 애플리케이션에 적합하며, Minecraft 프로토콜이 요구하는 저수준 데이터 조작에는 적합하지 않음
  - 그러나 작동하는 프로토타입을 만들기 전에는 포기하지 않음
  - 데이터 인코딩 및 디코딩을 통해 성능을 확보함

- ## 프로그램 개요
  - ### 소스 구성 요소
    - 프로그램 진입점은 `main.cob`이며, 나머지 COBOL 소스는 `src/` 디렉토리에 위치
    - TCP 소켓은 `CBL_GC_SOCKET` 소켓 라이브러리로 관리됨
  - ### 패킷 블롭
    - Wireshark를 통해 캡처된 네트워크 데이터를 사용하며, `blobs/` 디렉토리에 위치
  - ### 데이터 추출
    - 공식 Minecraft 서버 및 클라이언트 애플리케이션에서 많은 데이터를 추출 가능
    - CobolCraft `Makefile`은 .jar 파일을 다운로드하고 JSON 데이터를 추출하는 타겟을 포함함

- ## 법적 고지
  - 이 프로젝트는 MIT 라이선스 하에 있으며, 3자 라이브러리 CBL_GC_SOCKET은 LGPL v3 라이선스 하에 있음
  - "Minecraft"는 Mojang Synergies AB의 상표이며, CobolCraft는 Mojang과 관련이 없고 승인되지 않음

## Comments



### Comment 32722

- Author: neo
- Created: 2024-12-27T09:48:20+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42513022) 
- COBOL에 대한 소문과 오명이 많음. 이를 알아보기 위해 프로젝트를 통해 COBOL을 경험해보고 싶음. 새로운 사람이 COBOL을 사용하며 얻은 통찰을 알고 싶음
  - 고등학교 졸업 프로젝트로 축구 베팅 확률을 자동화하는 COBOL 시스템을 작성했음. 시대에 뒤떨어졌지만, 재미있었음
  - COBOL은 펀치 카드 시절을 떠올리게 하는 매력이 있음

- 간단한 언어로 작성된 작은 프로젝트가 인상적임. 반면, Rust 같은 현대 언어로 작성된 프로젝트는 비효율적임
  - 간단한 언어는 아이디어를 구현하기 쉽지만, 현대 언어는 지속 가능한 코드를 작성하도록 강요함

- 1978년 이후 COBOL 사용을 중단했음. 다시는 이 코드를 보고 싶지 않음

- COBOL 코드는 절차적 언어 배경이 있는 사람에게 이해하기 쉬움. 20년 전 VB로 작성된 게임 서버를 떠올리게 함

- COBOL 코드는 매우 읽기 쉬움. 현대 언어와 비교했을 때 이해하기 쉬움

- 파키스탄 작은 마을에서 고등학교 시절 COBOL을 배움. 금융 보고서를 시뮬레이션하는 프로젝트를 했음. COBOL의 오명을 이해하지 못함

- COBOL은 멋진 언어로 보임. 코드가 잘 정리되어 있음

- 40년 후, 전 세계의 경영진들이 "COBOL Minecraft 서버는 사라졌다"라고 말할 것임

- COBOL Minecraft 서버가 레드스톤을 지원하는지 알 수 없음. README에 언급이 없고, 코드에서는 레드스톤 횃불만 언급됨
