Surrealism -- SurrealDB용 WASM 확장
SurrealDB 3의 새로운 기능입니다. Rust로 사용자 정의 함수를 작성하고 WebAssembly(WASM)로 컴파일한 후 SurrealQL에서 호출 가능한 네이티브 데이터베이스 모듈로 배포합니다.
전제 조건
- Rust 툴체인(stable)과
wasm32-unknown-unknown타겟 - SurrealDB CLI v3.1.4+ (
surreal module하위 명령어가 포함된surreal바이너리) - SurrealQL의
DEFINE MODULE및DEFINE BUCKET구문에 대한 이해
개발 워크플로우
1. 주석 처리 -- surrealism.toml + Rust 함수에 #[surrealism] 추가
2. 컴파일 -- surreal module compile (.wasm 바이너리 생성)
3. 등록 -- SurrealQL에서 DEFINE BUCKET + DEFINE MODULE 실행
빠른 시작
# 새 Surrealism 프로젝트 생성
cargo new --lib my_extension
cd my_extension
# WASM 타겟 추가
rustup target add wasm32-unknown-unknown
# surrealism.toml 생성 (필수 매니페스트)
cat > surrealism.toml << 'TOML'
[package]
name = "my_extension"
version = "0.1.0"
TOML
# 확장 프로그램 작성 (#[surrealism]으로 함수 주석 처리)
cat > src/lib.rs << 'RUST'
use surrealism::surrealism;
#[surrealism]
fn greet(name: String) -> String {
format!("Hello, {}!", name)
}
RUST
# SurrealDB CLI로 WASM 컴파일
surreal module compile
# SurrealDB에 등록
surreal sql --endpoint http://localhost:8000 --user root --pass root --ns test --db test
-- WASM 파일에 대한 접근 권한 부여
DEFINE BUCKET my_bucket;
-- 모듈 함수 등록
DEFINE MODULE my_extension FROM 'my_bucket:my_extension.wasm';
-- 쿼리에서 함수 사용
SELECT my_extension::greet('World');
사용 사례
- SurrealQL에서 호출 가능한 사용자 정의 스칼라 함수
- 테스트용 가짜/모의 데이터 생성
- 도메인 특화 로직 (언어 처리, 정량 금융, 사용자 정의 인코딩)
- SurrealDB 핵심에 포함되기에는 너무 특화된 Rust 크레이트 기능 활용
- 전체 텍스트 검색을 위한 사용자 정의 분석기
상태
Surrealism은 현재 활발히 개발 중이며 아직 안정화되지 않았습니다. API는 SurrealDB 3.x 릴리스 간에 변경될 수 있습니다. 피드백은 surrealdb/surrealdb 저장소의 GitHub 이슈/PR을 통해 제출해 주세요.
전체 문서
전체 안내는 메인 스킬의 규칙 파일을 참조하세요:
- rules/surrealism.md -- 프로젝트 설정, Rust 함수 시그니처, WASM 컴파일, DEFINE MODULE/BUCKET 구문, 배포, 테스트 및 모범 사례
- SurrealDB Extensions Docs -- 공식 문서
- CLI module command --
surreal module명령어 참조