next.js 15 + react 19 에 대한 authenticaiton 강의를 들으면서 prisma 를 사용할 일이 생겼다.
우선 db를 셋팅하기 전 Node.js 에서 prisma 를 사용할 때 개발환경에서는 PrismaClient 인스턴스를 전역으로 설정해서 성능을 최적화 시켜주어야 한다.
전역객체에 Prisma 인스턴스를 선언하는 이유
: 개발 환경에서는 코드가 변경될 때마다 서버가 재시작(hot-reload)되고, 이는 새로운 PrismaClient 인스턴스를 계속 생성하는 문제를 발생시킬 수 있다. 따라서 prisma 인스턴스를 전역 객체에 선언해서 node.js 의 전역범위에서 하나의 prisma 인스턴스를 재사용 할 수 있음.
var로 선언한 변수는 전역 스코프에서 전역객체 (global 또는 window)속성으로 추가된다. 따라서 global.prisma 와 같은 형태로 접근할 수 있음. 그러나 let, const 는 블록 스코프를 갖기 때문에 전역 객체에 속성으로 추가되지 않아 타입에러 발생
그렇지만 eslint 에서는 let 이나 const를 var 대신에 사용할 것을 권고하고 있는데,
import { PrismaClient } from "@prisma/client";
declare global {
// eslint-disable-next-line no-var
var prisma: PrismaClient | undefined;
}
export const db = globalThis.prisma || new PrismaClient();
if (process.env.NODE_ENV !== "production") globalThis.prisma = db;
ESLint 규칙을 비활성화 하기 위해 위처럼 주석을 작성해주면 no-var 규칙을 비활성화 하여 ESLint 경고를 무시한다.
prisma production mode 에서는 아래와같이 작성한다.
export const db = new PrismaClient;
'TIL' 카테고리의 다른 글
TIL 24.12.02 react-native-expo 환경 변수 추가 (0) | 2024.12.02 |
---|---|
TIL 24.11.29 React svg component 불러오기 (0) | 2024.12.02 |
TIL 24.11.11 React.Children.map() 함수 (0) | 2024.11.11 |
TIL 24.11.06 className, style 등 기본 props type 지정 (1) | 2024.11.06 |
TIL 24.10.28 react-draggable positionOffset, bounds 위치 문제 해결 (1) | 2024.10.28 |