제목 : Node.js 에서 개발과 제품 환경 사이의 차이점
Node.js 에서, 개발과 제품 사이의 차이점은 없습니다.
즉, 당신이 Node.js 제품 구성에서 작동하도록 만들기 위해 적용해야 할 특정 세팅이 없다는 겁니다.
하지만, NPM 레지스트리 내부의 소수 라이브러리들은,
NODE_ENV
변수를 사용하여 인식하며, 이 변수는 기본적으로 development
세팅으로 되어 있습니다.
당신의 Node.js 를 언제나 NODE_ENV=production
세팅으로 구동하세요.
어플리케이션을 구성하는 유명한 방식으로는,
twelve factor methodology - 12가지 요소 방법론 을 사용하는 것 입니다.
Express 외부 패키지에서의 NODE_ENV
널리 알려진 express
프레임워크에서,
NODE_ENV
를 production
으로 설정한다는 것은 보통 이런 것들을 보장합니다.
- 로깅을 필요한 수준으로 최소한으로 유지합니다.
- 성능 최적화를 위해 더 많은 캐싱 단계가 발생합니다.
이러한 것은 주로 명령어에 의해 수행됩니다 :
$ export NODE_ENV=production
쉘에서는, 이러한 명령어들을 쉘 구성요소 파일에 넣는것이 더 낫습니다. : EX - .bash-profile
그렇지 않다면, 시스템이 재시동 될 때 설정이 지속되지 않기 때문입니다.
또한 당신의 어플리케이션 초기화 명령어 앞에 환경 변수를 적용 할 수 있습니다 :
$ NODE_ENV=production node app.js
예를 들어 Express 앱에서,
이러한 환경 변수를 사용하여 환경에 따라 서로 다른 에러 핸들러를 사용 할 수 있습니다 :
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
모듈에 의해 사용되는 템플릿 라이브러리 Pug
는,
NODE_ENV
가 production
으로 설정되지 않고, 디버그 모드일 때 컴파일됩니다.
Express 뷰들은 개발 모드에서 매 요청마다 컴파일되지만,
반면에 프로덕션 모드에서는 캐싱됩니다.
더 많은 예제들이 있습니다.
이러한 환경 변수는 협약 혹은 약속으로 전역 라이브러리에서 널리 사용되지만,
Node.js 내에서는 그렇게 사용되지 않습니다.
즉, Node.js 에서 프로덕션, 디버그 모드의 차이는 존재하지 않지만,
내부에 탑재되는 전역 라이브러리에서는 프로덕션과 디버그 모드의 차이점이 존재할 가능성이 높다는 것이다.
따라서, 전역 라이브러리에서 각 모드마다의 차이점을 이러한 환경 변수로 두며,
이러한 변수로 차이점을 두는 것을 convention (협약) 이라고 부르는 것이다.
왜 NODE_ENV 는 안티패턴으로 고려되는걸까?
환경은 소프트웨어 프로덕트를
빌드, 테스트, 배포, 관리할 수 있는 디지털 플랫폼이거나, 시스템입니다.
협약적으로, 우리의 어플리케이션이 구동되는 네 개의 단계 혹은 유형이 있습니다 :
- Development - 개발
- Testing - 테스트
- Staging - 준완성
- Production - 제품 단계
NODE_ENV
의 근본적인 문제는,
개발자가 구동되는 그들의 소프트웨어 위에서 최적화 및 소프트웨어 동작을 결합하는 데에서 생겨납니다.
결과적인 코드는 다음과 같습니다 :
if (process.env.NODE_ENV === "development"){
// ...
}
if(process.env.NODE_ENV === "production"){
// ...
}
if(["production", "staging"].includes(process.env.NODE_ENV)){
// ...
}
이러한 코드는 무해하게 보이는 반면에,
이 코드는 프로덕션과 스테이징 환경을 다르게 만듭니다.
그러므로, 테스팅을 신뢰할 수 있게 만들기가 불가능합니다.
예를 들어 NODE_ENV
가 development
로 설정되었을 때 제품의 기능성 테스트가 통과될 수 있지만,
production
일 때는 실패합니다.
그러므로, NODE_ENV
를 프로덕션이 아닌 모든것은 안티패턴으로 고려됩니다.
'Node.js > Node.js 공식문서' 카테고리의 다른 글
WebAssembly 와 Node.js (0) | 2024.09.20 |
---|---|
ECMAScript 2015 (ES6) 와 그 이후 (0) | 2024.09.18 |
NPM 패키지 매니저에 대한 소개 (2) | 2024.09.17 |
V8 자바스크립트 엔진 (4) | 2024.09.15 |
Node.js 공식문서 - Node.js 와 브라우저 간의 차이점 (0) | 2024.09.14 |