Prisma는 process.env를 강제로 덮어씌운다.

November 09, 2023

사건의 발단

prisma 작업을 하고 있을 때의 일이다. slack

prisma 코드만 따로 패키징을 해서 돌려보는데, 자꾸 env 관련 문제가 생겼다. env에 넣어둔 값을 찾을 수 없다며 오류를 내게 된 것이다. 난 분명 env 파일을 넣어 뒀는데?

무슨 일이 일어나고 있나요?

그래서 .env 파일을 이곳저곳에 넣어보다가, process.env가 Prisma가 있는 패키지에서 가져오는 env만 자꾸 가져온다는 사실을 알게 되었다.

그렇다. prisma를 가져올 때면 해당 패키지 path에 있는 .env 파일을 가져와서 process.env에 넣어버린다. 만약 .env 파일이 없다면? process.env에는 아무 값도 없게 된다! 전에는 패키지 안에 Prisma가 있었기 때문에 상관 없었지만, 분리하면서 문제가 생기게 된 것이다.

관련해서 깃헙 이슈몇 개 있었다.

issue1 (마법적으로 .env를 덮어쓴다. 와!)

그렇다. Opened issue다. 이 이슈 외에도 많은 사람들이 이의를 제기했고, 시간이 많이 지났음에도 진전된 사항이 없다. Prisma쪽에서는 해당 이슈를 고칠 생각이 없는 건가?

그렇다!

왜???

위의 이슈도 1년 간 열려있는 걸 보면 고칠 생각이 없다는 걸 알 수 있는데, 다음 글을 보면 Prisma 팀의 확고한 의지를 알 수 있다. prisma 정말 놀라운 점은, 문서에 ".env 파일을 사용하지 말 것" 이라고 당당히 붙여놓았다는 점이다.

따라서, 결국 prisma는 .env 관련 설정들을 제공할 생각이 없고, 우리는 다른 방법을 생각해야 한다.

어떻게 해결하지?

사실 해결책은 어이없을 정도로 간단한데, dotenv-cli 등의 패키지로 env를 넣으면 된다.

dotenv -e .env -- pnpm dev

이러면 .env 파일을 읽는 것이 아닌, system environment로 nodejs에 들어가게 되기 때문이다.

아니면 Prisma import 뒤에 dotenv 등으로 로드하면 되는데, 이건 코드 중간에 집어넣어야 하므로 별로인 것 같아 패스.


Profile picture

Written by Mingyu Kim who works as a front-end engineer.