피드로 돌아가기
Node.js BlogBackend
원문 읽기
Node.js 12.16.0 LTS가 assert, child_process, crypto, EventEmitter 모듈에 정규식 검증, IPC 직렬화 옵션, Hash 복제, 비동기 이벤트 반복 등 12개의 기능 추가
Node.js 12.16.0 (LTS)
AI 요약
Context
Node.js 애플리케이션에서 문자열 검증, 프로세스 간 통신 최적화, 암호화 연산, 이벤트 처리 등 핵심 작업들이 제한된 기능으로 인해 복잡한 구현을 요구했다.
Technical Solution
- assert 모듈에 assert.match()와 assert.doesNotMatch() 메서드 추가: 정규식을 사용한 문자열 검증 기능 제공
- child_process와 cluster 모듈에 serialization 옵션 도입: 'json' (기본값, JSON.stringify/parse 사용) 또는 'advanced' (v8 Structured Clone 알고리즘 기반으로 BigInt, Map, Set, 순환 참조 직렬화 가능)
- crypto.Hash 객체에 copy() 메서드 추가: 내부 상태 복제를 통해 업데이트 사이에 다이제스트 계산 가능
- EventEmitter.on() 정적 메서드 추가: async/await을 사용한 이벤트 비동기 반복
- EventEmitter.errorMonitor 심볼 지원: 에러를 소비하지 않고 모니터링 리스너 설치 가능
- EventEmitter captureRejections 옵션 추가: 비동기 핸들러의 rejected Promise를 'error' 이벤트로 라우팅
- CLI 플래그 추가: --trace-exit (process.exit() 호출 시 스택 트레이스 출력), --trace-uncaught (미처리 예외 발생 시 스택 트레이스 출력)
- DSA/ECDSA 서명 인코딩 확장: 기존 DER 외에 IEEE-P1363 형식 지원 (dsaEncoding 옵션: 'der' 또는 'ieee-p1363')
- NODE_OPTIONS 환경변수에 --disallow-code-generation-from-strings V8 플래그 화이트리스트 등록
- libuv 1.34.0으로 업데이트: uv_fs_copyfile() 및 uv_interface_addresses() 수정, uv_sleep()과 uv_fs_mkstemp() 함수 추가
- V8 7.8.279.23으로 업데이트: 객체 디스트럭처링, RegExp 매치 실패, WebAssembly 시작 시간 성능 개선
Key Takeaway
Node.js LTS 버전 업그레이드는 핵심 모듈의 세분화된 기능 확장(직렬화 옵션, 에러 핸들링, 암호화 유틸리티)을 통해 개발자가 일반적인 패턴을 더 간결하게 구현할 수 있도록 설계되었다.
실천 포인트
마이크로서비스 환경의 child_process 또는 cluster 기반 애플리케이션에서 복잡한 객체(BigInt, Map, Set 포함)를 IPC로 전달해야 할 때, serialization 옵션을 'advanced'로 설정하면 별도의 직렬화 라이브러리 도입 없이 v8 Structured Clone을 활용할 수 있다. 또한 비동기 이벤트 핸들러의 에러 처리 문제가 있는 레거시 코드를 마이그레이션할 때 captureRejections 옵션을 활성화하면 미처리 Promise 거부를 'error' 이벤트로 일관되게 처리할 수 있다.