web

Prisma - Node.js ORM Prisma 동작 원리

제이훈 : 세상 모든 지식의 탐구자 2025. 5. 2. 18:23

Prisma가 백엔드 DB와 어떻게 통신하는가?

Prisma는 TypeScript/JavaScript 기반 ORM.
코드에서 SQL 없이도 DB와 상호작용할 수 있도록 중간 추상 계층을 제공.

Prisma ↔ DB 통신 구조

  • @prisma/client: 코드에서 사용하는 Prisma 클라이언트 라이브러리.
  • Prisma Query Engine: Rust로 작성된 네이티브 바이너리. 실제 DB와 통신하는 주체.

통신 흐름 요약

  1. 코드에서 prisma.user.findMany() 등 Prisma 명령 실행
  2. @prisma/client는 명령을 JSON-RPC로 감싸 Prisma Query Engine에 전달
  3. Node.js는 이 엔진을 child process로 실행하거나 IPC로 연결
  4. Query Engine은 SQL로 변환 후 DB(PostgreSQL 등)에 TCP로 전송
  5. DB가 응답한 결과를 Query Engine이 JSON으로 파싱
  6. @prisma/client가 이를 코드로 반환

실제 통신 수준 (PostgreSQL 기준)

Prisma Query Engine → PostgreSQL 서버로 직접 TCP(5432 포트) 전송
예: SELECT * FROM "User";

구조 도식

[Next.js 코드] → [@prisma/client] → [Query Engine (Rust 바이너리)] → [DB]

Query Engine은 어떤 파일인가?

  • 운영체제에서 실행되는 바이너리 실행 파일 (예: .exe, 무확장)
  • Rust로 작성되어 안전하고 빠름
  • Next.js 프로젝트 내 node_modules/.prisma/client 경로에 위치

예시: 플랫폼별 Query Engine 경로

  • 🖥 macOS M1: query-engine-darwin-arm64
  • 🐧 Linux: query-engine-linux
  • 🪟 Windows: query-engine-windows.exe

세부 실행 구조

구성 요소역할
@prisma/client명령을 생성, JSON으로 변환
Query EngineSQL 생성 및 DB와 TCP 통신
DB (PostgreSQL 등)SQL 수신 및 응답

결론

  • Prisma는 단순 Node.js 내부 코드가 아님
  • 실제 DB 통신은 Rust 기반 네이티브 실행 파일이 담당
  • Node.js는 외부 프로세스로 이 바이너리를 호출해 IPC로 명령 전달
  • 하이브리드 구조이기 때문에 속도와 안정성을 동시에 확보