본문으로 바로가기
리옵트 핸드북
리옵트 핸드북
Prisma Production Guardrails

기반 설계

Ch1. 환경 분리 전략Ch2. 토폴로지와 환경 구성Ch3. Prisma Postgres 활용

마이그레이션

Ch4. 마이그레이션 전략Ch5. 마이그레이션 파이프라인Ch6. 마이그레이션 실패 대응Ch7. 롤백 전략

운영 안정성

Ch8. 백업 및 DR 전략Ch9. 관측 전략Ch10. 운영 트러블슈팅Ch11. 운영 정책과 거버넌스Ch12. Prisma MCP 활용

부록

부록 A. 런북 템플릿검증 리포트업데이트 내역
핸드북›Prisma Production Guardrails›Ch2. 토폴로지와 환경 구성

Ch2. 토폴로지와 환경 구성

Prisma + DB 프로덕션 토폴로지, 풀링, 다중 인스턴스 및 배포 구성

핵심 요약

  • 온라인 트래픽은 PgBouncer/Proxy 풀링 계층으로, 마이그레이션은 DIRECT_DATABASE_URL 직접 경로로 분리하고 읽기 부하는 리드 레플리카로 분산합니다.
  • 핫리로드 환경에서는 PrismaClient를 globalThis 싱글턴으로 관리해 연결 폭증을 막습니다.
  • 총 연결 수 = (API 인스턴스 × 풀 상한) + 워커 + 운영 도구로 산정하고 DB 최대 연결의 70~80%를 넘기지 않습니다.
  • Prisma ORM v7.4.0의 내장 LRU 쿼리 캐싱은 opt-out 자동 적용으로 SQL 재컴파일을 줄이며, Postgres cacheStrategy와는 별개입니다.
  • 서버리스 워크로드는 콜드 스타트로 연결 비용이 급증하므로 풀링 계층을 두고 장시간 트랜잭션은 함수 밖으로 분리합니다.

권장 토폴로지

  • 온라인 트래픽은 연결 풀 계층을 통해 접속
  • 마이그레이션은 DIRECT_DATABASE_URL로 직접 접속
  • 읽기 부하는 리드 레플리카로 분산(ORM 레벨 또는 리포팅 파이프라인)

Node 런타임에서 PrismaClient 수명 관리

// src/lib/prisma.ts
import { PrismaClient } from '@prisma/client'

const globalForPrisma = globalThis as unknown as {
  prisma?: PrismaClient
}

export const prisma =
  globalForPrisma.prisma ??
  new PrismaClient({
    log: ['warn', 'error'],
  })

if (process.env.NODE_ENV !== 'production') {
  globalForPrisma.prisma = prisma
}

핫리로드 환경에서는 싱글턴으로 관리해 연결이 폭증하는 일을 막습니다. 프로덕션에서는 프로세스 수에 맞춰 최대 연결 수를 미리 계산해 둡니다.

연결 수 산정 기본식

총 연결 수 = (API 인스턴스 수 x 인스턴스당 Prisma 풀 상한) + 배치/워커 연결 + 운영 도구 연결

DB 최대 연결의 70~80%를 초과하지 않도록 상한을 잡고, 나머지는 관리/장애 대응 여유로 남깁니다.

쿼리 캐싱 레이어 (v7.4.0+)

Prisma ORM v7.4.0부터 내장 LRU 쿼리 캐싱이 들어왔습니다. 같은 형태의 쿼리가 반복되면 SQL 재컴파일을 건너뛰어 이벤트 루프 경합을 줄입니다.

  • 별도 설정 없이 자동 적용 (opt-out 방식)
  • Prisma Postgres의 cacheStrategy(TTL/SWR)와는 별개 — ORM 레벨 컴파일 캐시
  • v7.3.0의 compilerBuild: "fast" | "small" 옵션과 함께 사용하면 컴파일러 성능 추가 조정 가능

서버리스/짧은 수명 워크로드 주의점

  • 콜드 스타트가 많으면 연결 생성/해제 비용이 급증
  • 풀링 계층 없이 직접 연결 시 DB 연결 한계에 빠르게 도달
  • 장시간 트랜잭션 로직은 서버리스 함수에서 분리

Prisma 스키마/환경 변수 운영 팁

# 앱 런타임
DATABASE_URL="postgresql://app_prod:***@pgbouncer:6432/service"

# 마이그레이션/관리 작업
DIRECT_DATABASE_URL="postgresql://migrate_prod:***@primary:5432/service"

prisma migrate deploy는 반드시 DIRECT_DATABASE_URL이 유효한 환경에서만 실행합니다.

배포 전 점검 항목

  • 인스턴스 스케일 아웃 시 DB 연결 상한 재계산
  • PgBouncer/Proxy 장애 시 우회 경로 문서화
  • 리드 레플리카 지연 알림 임계치 설정
  • 마이그레이션 전용 경로가 런타임 경로와 분리됨

관련 문서

Ch3. Prisma Postgres 활용

Prisma Postgres를 프로덕션에서 안정적으로 활용하기 위한 연결/캐시/백업/브랜치 운영 가이드

검증 리포트

Prisma Production Guardrails 핸드북의 구조 및 정합성 검증

Ch1. 환경 분리 전략

dev/staging/prod 분리, 권한 경계, Prisma datasource 설정 표준

Ch3. Prisma Postgres 활용

Prisma Postgres를 프로덕션에서 안정적으로 활용하기 위한 연결/캐시/백업/브랜치 운영 가이드

On this page

권장 토폴로지Node 런타임에서 PrismaClient 수명 관리연결 수 산정 기본식쿼리 캐싱 레이어 (v7.4.0+)서버리스/짧은 수명 워크로드 주의점Prisma 스키마/환경 변수 운영 팁배포 전 점검 항목