데이터데이터베이스
ORM
Prisma, Drizzle, Kysely, TypeORM, Sequelize, Knex를 지원합니다. 실제 워커 환경에서 CRUD와 트랜잭션을 확인했습니다.
각 ORM에 맞는 어댑터를 사용하면 됩니다. 아래 여섯 ORM은 실제 워커 환경에서 CRUD, 트랜잭션 커밋, 롤백까지 테스트했습니다.
import { PrismaClient } from "@prisma/client";
import { PrismaRunlot } from "@runlot/pg/prisma";
const prisma = new PrismaClient({ adapter: new PrismaRunlot(env.db) });
const posts = await prisma.post.findMany({ orderBy: { createdAt: "desc" }, take: 20 });
await prisma.$transaction(async (tx) => {
await tx.user.create({ data: { id: 3, name: "c" } });
});Prisma 7은 WASM 쿼리 컴파일러를 사용합니다. runlot deploy가 .wasm 파일을 별도 모듈로 매니페스트에 포함하므로 직접 설정할 일은 없습니다.
고유성 제약 조건 위반은 Prisma 규칙에 따라 P2002로 반환됩니다. 나머지 다섯 ORM에서는 SQLSTATE 23505를 받습니다.
번들 크기와 측정 결과
동일한 시나리오(테이블 생성 → CRUD → 트랜잭션 커밋 → 롤백)를 실제 워커 환경에서 측정했습니다.
| ORM | 전체 시나리오 | 번들 크기 | 필요한 설정 |
|---|---|---|---|
| Knex | 93 ms | 938 KB | nodejs_compat(자동) |
| Sequelize | 137 ms | 2.7 MB | nodejs_compat(자동) |
| Drizzle | 148 ms | 246 KB | 없음 |
| Kysely | 148 ms | 473 KB | 없음 |
| TypeORM | 174 ms | 2.8 MB | nodejs_compat(자동) |
| Prisma | 291 ms | 417 KB + wasm | WASM 모듈(자동) |
번들이 작을수록 콜드 스타트에 유리합니다. 아직 ORM을 정하지 않았다면 Drizzle 또는 Kysely부터 검토해 보세요.
마이그레이션
ORM의 마이그레이션 도구는 SQL을 생성하는 용도로만 사용하세요. 적용은 runlot pg migrate로 합니다. 자세한 내용은 마이그레이션을 참고하세요.