SpacetimeDB - 멀티플레이어 게임/앱을 구축하기 위한 DB
(spacetimedb.com)- SpacetimeDB는 데이터베이스와 서버 기능을 결합한 시스템
- 전통적인 웹 또는 게임 서버를 별도로 두는 대신, 클라이언트가 직접 데이터베이스에 연결하여 애플리케이션 로직을 실행
- Rust로 작성된 "모듈" 형태의 저장 프로시저를 통해 앱 로직을 데이터베이스에 직접 업로드 가능
- 단일 Rust 바이너리로 전체 애플리케이션을 배포 가능하며, DevOps, 컨테이너, 서버, 마이크로서비스 등이 불필요함
주요 특징
- 스마트 컨트랙트와 유사한 개념이지만 블록체인과는 무관함
- 기존 스마트 컨트랙트 시스템보다 훨씬 빠름
- MMORPG 게임 BitCraft Online의 백엔드는 SpacetimeDB 하나로 구성됨
- 게임 내 모든 요소가 데이터베이스에서 실시간으로 처리되고 클라이언트에 동기화됨
- 실시간 애플리케이션에 최적화되어 있고, 지연 시간 최소화를 목표로 설계됨
- 애플리케이션 상태는 메모리에 유지되며, 복구를 위해 WAL(Write-Ahead Log)에 기록됨
설치 방법
macOS / Linux 설치
- 다음 명령어로 설치함
curl -sSf https://install.spacetimedb.com | sh
Windows 설치
- PowerShell에서 아래 명령 실행
iwr https://windows.spacetimedb.com -useb | iex
Docker로 실행
- Docker를 사용하는 경우
docker run --rm --pull always -p 3000:3000 clockworklabs/spacetime start
시작하기 위한 4단계
-
spacetime
CLI 툴 설치 -
spacetime start
명령어로 단일 노드 실행 - 지원 언어 중 하나로 모듈 작성 및 업로드
- 클라이언트 라이브러리로 데이터베이스에 연결
언어 지원
서버사이드 모듈
- Rust: https://spacetimedb.com/docs/modules/rust/quickstart
- C#: https://spacetimedb.com/docs/modules/c-sharp/quickstart
클라이언트 라이브러리
- Rust: https://spacetimedb.com/docs/sdks/rust/quickstart
- C#: https://spacetimedb.com/docs/sdks/c-sharp/quickstart
- TypeScript: https://spacetimedb.com/docs/sdks/typescript/quickstart
라이선스 정보
- BSL 1.1 라이선스를 따름
- 일정 기간 후 AGPL v3.0 + 링크 예외로 전환됨
- SpacetimeDB와 연동된 애플리케이션의 소스 공개를 요구하지 않음
- 커뮤니티에 기여가 환원되도록 설계된 자유 소프트웨어 라이선스 방식
공식 문서
- 전체 문서, 가이드, 예제: https://spacetimedb.com/docs
1년 반 전에 소개했었는데, 계속 잘 업데이트 되고 있네요. a16z 랑 슈퍼셀도 투자했군요.
Hacker News 의견
-
SpacetimeDB는 "우주적 사고 재구성"이라는 기술 장르에 속함. 이는 구조적 재배열을 통해 성능을 크게 향상시킬 수 있는 가능성을 가짐
- 이러한 기술은 개발자들이 사고를 재정렬해야 하며, 기술이 완전히 수용되지 않아서 문제인지, 아니면 기술의 약속이 특정 사용 사례에 맞지 않는지 구분하기 어려움
- 이와 유사한 기술로 Elixir와 Node가 있으며, 희귀한 보장을 얻기 위해 스택을 채택하고 새로운 한계를 수용해야 함
- 이러한 기술은 명확한 비전을 가진 선구자들이 오픈 소스에서 그 강점을 보여줄 때 성공 가능성이 높음
- Clockwork Labs가 그들의 예제 게임을 성공적으로 제공하기를 희망함
-
이전 게시물에서의 최고의 댓글:
- SpacetimeDB는 일반적인 데이터베이스로, 낮은 대기 시간과 WASM 저장 프로시저를 지원함
- 멀티플레이어 게임의 지속적인 세계를 위한 견고한 빌딩 블록으로 보임
- 지연을 가리는 네트코드를 직접 구현해야 함
-
SpacetimeDB는 BitCraft라는 대규모 MMORPG를 지원하기 위해 개발됨
- 게임의 성능 요구 사항에 맞춰 설계됨
- 매우 낮은 대기 시간과 높은 처리량을 자랑함
- 새로운 MMO를 구축하려면 기존 시장의 접근 방식을 살펴보는 것이 좋음
- World of Warcraft의 예를 들어, 클라이언트의 신뢰성과 서버의 이벤트 조정이 확장성 해킹의 핵심임
-
이 기술을 사용하여 게임 서버를 작성하는 방법을 이해하기 어려움
- 물리 시뮬레이션, 경로 찾기, 애니메이션 등을 서버에서 시뮬레이션해야 할 때 어떻게 통합할지 고민됨
- 일반적으로 Unreal/Unity 헤드리스 모드를 사용하지만 SpacetimeDB를 사용하면 게임 엔진을 버리고 모든 것을 처음부터 다시 구현해야 함
-
BitCraft가 귀엽게 보임
- "maincloud"라는 가격 관련 용어를 보고 개인적인 편견이 생겼지만, 이는 단순히 호스팅 크레딧을 위한 명명임
-
YouTube가 SpacetimeDB를 추천하지만 비디오 게임을 만든 적이 없음
- 게임 개발자들이 이 기술이 실제로 얼마나 유용한지에 대해 의견을 주길 바람
- 마케팅이 얼마나 잘된 것인지 판단하기 어려움
-
이 프로젝트는 BSL로 커버되며, 다소 부담스러운 시간 제한이 있음
- 서비스당 하나의 인스턴스만 허용됨
-
관계형 데이터베이스 스키마와 앱에서 데이터를 처리하는 방식을 혼동하지 말아야 함
- 명시적인 제어가 필요하며, 주석 마법을 피해야 함
-
싱글 플레이어 게임에서 로컬로 데이터베이스를 실행하는 것이 의미가 있는지 궁금함
- 모든 게임 상태를 로컬 데이터베이스를 통해 실행하는 것이 이점이 있는지 의문임
- 견고한 상태 관리자가 별도의 소프트웨어로 존재한다면 그래픽 엔진만 작성하면 될 것 같음
-
메모리 내 데이터베이스로 보이며, 도메인 로직을 호스팅하기 위한 WASM 런타임을 가짐
- 확장성과 클러스터링을 어떻게 처리하는지 명확하지 않음
- 데이터 분할을 직접 해야 하는 것으로 보임
- 복제와 일관성이 분산 데이터베이스에서 어려운 부분임
- 메모리와 디스크 기반 테이블 모두 사용 가능함
- 일반적인 데이터베이스는 이미 이를 수행하며, 저장 프로시저에 도메인 로직을 작성하는 것은 번거로움
- sqlite를 메모리 테이블로 이진 파일에 포함시키는 것이 현재로서는 동등함
- 클라이언트에게 테이블 업데이트를 게시하는 코드를 작성해야 함
- 클러스터링에 대한 문서가 있지만 구체적이지 않음