오늘은 Node.js 가 무엇인지에 대해서 아주 가볍게 다뤄보려고 합니다. Node 가 무엇인지를 알려주는 3분 40초 남짓의 짧은 유튜브 동영상을 링크로 걸어드리고, 나름대로 통역한 내용을 첨부하려고 하는데요. 원래는 유튜브 자막 번역작업에 참여해 볼 생각이었는데 알아보니 2020년 9월 28일 이후로 모든 채널에서 커뮤니티 자막 제공이 지원 중단된 관계로 이렇게 따로 블로깅하게 되었습니다.
원본 영상은 링크에서 확인하실 수 있습니다. Node.js Architecture 라는 제목으로 된 유튜브 영상입니다. 의역이 있으니 정확한 이해를 위해서는 꼭 영상을 참고하시기 바랍니다.
이전 영상을 통해 Node 는 자바스크립트 코드를 실행하기 위한 런타임 환경(runtime environment)이라는 것을 배웠을 겁니다.
런타임 환경이 뭘까요?
Node 가 등장하기 전, 자바스크립트는 애플리케이션을 만들고 그것을 브라우저 안에서 실행시키는 용도로만 사용되었습니다. 그래서 모든 브라우저는 자바스크립트 코드를 컴퓨터가 이해할 수 있는 코드로 바꿔주는 “자바스크립트 엔진” 을 가지고 있었죠. 예를 들면 마이크로소프트 Edge 의 차크라, 파이어폭스의 스파이더 몽키, 크롬의 V8 이 바로 자바스크립트 엔진입니다. 브라우저마다 다른 엔진을 쓰기 때문에 가끔 자바스크립트 코드가 브라우저마다 다르게 작동할 때도 있죠.
이처럼 브라우저는 자바스크립트를 위한 런타임 환경을 제공합니다. 예를 들어 브라우저에 window, 또는 document 객체가 있죠. 이런 객체들은 코드가 실행되고 있는 환경 안에서 작업할 수 있게 해주죠.
2009년까지는 자바스크립드 코드를 실행할 수 있는 방법이 브라우저 밖에 없었습니다. 그러다가 Ryan Dahl (Node 의 창시자) 이 2009년, 기발한 아이디어를 떠올립니다. 그는 브라우저 밖에서 자바스크립트를 실행하면 좋지 않을까 라고 생각했고, 가장 빠른 자바스크립트 엔진인 구글의 V8 엔진을 가져와 C++ 프로그램에 삽입하고 이를 Node 라고 이름 붙였습니다.
따라서 브라우저와 마찬가지로 Node 는 자바스크립트 코드를 위한 런타임 환경입니다. 자바스크립트 코드를 실행할 수 있는 자바스크립트 엔진을 가지고 있고, 자바스크립트 코드를 위한 환경을 제공하는 특별한 (브라우저가 가진 것과는 다른) 객체들을 갖고 있습니다. 브라우저가 Document 객체를 제공한다면, node 에서는 File system을 활용하거나, request 나 주어진 port 로 listen 하는 작업이 가능합니다. 이런 것들은 브라우저에서는 할 수 없는 것들이죠.
즉, Node 는 V8 자바스크립트 엔진과, 브라우저로는 할 수 없는 기능들을 담은 부가적인 모듈들이 합쳐진 프로그램입니다. File system 이나 네트워크 등을 다룰 수 있죠. 크롬과 Node 는 같은 자바스크립트 엔진을 공유하지만 서로 다른 런타임 환경을 제공합니다.
종종 Node 가 C# 이나 Ruby, 또는 다른 프로그래밍 언어와 비교될 때가 있지만, 이런 비교는 근본적으로 틀렸습니다. 왜냐하면 Node 는 프로그래밍 언어가 아니기 때문입니다. 마치 자동차를 사과와 비교하는 것과 같은 것이죠. 같은 이유로 Node 를 ASP.NET 이나 (Ruby on) Rails, Django 등과 같은 프레임워크와 비교하는 것도 잘못된 것입니다. 이런 것들은 웹앱을 만들기 위한 프레임워크이기 때문이죠. Node 는 프레임워크가 아니라, 자바스크립트 코드를 실행하기 위한 런타임 환경입니다.
다음 영상에서는 Node 가 어떻게 동작하는지에 대해 알아보겠습니다.
3분 이후로는 유튜버의 콘텐츠를 홍보하는 내용이라 여기에서 마무리지었습니다. 영상을 조금 더 쉽게 이해하는 데 도움이 되셨으면 합니다.