Study/에러 정리

NestJS) EC2 -> crypto is not defined

Juzdalua 2025. 2. 7. 18:46
crypto is not defined

ec2에서 nestjs 프로젝트를 pm2로 실행하면 에러가 발생했다.

나의 경우는 nestjs-scheduler를 사용해서 크론잡 실행시 에러가 발생했다.

로컬에서 pm2를 실행했을 때는 발생하지 않았다.


비슷한 사례를 찾아 여러 시도를 해보았다.

https://github.com/typeorm/typeorm/issues/11270

 

ReferenceError: crypto is not defined when using TypeORM in Nest.js · Issue #11270 · typeorm/typeorm

Issue description I'm using @nestjs/typeorm with TypeOrmModule.forRootAsync() in a NestJS project. Expected Behavior Using @nestjs/typeorm with TypeOrmModule.forRootAsync(), the application should ...

github.com

 

  • 노드 버전 업데이트
  • 글로벌 변수 적용
  • pm2 클러스터 관련 설정 적용
  • Node 내장 crypto 이외 다른 lib 사용
  • 사용중인 lib 최신버전으로 업데이트

모두 실패하고 아래 방법으로 성공했다.

// main.ts
import { webcrypto } from 'node:crypto';

Object.defineProperty(globalThis, 'crypto', {
  get: () => webcrypto,
  configurable: false,
});
  • ec2의 nodejs 환경에서는 crypto가 기본적으로 정의 되지 않았다.
  • crypto 속성에 webcrypto를 재지정한다.
  • crypto에 접근할 때 마다, webcrypto API를 호출하게 한다.

 

ec2에서 정의되지 않은 crypto를 사용하려 하기 때문에 에러가 발생했다.

crypto를 webcrypto API로 지정한다.

crypto에 접근할 때 마다 브라우저의 webcrypto API와 연결하여 사용할 수 있게 바꿨다.