본문 바로가기
Q&A2026년 5월 29일1분 읽기

Bun 2.0 + Prisma 5.22 — bunfig.toml에 무엇을 넣어야 안정적인가요

강
강도현
조회 393댓글 2

Bun 2.0 + Prisma 5.22로 Hono API를 production 운영 중인데, 가끔 (하루 1~3회) Prisma query engine spawn 실패가 발생합니다. 로그:

PrismaClientInitializationError: Spawn failed (ENOENT)
  at /app/node_modules/.prisma/client/runtime/library.js:123:45

매 시작 시는 잘 동작하다가 며칠 후 갑자기 발생. 인스턴스 재시작하면 정상 복구. bunfig.toml은 거의 비워두고 있는데, 안정성 위해 어떤 옵션을 넣는 게 좋을지 추천 부탁드립니다.

환경: Bun 2.0.4, Prisma 5.22, Linux Alpine container

댓글 2

김김영삼5개월 전

이 에러는 OpenSSL 의존성 + Alpine 베이스 이미지 조합에서 자주 발생합니다. Prisma는 query engine binary를 fork로 spawn 하는데, Alpine의 musl libc 환경에서 file descriptor 한계 도달 시 ENOENT처럼 보이는 에러가 납니다.


해결 — 3가지 조합


1) Dockerfile에 OpenSSL 명시 설치


# Dockerfile
FROM oven/bun:2.0-alpine
RUN apk add --no-cache openssl libc6-compat
WORKDIR /app
COPY . .
RUN bun install
RUN bunx prisma generate
CMD ["bun", "run", "start"]

2) Prisma binary target 명시


// prisma/schema.prisma
generator client {
provider = "prisma-client-js"
binaryTargets = ["native", "linux-musl-openssl-3.0.x"]
}

3) bunfig.toml 안정화


[install]
exact = true # lockfile 엄격, 부수적 업그레이드 차단

[run]
shell = "system" # bun shell 대신 system shell, fork 호환성 향상
silent = false

[install.cache]
disable = false
disableManifest = false

4) Bun runtime flag


CMD ["bun", "--smol", "run", "start"]
# --smol: 메모리 사용량 줄임, file descriptor 풀 완화

대안 — Prisma Accelerate


query engine을 외부로 빼는 게 가장 안정적입니다. binary spawn 자체가 사라집니다. 비용 추가되지만 운영 안정성 압승.


npm install @prisma/extension-accelerate
const prisma = new PrismaClient().$extends(withAccelerate())

저희는 위 1~3 모두 적용 후에도 가끔 발생해서 결국 Accelerate로 갔습니다. 발생 빈도가 낮아도 production에서 1번이라도 발생하면 부담이라.

서서버지기영호5개월 전

Alpine 베이스를 Debian slim으로 바꾸는 것도 옵션입니다. 컨테이너 크기 +40MB 늘긴 하지만 musl 관련 이슈가 모두 사라집니다. oven/bun:2.0-debian 이미지 있어요.

Ctrl+Enter로 등록