"Bun이 Node보다 빠르다"는 글들 보고 Lambda로 옮겼는데 콜드 스타트가 오히려 느려졌습니다. 운영 배포 전에 확인하고 싶습니다.
환경
- AWS Lambda, ARM64, 메모리 1024MB
- Node 22: 콜드 920ms, 웜 22ms
- Bun 2.0: 콜드 1,420ms, 웜 18ms
- Prisma 5.22(공식 Bun 지원 버전)
패키지 크기는 Bun이 더 작은데, Lambda init 단계에서 1초 이상 걸립니다. Prisma query engine 초기화가 원인 같은데, 같은 경험 있으신가요?
댓글 3
흔한 함정입니다. "Bun이 빠르다 = HTTP 처리량이 빠르다"지 콜드 스타트가 빠르다는 보장은 없습니다. 특히 Lambda + Prisma 조합은 다음 두 가지 때문에 Bun이 손해를 봅니다.
원인 1 — Prisma query engine binary 로드
Prisma는 native binary(libquery_engine)를 로드합니다. Bun은 dlopen 경로가 Node와 미세하게 다르고, 첫 호출 시 binary signature 검증을 더 엄격히 합니다. 실측으로 Node 220ms vs Bun 480ms 차이 봤습니다.
원인 2 — Bun runtime 자체 init
Bun runtime이 Node 대비 작긴 하지만, Lambda init context에서는 V8 snapshot 이점이 큽니다. AWS는 Node에 SnapStart 비슷한 최적화를 적용했지만 Bun에는 없습니다.
해결 — accelerate 사용 또는 connection pool 분리
저는 결국 Lambda 워크로드는 Node + SnapStart로 남기고, 컨테이너 워크로드(Fargate, EC2)만 Bun으로 옮겼습니다. Lambda + Bun은 아직 production-ready가 아닙니다.
Drizzle로 바꾸면 정말 콜드 스타트가 줄어듭니다. 저희 팀은 같은 워크로드에서 Prisma(1.2s) → Drizzle(320ms)로 떨어졌어요. 마이그레이션 도구는 prisma-migrate를 그대로 두고 런타임만 Drizzle로 쓰는 방법도 있습니다.