runlot
시작하기

프레임워크

Hono 와 정적 사이트는 그대로 돌아갑니다. Next.js 는 @runlot/next 어댑터가 빌드를 맡습니다.

runlot 의 배포 원시 단위는 하나입니다 — 워커 하나와 자산 디렉토리 하나. 프레임워크는 그 위에 얹힙니다.

Hono

어댑터가 필요 없습니다. Hono 앱은 그 자체로 fetch 핸들러라 export default app 이면 끝입니다.

src/index.ts
import { Hono } from "hono";
import { Pool } from "@runlot/pg";

const app = new Hono<{ Bindings: Env }>();

app.get("/posts", async (c) => {
  const user = await c.env.auth.user(c.req.raw);
  const db = new Pool({ db: c.env.db });
  const { rows } = await db.query(
    "select id, title from posts where owner = $1 limit 20",
    [user?.id ?? null],
  );
  return c.json(rows);
});

export default app;
runlot.json
{ "name": "my-app", "main": "src/index.ts", "assets": "public" }

정적 사이트

main 없이 assets 만 적으면 정적 사이트입니다.

runlot.json
{ "name": "my-site", "assets": "dist" }

빌드가 있는 정적 사이트(Vite·Astro·11ty 등)는 빌드한 뒤 그 출력 디렉토리를 assets 로 가리키면 됩니다.

npm run build
runlot deploy

정적 사이트는 별도 제품이 아니라 자산만 있는 배포입니다. 호스팅 상품을 둘로 나누지 않는 것은 의도입니다 — 한쪽에서 시작한 앱이 서버 코드를 한 줄 넣는 순간 다른 상품으로 옮겨 타야 하는 구조를 만들지 않습니다.

Next.js

npm create runlot@latest 에서 next 템플릿을 고르면 아래 구성이 그대로 나옵니다. 실물 런타임 위의 검증은 진행 중이라 첫 배포에서 막히는 것이 있으면 알려 주세요.

runlot.json"framework": "next" 를 적으면 runlot deploynext build 와 OpenNext 를 대신 돌립니다. mainassets 는 빌드가 만들므로 적지 않습니다. 프로젝트에는 next@runlot/next 가 설치돼 있어야 합니다.

runlot.json
{ "name": "my-app", "framework": "next" }

워커 코드에서는 요청 객체를 넘기지 않아도 되는 env 를 씁니다 — 어댑터가 요청을 대신 들고 있습니다.

app/page.tsx
import { env } from "@runlot/next";
import { Pool } from "@runlot/pg";

export default async function Page() {
  const user = await env.auth.user();
  const db = new Pool({ db: env.db });
  const { rows } = await db.query("select id, title from posts limit 20");
  return <main>{user?.email} · {rows.length}</main>;
}

env 는 요청 안에서만 값이 있습니다. 모듈 최상단이나 빌드 시점 정적 렌더에서 읽으면 조용히 비어 있는 대신 오류를 냅니다.

ISR 과 태그 재검증은 각각 env.storageenv.db 위에서 돕니다 — runlot add pg storage 로 둘을 켜 두면 됩니다. 켜지 않으면 정적 자산 캐시로 떨어지고 배포 로그가 한 줄 알려 줍니다. 별도 설정 파일(wrangler.toml)은 생기지 않습니다. .open-next/.runlot-next/ 는 빌드 산출물이라 템플릿의 .gitignore 에 이미 들어 있습니다.

next/image 의 이미지 최적화는 지원 계획에 없습니다 — 이미지는 그대로 서빙됩니다.

Remix · SvelteKit · Nuxt

서버 어댑터가 필요한 프레임워크는 아직 지원하지 않습니다. 클라이언트 빌드만 내보내는 구성(SPA + 별도 API 워커)이라면 정적 사이트 방식으로 지금도 올릴 수 있습니다.

이 페이지에서