Programming/V8 Engine

[ Node.js #01 ] Node JS란 무엇인가?

Nodejs


Nodejs®는 Chrome V8 JavaScript 엔진으로 빌드된 런타임으로 

가볍고 빠르며 확장성이 뛰어난 장점을 가지고 있습니다.

 

기본적으로 웹 개발의 경우 프론트엔드(Front-end) & 백엔드(Back-end)로 나눠지는데

그동안 주로 JavaScript는 프론트엔드 분야에서 주로 사용이 된다는 틀을 깨버리고

React Native를 통해 어플리케이션까지 개발 및 프론트 & 백엔드 모두 사용이 가능하다는 인식으로 바뀌게 되었습니다.

 

동영상 스트리밍 사이트, 단일 페이지, 온라인 채팅 등 웹을 개발하기에 매우 최적화 된 JavaScript 기반 개발언어로

대기업과 스타트업 등 다양한 기업에서 사용되며 현재 개발언어 순위 7위입니다.

 

2023년 1월 개발언어 순위 (Tiobe)

이 뛰어난 언어는 Ryan Dahl등 681명이 개발하였으며 자세한 개발자에 대해서는 링크를 참고하시면 됩니다

 

각 브라우저마다 자체 JavaScript 엔진을 가지고 있는데

 - Firefox는 SpiderMonkey

 - Safari는 JavaScriptCore(Nitro라고도 함)

 - Edge는 Chakra 에서 현재는 Chromium 및 V8엔진을 사용하여 재구축

이와 같이 V8은 JavaScript 엔진이며, JavaScript 코드를 구문 분석하고 실행하여

DOM 및 기타 웹 플랫폼 API를 통해 브라우저에서 제공됩니다.

 

이 외에도 더 많은 JavaScript 엔진이 존재하고 있고

이러한 모든 엔진들은 JavaScript에서 사용하는 ECMAScript를 표준으로 구현되고 있습니다.

 

 

그리고 Node.js는 여러 라이브러리들의 의존성을 가지고 있습니다.

무엇들이 있는지 간단하게 알아보고 하나씩 공식 홈페이지 기반으로 연구 내용을 공유하겠습니다.

 

Libraries(6)

 

V8 (링크)

V8은 C++로 작성된 Google의 오픈 소스 고성능 JavaScript 및 WebAssembly 엔진이며

구글이 관리하고 크롬에서 사용 중인 엔진입니다.

Node.js V8 C++ API 제어하는 JavaScript 엔진을 제공합니다. 

 

libuv (링크)

하나의 중요한 의존성은 libuv입니다. libuv C 라이브러리로 논블로킹 I/O 작업을 지원하는 모든 플랫폼에서 일관된 인터페이스로 추상화하는 사용됩니다. libuv 파일 시스템, DNS, 네트워크, 자식 프로세스, 파이프, 신호 처리, 폴링, 스트리밍을 다루는 메커니즘을 제공하고 운영체제 수준에서 비동기로 처리될 없는 작업을 위한 스레드 풀도 포함하고 있습니다.

 

llhttp (링크)

HTTP 파싱은 llhttp라는 경량 C 라이브러리가 처리합니다. 이는 시스템 호출이나 할당을 하려고 만들어진 것이 아니므로 요청당 아주 작은 메모리 공간만 차지합니다.

 

c-ares (링크)

일부 비동기 DNS 요청을 위해서 Node.js c-ares라는 C 라이브러리를 사용합니다. c-ares JavaScript DNS 모듈로 resolve() 류의 함수들을 노출합니다. 코어의 다른 부분에서 사용하는 lookup() 함수는 libuv에서 스레드로 관리되는 getaddrinfo(3) 호출을 사용합니다. 이렇게 사용하는 이유는 c-ares /etc/hosts, /etc/resolv.conf, /etc/svc.conf 지원하지만 mDNS 같은 것은 지원하지 않기 때문입니다.

 

OpenSSL (링크)

OpenSSL tls crypto 모듈에서 광범위하게 사용되고 있습니다. OpenSSL 현대 웹이 보안에서 사용하는 수많은 암호화 함수에 대한 검증된 구현체를 제공합니다.

 

zlib (링크)

빠른 압축과 압축 해제를 하기 위해 Node.js 산업 표준인 zlib 라이브러리를 사용하고 zlib gzip libpng 사용한다고 알려져 있습니다. Node.js 동기, 비동기, 스트리밍 압축과 압축 해제 인터페이스에 zlib 사용합니다.

 

 

Tools(3)

 

npm (링크)

Node.js 모든 것이 모듈화되어 있으므로 좋은 패키지 매니저가 필요해졌습니다. 목적 때문에 npm 만들어졌습니다. npm 모든 프로그래밍 생태계에서 커뮤니티가 만든 커다란 패키지 선택권을 제공해 주므로 Node.js 빠르고 쉽게 만들 있습니다.

 

gyp (링크)

V8에서 파생된 Python 기반의 프로젝트 제너레이터인 gyp 빌드 시스템을 다룹니다. gyp 다수의 플랫폼에서 빌드 시스템을 사용하기 위한 프로젝트 파일을 생성할 있습니다. Node.js 컴파일이 필요한 언어로 작성된 부분이 많이 있으므로(혹은 의존성 라이브러리에서) 빌드 시스템이 필요합니다.

 

gtest (링크)

네이티브 코드는 Chromium gtest 테스트할 있습니다. gtest C/C++ 시작하는 기존의 node 실행 파일 없이 C/C++ 테스트할 있습니다.

 

 

 

참고

 - NodeJS 공식 홈페이지