[Node] 노드의 특징

노드의 특징

노드(Node.js)는 JavaScript를 이용해서 서버를 만들 수 있는 개발 도구다. 하나의 언어로 Front-endBack-end를 모두 다룰 수 있다니, 이 얼마나 매력적인가!

그럼 이 매력적인 노드의 특징에 대해서 본격적으로 살펴보자.


1. 빠른 개발 가능

노드의 첫 번째 특징으로는 빠른 개발이 가능하다는 것이다.

Javascript 기반이고 개발 구조가 단순화 되어 있어서 빠르게 개발이 가능하다. 또한 클라이언트에서 자바스크립트로 front-end를 개발하던 FE 개발자들도 손쉽게 서버 프로그래밍이 가능하다. 한 마디로, 하나의 언어로 애플리케이션 전체를 구현할 수 있기 때문에 개발을 빠르게 할 수 있는 것이다.

또한 socket.io를 이용한 웹 push 구현이 매우 쉽게 가능하다. 웹 브라우저의 종류에 따라서 push 메커니즘을 자동으로 선택하여 사용하고 있으며 이러한 push 메커니즘은 socket.io API 내에 추상화 되어 있기 때문에 어떤 기술로 구현이 되어 있든 개발자 입장에서는 socket.io만 쓰면 간단하게 웹 기반의 push 서비스가 구현이 가능하다.


2. 모듈과 패키지

소스 파일 하나에 실행하려는 기능이 모두 들어 있다면 코드가 굉장히 복잡해질 것이다. 그래서 메인이 되는 자바스크립트 파일을 두고, 일부 기능만 담당하는 코드를 별도의 파일로 만들 수 있는데 이것을 모듈(Module)이라고 한다.

모듈 안에 있는 코드를 사용하고 싶다면 require() 함수로 모듈을 호출하면 된다. 이렇게 불러들인 모듈은 자바스크립트 객체로 인식되며, 그 객체를 참조하여 모듈에 넣어둔 기능을 사용할 수 있다.

또한, 여러 개의 모듈을 합쳐서 하나의 패키지(Package)로 만들어 두면 다른 개발자들도 npm 프로그램으로 손쉽게 이 패키지를 설치하여 사용할 수 있다.


3. 비동기 입출력(Non-Blocking IO)

하나의 요청 처리가 끝날 때까지 기다렸다가 그 다음 요청 처리를 해야 한다면 굉장히 비효율적일 것이다. 노드는 하나의 요청 처리가 끝날 때까지 기다리지 않고 다른 요청을 동시에 처리할 수 있는 비동기 입출력(Non-Blocking IO) 방식을 적용했다.

그럼 프로그램에서 작업을 진행하는 중간에 다른 작업을 어떻게 진행할 수 있는 것일까?

프로그램에서 다른 작업을 처리할 수 있는 시점이 되면 콜백 함수(Callback Function)을 호출한다.

따라서 파일 읽기 작업을 할 때, 프로그램이 파일 읽기 작업이 끝날 때까지 대기하지 않아도 파일을 다 읽은 시점에 통보를 받고 파일의 내용을 화면에 보여준다. 이렇게 콜백 함수를 이용하기 때문에 비동기 입출력 방식은 대기 시간이 필요 없고 속도가 빠르다.


4. 이벤트 기반 입출력

자바스크립트는 코드를 한 줄씩 해석하면서 실행하는 인터프리터(Interpreter) 방식을 사용하기 때문에 속도가 느려서 문제였는데, 이 문제는 크롬의 V8 자바스크립트 엔진이 나오면서 해결되었다.

V8 엔진은 자바스크립트 코드를 네이티브 코드로 바꾼 후 실행할 수 있는데, 노드는 이 V8 엔진을 이용해 자바스크립트 코드를 빠르게 실행할 수 있다. 노드를 설치한 다음 노드로 프로그램을 만들어 실행하면 크롬 V8 엔진 위에서 실행된다.

그런데 이 V8 엔진에서 동작하는 노드의 아키텍처에서 가장 중요한 부분 중 하나가 이벤트를 받아 처리하는 기능이다.

노드에는 이벤트를 보내고 받을 수 있도록 EventEmitter라는 것이 만들어져 있다. 노드의 객체는 EventEmitter를 상속받을 수 있으며 상속받은 후에는 EventEmitter 객체의 on()emit() 등의 메소드를 사용할 수 있다.

Share