본문 바로가기

Programming/Node.js

1. Node.js 핵심 개념 이해 (1) - 서버, 런타임

node js logo image

 

 

 

 

Node.js는 기본적으로 Chrome V8 Javascript 엔진으로 빌드된 자바스크립트 런타임입니다. 각설하고, 노드로 실행할 수 있는 게 서버 하나뿐만이 아니라는 것을 알 수 있죠. 지금부터는 몇 가지 중요 개념과 용어에 대해서 짚고 넘어가도록 하겠습니다. 

 

 


 

 

 

○ 서버

 

기본적으로 노드를 통해서는 다양한 자바스크립트 애플리케이션 중 서버 애플리케이션을 실행하는데 가장 많이 사용됩니다. 여기서 근본적으로 서버라는 존재는 무엇인지를 살펴보겠습니다. 

 

서버는 기본적으로 네트워크를 통해서 클라이언트 측에 정보, 서비스를 제공하는 컴퓨터(or 프로그램)를 의미합니다. 클라이언트는 모바일 앱, PC, 혹은 또 다른 서버로 요청을 보내는 서버가 되겠습니다. 간단한 내용 같지만 실제 예시를 통해서 다시 한번 개념을 살펴볼까요? 

 

우리가 쓰는 크롬 브라우저는 클라이언트입니다. 여기에 www.naver.com 이라는www.naver.com이라는 URL을 입력하겠습니다. 그러면 실제로는 클라이언트는 www.naver.com이라는 주소를 이용해 네이버 서버 컴퓨터의 위치를 파악하고, 네이버 서버 컴퓨터에게 요청(req)을 보냅니다. 그럼 이 요청을 받은 서버 컴퓨터는 클라이언트인 유저의 크롬 브라우저에게 네이버 메인 페이지 파일을 보내게 되는 것입니다. 그리고 클라이언트는 그 파일을 띄우게 되죠.

 

혹은 플레이 스토어나 앱스토어에서 특정 앱을 설치를 시도하면, 해당 앱의 파일을 어디선가 받아와 유저의 스마트폰에 설치를 합니다. 여기서 스토어는 클라이언트이고, 애플 또는 구글의 서버에서는 요청에 따라 해당 앱의 파일을 전달해 설치를 진행하게 됩니다. 

 

서비스 사용 도중 발생하는 유저의 데이터는 아이디나 주소, 패스워드, 결제 수단 등이 있습니다. 이 정보 역시 어딘가에 저장되어서 사용되겠죠? 이것도 역시 서버에 저장이 됩니다. 또한 서버 자체가 다른 서버에 요청을 보낸다는 그 서버는 클라이언트 역할을 할 수도 있는 것이죠. 상대적인 개념입니다. 

 

 


 

 

○ 자바스크립트 런타임

 

위에서 설명했다시피, Node.js는 Chrome V8 Javascript 엔진으로 빌드된 자바스크립트 런타임입니다. 여기서 런타임은 런타임 환경을 의미하는데 이는 특정 언어로(여기서는 Javascript) 만든 프로그램을 실행할 수 있는 환경을 의미합니다. 이 런타임 환경은 PC의 OS 자체가 보유하고 있기도 하고 특정 S/W에서 제공하기도 하죠. 아무튼 노드는 일종의 '자바스크립트 실행기'라고 보면 됩니다. 

 

예전에는 Javascript 프로그램을 웹 브라우저 상에서만 실행할 수 있었습니다. 브라우저만이 자바스크립트 런타임을 갖고 있었기 때문이죠. 그런데 구글이 V8 엔진을 사용해 크롬을 출시하면서 여러 속도 문제들이 해결되었고, 이를 기반으로 노드가 개발되었습니다. 

 

Node.js Core Library
Node.js Bindings
V8
(오픈소스 자바스크립트 엔진)
libuv
(비동기 I/O)

 

 

참고로 V8은 C, libuv는 C++로 개발되었는데 자바스크립트로 작성한 코드는 노드에서 V8과 libuv로 전달해 동작하게 됩니다. 노드의 특성 중 이벤트 기반, 논블로킹 I/O는 libuv 라이브러리의 특성으로 인한 것입니다. 이 특성들엘 대해서 좀 더 살펴보겠습니다.