Prisma가 백엔드 DB와 어떻게 통신하는가?
Prisma는 TypeScript/JavaScript 기반 ORM.
코드에서 SQL 없이도 DB와 상호작용할 수 있도록 중간 추상 계층을 제공.
Prisma ↔ DB 통신 구조
- @prisma/client: 코드에서 사용하는 Prisma 클라이언트 라이브러리.
- Prisma Query Engine: Rust로 작성된 네이티브 바이너리. 실제 DB와 통신하는 주체.
통신 흐름 요약
- 코드에서
prisma.user.findMany()
등 Prisma 명령 실행 - @prisma/client는 명령을 JSON-RPC로 감싸 Prisma Query Engine에 전달
- Node.js는 이 엔진을 child process로 실행하거나 IPC로 연결
- Query Engine은 SQL로 변환 후 DB(PostgreSQL 등)에 TCP로 전송
- DB가 응답한 결과를 Query Engine이 JSON으로 파싱
- @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 Engine | SQL 생성 및 DB와 TCP 통신 |
DB (PostgreSQL 등) | SQL 수신 및 응답 |
결론
- Prisma는 단순 Node.js 내부 코드가 아님
- 실제 DB 통신은 Rust 기반 네이티브 실행 파일이 담당
- Node.js는 외부 프로세스로 이 바이너리를 호출해 IPC로 명령 전달
- 하이브리드 구조이기 때문에 속도와 안정성을 동시에 확보
'web' 카테고리의 다른 글
Javascript - 자바스크립트의 모듈 시스템 (0) | 2025.05.11 |
---|---|
Node.js - Node.js를 직접 만들어보자 (1) | 2025.05.07 |
Web Assembly - WASM, 웹 어셈블리 (1) | 2025.05.02 |
Typescript - 타입스크립트 자주 발생하는 에러 (0) | 2025.05.02 |
Next.js - caching 메커니즘 (0) | 2025.04.27 |