JavaScript
[JavaScript] globalThis
hid1
2023. 12. 14. 17:42
globalThis는 ES11 (ES2020)에 추가된 기능으로 자바스크립트 환경에서 전역 객체를 가리킨다.
이전 브라우저 환경에서는 window, Node.js 환경에서는 global을 사용해야 하는 등 각각의 환경에 따라 전역 객체에 접근하는 방법이 다르기 때문에 통일성이 없었다. globalThis는 이러한 차이를 해결하고 어디에서나 동일한 방법으로 전역 객체에 접근할 수 있도록 만들어졌다.
console.log(globalThis === window) // 브라우저: true
console.log(globalThis === global) // Node.js: true
globalThis를 사용하면 특정 환경에 의존하지 않는 코드를 작성할 수 있다.
+
import { PrismaClient } from '@prisma/client'
const prismaClientSingleton = () => {
return new PrismaClient()
}
declare global {
var prisma: undefined | ReturnType<typeof prismaClientSingleton>
}
const prisma = globalThis.prisma ?? prismaClientSingleton()
export default prisma
if (process.env.NODE_ENV !== 'production') globalThis.prisma = prisma
프리즈마 공식 문서 중 globalThis를 사용한 코드를 발견하여 작성하게 되었다.
PrismaClient를 단일 인스턴스로 관리하기 위해 싱글톤 패턴을 사용하였다.
declare global {
var prisma: undefined | ReturnType<typeof prismaClientSingleton>
}
이 코드는 TypeScript에서 globalThis 객체에 prisma 변수를 전역으로 선언한다는 의미이다. prisma는 prismaClientSingleton 함수의 리턴 타입 (즉 prismaClient 타입) 또는 undefined라는 의미이다.
const prisma = globalThis.prisma ?? prismaClientSingleton()
if (process.env.NODE_ENV !== 'production') globalThis.prisma = prisma
globalThis.prisma가 이미 정의되어 있다면 그 값을 사용하고, 정의되어 있지 않다면 prismaClientSingleton 함수를 호출하여 새로운 PrismaClient 인스턴스를 만들고 globalThis.prisma에 prisma 인스턴스를 할당하게 된다.
반응형