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
이 에러는 OpenSSL 의존성 + Alpine 베이스 이미지 조합에서 자주 발생합니다. Prisma는 query engine binary를 fork로 spawn 하는데, Alpine의 musl libc 환경에서 file descriptor 한계 도달 시 ENOENT처럼 보이는 에러가 납니다.
해결 — 3가지 조합
1) Dockerfile에 OpenSSL 명시 설치
2) Prisma binary target 명시
3) bunfig.toml 안정화
4) Bun runtime flag
대안 — Prisma Accelerate
query engine을 외부로 빼는 게 가장 안정적입니다. binary spawn 자체가 사라집니다. 비용 추가되지만 운영 안정성 압승.
저희는 위 1~3 모두 적용 후에도 가끔 발생해서 결국 Accelerate로 갔습니다. 발생 빈도가 낮아도 production에서 1번이라도 발생하면 부담이라.
Alpine 베이스를 Debian slim으로 바꾸는 것도 옵션입니다. 컨테이너 크기 +40MB 늘긴 하지만 musl 관련 이슈가 모두 사라집니다.
oven/bun:2.0-debian이미지 있어요.