How N-API Born


# 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`에 빌트인된 이유입니다.
![](null)
N-API의 모형도


> [[DeepDive] NodeJS C++ Addon 깊게 입문하기](https://aerocode.net/341)











