23시간 턴제 Freeciv, Fly.io로 친구들과 즐기세요!
Fly.io를 활용하여 Freeciv 3.2.3 멀티플레이어 서버를 구축, 장기전(23시간 턴) 지원
이메일 알림, 실시간 랭킹 페이지, AI 생성 신문 등 게임 경험을 향상시키는 기능 제공
FIFO 파이프를 통한 서버 통신, Docker를 활용한 컨테이너 환경 구성
OpenAI API를 활용한 AI 기반 게임 내 신문 생성 기능으로 게임 몰입도(Immersion)를 높임
Fly.io 기반 서버 아키텍처
본 서버는 Fly.io 컨테이너(Container) 환경에서 실행되며, entrypoint.sh를 통해 시작된다. 주요 구성 요소로는 Freeciv 서버(Freeciv Server), HTTP 서버(HTTP Server), FIFO 파이프(FIFO Pipe), 자동 저장 기능(Auto-saver), 턴 알림 기능(Turn Reminder) 등이 있다. 특히, 지속적인 볼륨(Persistent Volume)을 사용하여 게임 데이터를 저장하고, SQLite 데이터베이스(SQLite Database)를 통해 플레이어 인증 정보를 관리한다.
AI 기반 게임 내 신문 생성
이 프로젝트는 OpenAI API를 활용하여 각 턴마다 AI가 생성한 신문(AI-generated Newspaper)을 제공한다. generate_gazette.sh 스크립트는 OpenAI를 호출하여 시대에 맞는 기사를 생성하고, 이를 게임 내에서 확인할 수 있도록 한다. 이는 장기전의 지루함을 덜고, 게임 몰입도(Immersion)를 높이는 효과적인 방법으로 평가받는다.
FIFO 파이프를 이용한 서버 통신
서버는 FIFO 파이프(/tmp/server-input)를 통해 외부 스크립트로부터 명령을 받는다. 스크립트는 이 파이프에 명령을 기록하여 Freeciv 서버(Freeciv Server)를 제어하며, 게임 상태를 변경하거나 정보를 요청할 수 있다. 이러한 방식은 서버와 외부 스크립트 간의 비동기 통신(Asynchronous Communication)을 가능하게 하며, 서버의 안정성을 유지하는 데 기여한다.
이메일 알림 및 상태 페이지
서버는 이메일 알림(Email Notifications) 기능을 통해 턴 시작, 마감 시간 등을 플레이어에게 알린다. turn_notify.sh 스크립트는 턴이 변경될 때마다 HTML 형식의 이메일을 발송하며, 랭킹, 신문 기사, 마감 시간을 포함한다. 또한, 실시간 상태 페이지(Live Status Page)를 제공하여 게임의 진행 상황을 시각적으로 확인할 수 있도록 지원한다.