N-API
문제종결
다시 위와같은 문제를 해결하기 위해
N-API
Next Generation Node API가 만들어졌습니다. 2016년에 논의되었고, 2017년에 실험적으로 운용되었으며, 2018년에 이르러서야 정식으로 출시되었습니다. Node.JS
의 초창기부터 함께해온 NAN
와 비교하면 엄청난 후발주자가 아닐 수 없습니다.하지만
NAN
와 달리 N-API
는 Node.JS
자체에 포함되어 있으며, 바이너리 수준에서 호환성을 유지시켜주는 ABI
Application 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
에 빌트인된 이유입니다.N-API의 모형도