Skip to content

Node.js, 개발과 프로덕션의 차이점

Node.js에서는 개발과 프로덕션 사이에 차이점이 없습니다. 즉, Node.js가 프로덕션 구성에서 작동하도록 적용해야 하는 특정 설정은 없습니다. 그러나 npm 레지스트리의 몇몇 라이브러리는 NODE_ENV 변수 사용을 인식하고 기본적으로 development 설정으로 지정합니다. 항상 NODE_ENV=production으로 설정하여 Node.js를 실행하십시오.

애플리케이션을 구성하는 인기 있는 방법은 12가지 요소 방법론을 사용하는 것입니다.

Express의 NODE_ENV

널리 사용되는 express 프레임워크에서 NODE_ENV를 프로덕션으로 설정하면 일반적으로 다음과 같습니다.

  • 로깅이 최소한의 필수 수준으로 유지됩니다.
  • 성능을 최적화하기 위해 더 많은 캐싱 수준이 수행됩니다.

이는 일반적으로 셸에서 다음 명령을 실행하여 수행됩니다.

bash
export NODE_ENV=production

그러나 시스템 재시작 시 설정이 유지되지 않으므로 셸 구성 파일(예: Bash 셸의 .bash_profile)에 넣는 것이 좋습니다.

애플리케이션 초기화 명령 앞에 환경 변수를 추가하여 적용할 수도 있습니다.

bash
NODE_ENV=production node app.js

예를 들어 Express 앱에서 이를 사용하여 환경별로 다른 오류 처리기를 설정할 수 있습니다.

javascript
if (process.env.NODE_ENV === 'development') {
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
}
if (process.env.NODE_ENV === 'production') {
  app.use(express.errorHandler());
}

예를 들어 Express.js에서 사용하는 템플릿 라이브러리인 PugNODE_ENVproduction으로 설정되지 않은 경우 디버그 모드로 컴파일합니다. Express 뷰는 개발 모드에서는 모든 요청에서 컴파일되는 반면 프로덕션에서는 캐시됩니다. 더 많은 예가 있습니다.

이 환경 변수는 외부 라이브러리에서 널리 사용되는 규칙이지만 Node.js 자체에서는 사용되지 않습니다.

NODE_ENV가 안티패턴으로 간주되는 이유는 무엇입니까?

환경은 엔지니어가 소프트웨어 제품을 구축, 테스트, 배포 및 관리할 수 있는 디지털 플랫폼 또는 시스템입니다. 일반적으로 애플리케이션이 실행되는 네 가지 단계 또는 유형의 환경이 있습니다.

  • 개발
  • 스테이징
  • 프로덕션
  • 테스트

NODE_ENV의 근본적인 문제는 개발자가 소프트웨어 최적화 및 동작을 소프트웨어가 실행되는 환경과 결합하는 데서 비롯됩니다. 그 결과는 다음과 같은 코드입니다.

javascript
if (process.env.NODE_ENV === 'development') {
  // ...
}
if (process.env.NODE_ENV === 'staging') {
  // ...
}
if (process.env.NODE_ENV === 'production') {
  // ...
}
if (process.env.NODE_ENV === 'testing') {
  // ...
}

이것은 무해해 보일 수 있지만 프로덕션 및 스테이징 환경을 다르게 만들어 안정적인 테스트를 불가능하게 만듭니다. 예를 들어, NODE_ENVdevelopment로 설정된 경우 테스트와 제품 기능이 통과될 수 있지만 NODE_ENVproduction으로 설정하면 실패할 수 있습니다. 따라서 NODE_ENVproduction 이외의 다른 값으로 설정하는 것은 안티패턴으로 간주됩니다.