피드로 돌아가기
Node.js 13.10.0 (Current)
Node.js BlogNode.js Blog
Backend

Node.js 13.10.0에서 async_hooks API, stream pipeline 생성기 함수 지원, vm.measureMemory() 추가로 비동기 컨텍스트 추적 및 메모리 측정 기능 강화

Node.js 13.10.0 (Current)

2020년 3월 4일5intermediate

Context

Node.js 애플리케이션에서 비동기 작업의 컨텍스트 추적이 제한적이었고, 스트림 파이프라인이 기본 함수만 지원하며, 컨텍스트별 메모리 측정 방법이 없었다.

Technical Solution

  • async_hooks에 AsyncLocalStorage API 추가: 비동기 작업 실행 중 로컬 저장소 참조 가능한 store 인자 도입
  • async-context API 도입(SEMVER-MINOR): executionAsyncResource가 훅 내에서 정확하게 매칭되도록 개선
  • stream.pipeline()에 생성기 함수 지원(SEMVER-MINOR): 기존 일반 함수뿐 아니라 생성기 함수를 파이프라인으로 전달 가능
  • vm.measureMemory() 메서드 구현: 특정 V8 컨텍스트별 메모리 사용량 측정 기능 제공
  • 스트림 파이프라인 에러 처리 개선: 버퍼된 쓰기 콜백이 에러 발생 시 호출되도록 보장하고, 파이프라인이 항상 스트림을 정리하도록 수정
  • TLS에 SSL_export_keying_material 노출: 암호화 키 자료 내보내기 기능 추가

Impact

정량적 성능 지표가 아티클에 명시되지 않음.

Key Takeaway

Node.js 13.10.0은 비동기 프로그래밍의 관찰성(observability)과 스트림 처리 유연성을 향상시켜, 복잡한 비동기 워크플로우와 함수형 스트림 변환을 더 정확하게 추적하고 제어할 수 있는 기반을 제공한다.


Node.js를 사용하는 백엔드 애플리케이션에서 AsyncLocalStorage를 활용하면 콜 스택 외부에서 비동기 컨텍스트(사용자 ID, 요청 ID 등)를 안전하게 저장하고 전파할 수 있으며, stream.pipeline()에 생성기 함수를 사용하면 복잡한 변환 로직을 간결하게 표현할 수 있다.

원문 읽기