NodeJS

NodeJS, NodeJS란 무엇일까?

iKay 2019. 1. 19. 23:45
반응형

들어가며


NodeJS의 장점은 러닝 커브가 낮아 애플리케이션을 구현하기 쉽고 사용되는 자원대비 비교적 좋은 성능을 내는 점이라고 생각한다. 정말 NodeJS는 방금 말했던 장점을 가졌을까? 그리고 실제 프로젝트에 사용해도 안전할까? 어떤 프로젝트에 적용하면 좋을까? 나는 NodeJS를 얼마나 알고 있을까? 


부끄럽게도 나는 NodeJS를 거의 모르는 것 같다. 사실 Java기반의 프레임워크인 스프링부트도 러닝 커브가 낮아 사용하기 쉽다고 생각한다. NodeJS가 어떻게 구동되는지 깊게 고민한 적이 없으므로 다른 언어에 비해 왜 그리고 어떤점이 좋은지 당장 설명할 수가 없다. 이러한 내가 어떻게 NodeJS가 좋은 언어라고 다른 사람들에게 말할 수 있을까?



 


  

NodeJS 공식 사이트에 들어가면 NodeJS를 다음과 같이 소개하고 있다. [1] NodeJS는 Chrome V8 Javascript engine상에 빌드된 Javascript runtime이다. Chrome V8 Javascript engine은 무엇이고 Javascript runtime은 무엇일까. 오늘은 이 둘을 한 번 짚어 보겠다. 



Chrome V8 Javascript engine  


[2] V8에 대해 간단히 소개하면 다음과 같다.


V8은 Javascript와 [3] WebAssembly의 고성능 엔진으로 구글이 개발한 C++ 기반의 오픈소스로 현재 Chrome, NodeJS 등에 사용되고 있다. 그리고  Windows 7 이상, macOS 10.12 이상 그리고 x64, IA-32, ARM 또는 MIPS 프로세서를 사용하는 Linux 시스템에서 단일(standalone) 혹은 C++ 애플리케이션에 임베디드 되어 동작한다.         


V8은 Javascript code를 컴파일(complie)하고 실행(execute)시키며, 객체(object)의 메모리 할당, 가비지 컬렉션(garbage collection) 관리를 한다. V8의 성능이 좋은 이유는 가비지 컬렉터(garbage collector)가 잘 만들어 졌기 때문이라고 한다. V8의 가비지 컬렉터가 어떻게 구동하길래 좋은 성능을 낼까? V8에 관해서 따로 포스팅 해보는 것도 좋을 것 같다. 


Javascript는 Document Object Model(DOM)을 제어하기 위해 브라우저(browser)에서 클라이언트 쪽 스크립트(client-side scripting)으로써 흔히 사용되는데, DOM은 Javascript engine이 아닌 브라우저에서 받게된다. V8도 마찬가지로, Google Chrome에 의해 DOM을 받는다. 그러나 V8은 ECMA standard에 명시된 대로 데이터 타입(data type), 연산자(operator), 객체(object) 그리고 함수(function)을 구현하도록 되어 있다.     


V8은 C++ 애플리케이션 자체 객체와 함수를 Javascript code로 노출시킬 수 있도록 해준다. 


한마디로, V8은 ECMA standard에 명시된 대로 Javascript라는 언어가 동작하도록 하는 엔진이라고 생각하면 될 것 같다. 



Javascript runtime 


런타임(runtime)이란 영어를 그대로 직역한 것과 의미가 비슷한데, 보통 프로그램이 수행되는 시간 또는 환경을 말한다. 따라서 NodeJS를 한 마디로 말하자면 단순히 server-side Javascript 언어라 부르기 보다는 server-side Javascript code가 수행되는 시간 또는 환경정도로 볼 수 있을듯하다. 크롬, 파이어폭스와 같은 브라우저가 Javascript가 동작하는 환경이니깐 이것들과 동등하게 대응될 것 같다.



마치며


NodeJS가 무엇인지에 대해서 간단히 정리했다. NodeJS는 한 마디로 "Javascript runtime 이다." 다음 번 포스팅에는 NodeJS의 특징 중 non-blocking, event driven에 대해 다뤄보겠다.  



참고


[1] NodeJS 공식사이트 주소(https://nodejs.org/en/) 제일 첫 줄에 나오는 문장이다. 첫 문장부터 NodeJS를 이해하는데 막혀서 당황했다. 

[2] V8에 대한 설명을 하기위해 공식 사이트(https://v8.dev/docs)에서 설명하고 있는 내용을 최대한 그대로 번역했다. 모든 내용을 담아오진 않았고 필요한 부분만 담아왔으니 더 자세히 이해하기 위해서는 공식 사이트에서 정독하는 것도 좋을 것 같다.  

[3] WebAssembly에 대한 내용은 포스팅 주제에 벗어나므로, 더 알고 싶다면 여기(https://webassembly.github.io/spec/core/)를 참고하자. 

반응형