How N-API Born

Creator
Creator
Seonglae ChoSeonglae Cho
Created
Created
2020 Jun 18 3:8
Editor
Edited
Edited
2022 Jun 23 8:2
Refs
Refs

N-API

문제종결

다시 위와같은 문제를 해결하기 위해 N-APINext Generation Node API가 만들어졌습니다. 2016년에 논의되었고, 2017년에 실험적으로 운용되었으며, 2018년에 이르러서야 정식으로 출시되었습니다. Node.JS의 초창기부터 함께해온 NAN와 비교하면 엄청난 후발주자가 아닐 수 없습니다.
 
하지만 NAN와 달리 N-API는 Node.JS자체에 포함되어 있으며, 바이너리 수준에서 호환성을 유지시켜주는 ABIApplication Binary Interface라는 것이 엄청난 장점입니다. 한번 N-API를 사용하여 컴파일된 DLL파일은 바이너리 호환성Binary Compatibility를 지니기때문에, 몇 년이 지나도 최신버전에서 안정적으로 동작할 수 있음을 보장하기 때문입니다.

또한 NAN보다 더 직관적인 인터페이스를 채택하고, Node-Addon-API라고 불리는 C++ 프로그래머를 위한 래핑 버전까지 제공합니다. 물론 NAN도 C++래핑을 지원하지만 Node-Addon-API가 훨씬 더 사용하기 쉽습니다. 반드시 이전 버전도 지원해야하는 경우가 아니라면 N-API를 사용하여 개발하는 것이 정신건강에 이롭습니다.
 
 
 

동작방식

한번 작성된 DLL파일이 앞으로 나올 최신버전에서도 모두 사용될 수 있다니 N-API는 마법의 산물일까요? 프로그래머는 마법같은 것을 믿지 않기 때문에, 그 원리를 파헤쳐야합니다. N-API가 이런 마법같은 일을 벌일 수 있는 기본원리는 매우 간단합니다. 바로 V8의 밑바닥를 추상화하는 것이죠.

V8코드도 N-API를 사용하고, 우리가 작성할 C/C++코드도 N-API를 사용하기 때문에, 새로운 V8이 나오더라도 그 엔진이 N-API를 사용하도록 노드팀이 재설계해준다면, 우리는 아무것도 할 필요가 없어지는 것이죠. 이것이 V8의 밑바닥을 추상화Abstraction of the underlying JavaScript engine하는 것의 의미이고, N-API의 기본 원리이며, Node.JS에 빌트인된 이유입니다.
notion image
N-API의 모형도
 
 
[DeepDive] NodeJS C++ Addon 깊게 입문하기
Native Extention에 대해 설명하기에 앞서, 먼저 Node.JS 가 어떻게 구성되어 있는지에 대해 알아야 합니다. Node.JS 에서 실행가능한 프로그래밍 언어입니다. 자바스크립트 언어로 작성된 코드를 실행해주는 엔진입니다. 자바스크립트의 객체를 생성하거나, 함수를 호출하는 방법과 같은 매커니즘을 정의합니다. 비동기 실행과 라이프 사이클을 제공하는 C 라이브러리입니다. Node.JS의 모든 비동기 동작은 LibUv 가 관리합니다.
[DeepDive] NodeJS C++ Addon 깊게 입문하기
 
 
 
 
 
 
 
 

Recommendations