Ergoswarm - 실시간 비트코인 가격 기반 진화형 생태계 시뮬레이션

실시간 비트코인 가격이 디지털 생태계의 진화를 결정하는 곳

https://ergowarm.zendoc.uk



이름은 거창한데 rust WASM + sveltekit PWA 토이 프로젝트 한번 만들어 봤음


기술 스택 하이라이트


* 코어 엔진: Rust (고성능, 메모리 안전성)

* 웹 실행: WASM

* 물리 엔진: Rapier2D

* 렌더링: Macroquad

* 프론트엔드/PWA: SvelteKit

* 데이터 백엔드: Axum (Rust), Redis

* 데이터 소스: 실시간 Binance API (BTC)



게임 + 코인 + WASM + 미니PC = 내가 만든 생태계 시뮬

요즘 심심해서 게임 하나 만들고 있었는데, 생각보다 너무 깊게 들어가버림…

  • 게임엔진은 Rust macroquad 물리엔진은 rapier2d. cargo build --target wasm32-unknown-unknown 하면 .wasm 하나 뚝딱 나옴.

  • 프론트는 SvelteKit PWA 웹 전체를 canvas로 렌더링함. 이게 wasm이랑 붙어서 게임 화면이 돌아감.

  • BTC 가격 데이터는 백엔드에서 1분마다 1초봉 60개씩 받아옴 프론트가 1분마다 백엔드에 요청 → indexedDB에 저장.

  • 백엔드는 내가 만든 미니PC 2대로 구성

    • 1번 WAS 서버: cloudflared tunnel → nginx reverse proxy → rust WAS 여기서 binance API로 BTC 가격 받아옴.

    • 2번 DATA 서버: redis + postgreSQL redis에 1초봉 60개 캐싱 → redis streams로 프론트에 순차 전송.

  • 프론트에서 indexedDB에 저장된 가격을 wasm이 읽어서 캔들차트 그림 1초봉이 상승/보합/하락이면 생태계에 먹이 다르게 줌. 예: 상승이면 고기, 보합이면 풀, 하락이면 돌멩이… 이런 식.


문제는 wasm ↔ js 데이터 주고받기

처음엔 별거 아니겠지 했는데… wasm이 indexedDB에서 데이터 읽고 js랑 주고받는 부분에서 개고생함. 정신이 피폐해져서 그냥 여기까지만 하고 나중에 다듬기로 함.


결론

기술적으로는 다 돌아가는데, 디테일하게 시뮬레이션 다듬으려면 wasm ↔ js 통신 구조를 더 깔끔하게 짜야 할 듯. 근데 지금은 너무 지쳐서… 나중에 재미 붙으면 다시 손대볼 예정.