vais-server

vais-server는 Vais 언어로 작성된 Express/Axum 스타일의 백엔드 API 프레임워크입니다. FFI 없이 순수 Vais 코드만으로 구현되어 있으며, VAIS 풀스택 생태계의 HTTP 계층을 담당합니다.

vais-web  (프론트엔드 + SSR)
    ↕  HTTP / WebSocket
vais-server  (백엔드 API 프레임워크)   ← 이 패키지
    ↕  네이티브 쿼리 API
vaisdb  (벡터 + 그래프 + 관계형 + 전문검색 데이터베이스)

특징

Express/Axum 스타일 API

라우트 등록 방식은 Express.js를 따릅니다. 핸들러는 이름 문자열로 등록되며 런타임이 심볼릭 디스패치로 실제 함수를 연결합니다.

app.get("/users",      "handle_list_users")
app.post("/users",     "handle_create_user")
app.put("/users/:id",  "handle_update_user")
app.delete("/users/:id", "handle_delete_user")

라우트 그룹은 Axum의 Router::nest에 대응하는 app.group("/prefix") API로 구성합니다.

api := mut app.group("/api/v1")
api.get("/posts",     "handle_list_posts")
api.post("/posts",    "handle_create_post")

최소 코어 — App + Router + Middleware

세 가지 기본 요소로 모든 동작을 조합합니다.

구성 요소역할
App라우트와 미들웨어를 등록하고 서버를 시작
RouterRadixTree 기반 O(log n) URL 매칭
Pipelinebefore/after 대칭 미들웨어 파이프라인

내장 인증 (Built-in Auth)

별도 라이브러리 없이 바로 사용할 수 있는 인증 모듈을 제공합니다.

  • JWT — HS256 서명, TokenPair(access + refresh), 클레임 검증
  • OAuth 2.0 — 인증 코드 플로우, CSRF state 관리
  • Session — 서버 사이드 세션 스토어 (TTL 지원)
  • Password — bcrypt 스타일 해시 및 검증

멀티 프로토콜

단일 서버 인스턴스에서 여러 프로토콜을 동시에 처리합니다.

  • REST — HTTP/1.1 기반 CRUD API, 페이지네이션 헬퍼
  • WebSocket — RFC 6455, Room 기반 브로드캐스트
  • GraphQL — 스키마 인트로스펙션, 리졸버 디스패치
  • gRPC — 서비스 디스크립터, 프레이밍
  • OpenAPI — 3.0 문서 자동 생성

vaisdb 네이티브 통합

ORM 변환 계층 없이 QueryBuilder가 vaisdb 와이어 프로토콜로 직접 쿼리를 전송합니다. SQL, 벡터 검색, 그래프 탐색, 전문 검색을 하나의 유창한 API로 처리합니다.

sql := QueryBuilder.new()
    .select("documents")
    .column("id")
    .column("title")
    .where_clause("published = 1")
    .order_by("created_at", SortDirection.Desc)
    .limit(20)
    .build()

Pure Vais — FFI 없음

프레임워크 자체는 FFI 호출을 전혀 사용하지 않습니다. 외부 런타임 함수(current_time_ms, str_len 등)는 X F 선언으로 vaisc 링커가 해석합니다. 모든 의존성은 Vais 표준 라이브러리(std/) 에서 가져옵니다.

임포트사용처
std/async_httpHTTP/1.1 파싱
std/http_serverTCP 연결 수락 루프
std/websocketRFC 6455 프레이밍
std/vec동적 배열
std/optionOptional 값

프로젝트 구조

vais-server/
├── src/
│   ├── main.vais          # 진입점
│   ├── core/              # App, Config, Context, Error
│   ├── http/              # HttpMethod, HttpStatus, Request, Response
│   ├── router/            # RadixTree, Router, RouteGroup
│   ├── middleware/        # Pipeline, CORS, Logger, RateLimit, ...
│   ├── auth/              # JWT, OAuth2, Session, Guard, Password
│   ├── ws/                # WebSocket 메시지, 핸들러, Room
│   ├── db/                # DbConnection, Pool, QueryBuilder, Migrator
│   ├── api/               # REST, GraphQL, gRPC, OpenAPI
│   └── util/              # JSON, Validation, Env
├── tests/                 # 모듈별 단위 테스트 + 통합 테스트
└── examples/              # hello.vais, rest_api.vais, chat.vais, fullstack.vais

빌드 및 실행

# 빌드
vaisc build src/main.vais -o vais-server

# 실행
./vais-server

# 테스트 전체 실행
vaisc test tests/

# 특정 테스트 파일 실행
vaisc test tests/router/test_router.vais

다음 단계