Space Project: Rust와 Bevy로 만든 자동 실행 우주 경제 시뮬레이터
Space Project: Rust와 Bevy로 만든 자동 실행 우주 경제 시뮬레이터
개요
Space Project는 에이전트 기반 경제 시뮬레이션으로, 우주에서 스스로 돌아가는 "수족관"처럼 동작합니다. 기존 게임과 달리 스크립트된 스토리라인이나 플레이어 목표가 없으며, 대신 사용자가 관찰자 또는 신 모드 관리자 역할을 하여 복잡한 태양계 경제가 자율적으로 진화하는 모습을 3D 클라이언트에서 볼 수 있습니다.
핵심 시뮬레이션 메커니즘
시뮬레이션은 시장이 스스로 가격을 찾고, 인구가 행복도와 자원 가용성에 따라 이동하는 살아있는 경제를 만듭니다.
에이전트 기반 선박 AI
선박은 Goal‑Oriented Action Planning (GOAP) 시스템을 활용하는 자율 에이전트입니다. 전방 플래너는 무역, 운송, 급유, 개조, 휴식 등 다양한 목표를 추상적인 세계 상태와 비교해 점수를 매기고, 가장 비용 효율적인 계획을 실행하기 위한 행동 트리를 구성합니다. 선박은 더 수익성이 높거나 긴급한 옵션이 나타나면 비행 중에도 재계획이 가능합니다.
동적 경제 모델
가격은 고정되지 않습니다. 시뮬레이션은 각 정거장마다 주문서 기반 마켓을 사용해 13가지 서로 다른 상품의 가격을 부족‑긴급성 배율이 적용된 커버리지 모델로 결정합니다. 선박은 실제로 이 시장들 사이에 물자를 이동시켜 거래 활동을 통해 가격 변동에 직접 영향을 미칩니다.
시설 및 생산
시설은 제련, 정제, 제조, 농업, 채굴 등 생산 레시피를 실행합니다. 이러한 시설은 툴을 사용한 마모와 자체 수리 주기를 가지며, 레벨 1에서 10까지 상승할 수 있고, 지속적인 파산 상태가 되면 포기될 수 있습니다.
인구와 팩션 역학
- 인구: 음식과 연료를 소비하면서 노동을 생산합니다. 스트레스나 부족으로 인해 정서가 붕괴되면, 인구는 더 행복한 시스템으로 물리적으로 이동합니다.
- 팩션: 회원 시설로부터 세금을 징수하고, 지속적인 부족을 해소하기 위해 보조금 계약을 게시함으로써 경제를 관리합니다. 또한 수요가 충족되지 않은 곳에 새로운 시설 건설을 지원합니다.
- 건설: 지속적인 부족이 발생하면 건설 현장이 생성됩니다. 이 현장은 전달된 화물을 축적해 100% 완성에 도달하면 영구적인 시설로 구현됩니다.
기술 아키텍처
프로젝트는 Rust로 작성되었으며, 시뮬레이션이 결정론적이고 테스트 가능하도록 분리된 아키텍처를 사용합니다.
크레이트 워크스페이스
프로젝트는 다섯 개의 독립적인 크레이트로 나뉩니다:
sim_core: 순수 시뮬레이션 로직(hecs ECS, GOAP 플래너, 경제)을 포함합니다. IO가 전혀 없으며tokio나sqlx같은 async 라이브러리를 가져오지 않습니다.sim_db:sqlx를 이용한 SQLite 영속성을 담당하며, ECS 로더와 마이그레이션을 포함합니다.sim_server: 헤드리스 모드를 위한 HTTP/WebSocket 핸들러를 제공하는 라이브러리 크레이트입니다.sim_protocol: 헤드리스 및 CI 사용을 위한 WebSocket 와이어 타입을 정의합니다.client_bevy: Bevy 0.18과 egui를 사용하는 메인 바이너리입니다.sim_core를 Bevy 리소스로 임베드해 렌더러가 시뮬레이션의 ECS 월드를 직접 질의할 수 있게 하며, 별도의 마샬링이 필요 없습니다.
성능 및 확장성
현재 시뮬레이션은 약 485개의 실시간 에이전트(선박, 시설, 인구, 팩션 포함)를 지원하며, p50 틱 시간은 10–20 ms이며 125 ms 예산 내에서 동작합니다. 아키텍처는 100,000 에이전트 규모로 확장될 수 있도록 설계되었습니다.
주요 기술 제약
안정성과 결정론을 유지하기 위해 개발자는 다음 세 가지 규칙을 적용했습니다:
sim_core는 async나 IO 의존성이 없는 순수 로직만 포함합니다.hecsECS가 틱 동안 단일 진실 소스로 작동하며, 틱 루프가 독점적인 가변 접근을 보유해 에이전트별 락을 방지합니다.- 엔티티 간 효과는
SimCommand버퍼를 통해 처리되어, 한 단계에서는 월드 상태를 읽고 명령을 기록하고, 다음 단계에서 이를 적용해 중간 단계 쓰기 충돌을 방지합니다.
기술 스택
| Component | Technology |
|---|---|
| Language | Rust (Edition 2021) |
| Renderer | Bevy 0.18 (행성 및 성운용 커스텀 WGSL 셰이더) |
| Simulation ECS | hecs |
| UI | egui (via bevy_egui) |
| Particles | bevy_hanabi |
| Persistence | SQLite via sqlx |
| Networking | Axum and Tokio (for headless mode) |
개발 인사이트
이 프로젝트는 저자와 LLM Claude의 협업으로 개발되었습니다. 이 접근 방식은 현대 소프트웨어 개발에서 LLM의 역할에 대한 커뮤니티 토론을 촉발했습니다:
"rust의 엄격함이 LLM이 코드를 정확히 작성하도록 도와주는 것 같고, ECS 아키텍처는 (그들이 한 번에 몇 개의 시스템과 컴포넌트만 컨텍스트에 두면 되기 때문에) 어떻게 동작하는지 추론하기 쉽게 만든다."
일부 사용자는 LLM이 생성한 코드를 공부하는 가치에 회의적이었지만, 다른 이들은 이러한 도구가 개인 개발자가 otherwise 시작하기에 너무 시간이 많이 드는 복잡한 시뮬레이션을 구축할 수 있게 해준다고 언급했습니다.
요약
Space Project는 Rust와 Bevy로 만든 에이전트 기반 경제 시뮬레이션으로, 자율 선박, 동적 시장, 그리고 플레이어 목표가 없는 복잡한 태양계 경제를 특징으로 합니다.
제목
Space Project: Rust와 Bevy로 만든 자동 실행 우주 경제 시뮬레이터