ES 모듈을 사용하여 Node.js 애플리케이션의 코드를 관리하는 경우 이제 Node.js 에이전트를 사용하여 해당 애플리케이션을 모니터링할 수 있습니다.
주의
ES 모듈 애플리케이션의 계측에 대한 Node.js APM 에이전트 지원은 실험적입니다. 에이전트는 계측을 등록하기 위해 실험적인 Node.js 기능에 의존합니다. ES 모듈 로더 용 Node.js API가 안정될 때까지 주요 변경 사항이 발생할 수 있습니다.
개요
v12.0.0 이전에는 Node.js는 공식적으로 CommonJS 모듈을 사용한 코드 관리만 지원했습니다. CommonJS 모듈은 module.exports
및 require()
문을 사용하여 다음 예와 같이 코드를 관리합니다.
'use strict'
const bar = require('./bar')
function echoBar() { console.log('this is bar:', bar)}
module.exports = { echoBar}
Node.js v12.0.0부터 ECMAScript 모듈(ES 모듈/"ESM")에 대한 지원이 추가되었습니다.
require()
및 module.exports
대신 ES 모듈은 다음과 같이 import
및 export
문을 사용합니다.
'use strict'
import bar from './bar.js'
export function echoBar() { console.log('this is bar:', bar)}
ES 모듈은 코드 관리를 위한 공식 ECMAScript 표준이며 브라우저 및 기타 JS 런타임이 패키지를 관리하는 표준 방식입니다. 현재와 미래에 진화하는 Node.js 생태계를 지원하기 위해 에이전트는 에이전트 버전 9.1.0부터 ES 모듈을 사용하여 작성된 애플리케이션 계측을 지원합니다. Node.js APM 에이전트는 CommonJS 애플리케이션도 계속 지원합니다.
중요
ES 모듈 애플리케이션에서 Node.js APM 에이전트를 사용할 때 Node.js의 최소 지원 버전은 v16.12.0입니다.
에이전트 설정
에이전트가 ES 모듈 애플리케이션을 성공적으로 계측하려면 설치 문서 에 설명된 대로 먼저 Node.js 에이전트를 설치해야 합니다. 에이전트가 설치되면 아래 섹션의 구성을 계속하십시오.
구성
애플리케이션이 구성 파일을 사용하여 에이전트를 구성하는 경우 구성 파일의 확장자를 .js
.cjs
으로 업데이트해야 합니다.
에이전트는 CommonJS 모듈로 작성됩니다. 시작 시 구성 파일을 읽기 위해 require()
을 사용합니다. 파일 확장자를 변경하여 에이전트의 구성 파일에 CommonJS 모듈로 명시적으로 레이블을 지정하여 에이전트가 성공적으로 로드할 수 있도록 합니다.
파일 확장자를 업데이트하지 않으면 에이전트 시작 시 다음 오류가 표시될 수 있습니다.
New Relic for Node.js is disabled due to an error:Error [ERR_REQUIRE_ESM]: require() of ES module /path/to/your/application/newrelic.js from /path/to/your/application/node_modules/newrelic/lib/config/index.js not supported.
ES 모듈 로더 추가
에이전트가 ES 모듈 에코시스템 내에서 계측을 적절하게 적용하려면 애플리케이션 호출에 에이전트와 함께 에이전트의 ES 모듈 로더를 포함해야 합니다. Node.js --experimental-loader
CLI 인수를 사용하여 애플리케이션에 로더를 추가할 수 있습니다.
$node --experimental-loader newrelic/esm-loader.mjs -r newrelic your-program.js
맞춤형 계측
Node.js APM 에이전트는 ES 모듈에 사용자 정의 추가를 지원합니다. API의 대부분의 계측 등록 방법을 사용하여 ES 모듈 애플리케이션에서 계측을 생성할 수 있습니다. ES 모듈 가져오기의 특성상 newrelic.instrumentLoadedModule
지원할 수 없습니다. ES 모듈 바인딩은 할당할 수 없으므로 모듈이 로드된 후에는 에이전트가 모듈의 내보낸 멤버를 계측으로 바꿀 수 없습니다.
ES 모듈에서 맞춤형 추가 API 사용하는 방법에 대한 데모를 보려면 GitHub에서 예제를 확인하세요.