Native Extention으로 개발된 라이브러리는 특정 V8버전에 종속된다는 심각한 단점을 함께 가지고 있습니다. Node.JS이 버전업되면서 사용하는 V8엔진도 함께 업데이트되는 경우, V8의 내부코드가 달라질 가능성이 큽니다.즉, 새로운
V8버전에서는 기존의 라이브러리가 동작하지 않게 될 가능성이 매우 높다는 것입니다.
위와같은 문제를 해결하기 위해 추상화된 Native ExtentionNative Abstractions for Node가 만들어졌습니다. 인터페이스에 가까운 형식으로 추상화를 지원하는데, 절대 바뀌지 않을 인터페이스를 정한 뒤에, 각 V8버전에 맞춘 NAN가 만들어지는 식입니다.
간단하게 말하자면, 각
V8엔진의 버전마다 1:1로 대응되는 NAN이 존재하고 있으며, 이 NAN들은 모두 동일한 인터페이스를 유지하고 있으니, 나중에 V8의 버전이 바뀌더라도 그에 대응되는 NAN로 갈아끼우면 된다는 것입니다.특히
NAN은 Node.JS의 초창기부터 함께해온 생태계이기 때문에, NAN으로 작성된 코드는 모든 Node.JS버전에서 사용할 수 있다는 것을 보장합니다. 따라서, 모든(이전) 버전에서 동작가능한 Native Extention 코드을 만들기 위해서는 반드시 NAN를 사용하여 작성되어야 합니다.아직 문제는 남아있다
이렇게만 설명하면
NAN은 마법같은 무언가라고 생각되지만, 심각한 디메리트 도 있다는 것을 알 수 있습니다. V8의 버전이 바뀔 때 마다, 그 V8에 맞게끔 NAN을 바꿔끼우고 다시 컴파일해야 합니다. 말 그대로 코드만 호환되는 것입니다.이것은 버전 호환성이 깨진다는 것을 의미하기 때문에, 개발자가 설정한
V8 버전을 사용하지 않는 사용자는 반드시 에러가 발생합니다.
Seonglae Cho![[DeepDive] NodeJS C++ Addon 깊게 입문하기](https://www.notion.so/image/https%3A%2F%2Fk.kakaocdn.net%2Fdn%2FcALM00%2FbtqCD8APV9Z%2FSUSQI5BVUk3uZpahWDIqTk%2Fimg.jpg?table=block&id=e74e6280-b005-44e6-9a01-1a0852e6e1aa&cache=v2)