Nodejs 개념 이해하기(Nodejs 란?)

임쿠쿠·2020년 9월 23일
6
post-custom-banner

Node.js란?

노드 공식 사이트에는 노드를 다음과 같이 설명하고 있습니다.
'Node.js는 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임 입니다'

즉, 노드를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있으며, 서버를 실행하는데 제일 많이 사용합니다.

자바스크립트 런타임

런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻합니다. 따라서 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있다. 쉽게 말해 노드는 자바스크립트 실행기 입니다.

특히, 2008년 구글이 V8 엔진을 사용하여 크롬을 출시하였고, V8엔진은 다른 자바스크립트 엔진과 달리 매우 빨라 라이언 달(Ryan Dahl)은 2009년 V8 엔진 기반의 노드 프로젝트를 시작하며 세상에 나왔습니다.

이벤트 기반

노드는 V8과 더불어 libuv라는 라이브러리르 사용합니다. libuv 라이브러리는 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있습니다.
이벤트 기반(event-driven)이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미합니다. 즉, 이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두고, 이를 이벤트 리스너에 콜백 함수를 등록 합니다. 이후 이벤트가 발생하면 리스너에 등록해둔 콜백 함수를 호출하며 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기합니다.

이벤트 루프

이벤트 루프(event loop)는 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지를 이벤트 루프가 판단합니다. 노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복 하므로 루프(loop)라고 부릅니다.

논 블로킹I/0

이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있습니다. 작업에는 두가지 종류가 있는데, 동시에 실행될 수 있는 작업과 동시에 실행될 수 없는 작업입니다. 특히 파일 시스템 접근, 네트워크를 통한 요청 작업은 I/O의 일종이며 이러한 작업을 할 때 노드는 논 브로킹 방식으로 처리합니다. 논 블로킹이란 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것을 의미합니다. 반대로 블로킹은 이전 작업이 끝나야만 다음 작업을 수행합니다.

싱글 스레드

이벤트 기반, 논 블로킹 모델과 더불어 노드를 설명하는 키워드 중 하나는 싱글 스레드 입니다. 자바스크립트 코드는 동시에 실행될 수 없는데 그 이유는 노드가 싱글 스레드 기반이기 때문입니다.

프로세스 : 운영체제에서 할당하는 작업의 단위입니다. 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스입니다. 프로세스 간에는 메모리 등의 자원을 공유하지 않습니다.
스레드 : 스레드는 프로세스 내에서 실행되는 흐름의 단위입니다. 프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있습니다. 스레드들은 부모 프로세스의 자원을 공유합니다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있습니다.

노드는 싱글스레드, 논 블로킹 모델로, 싱글 스레드가 혼자서 일을 처리하지만 들어온 요청 순서가 아닌 논블로킹 방식으로 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행합니다.

결론

노드는 기본적으로 싱글 스레드, 논 블로킹 모델을 채용하므로 I/O 요청이 많이 발생하면 노드를 서버로 사용하는 것이 좋습니다. 하지만 노드는 CPU 부하가 큰 작업에는 적합하지 않습니다. 우리가 작성하는 코드는 모두 스레드 하나에서 처리되기 때문에 코드가 CPU연산을 많이 요구하면 스레드 하나가 혼자서 감당하기 어렵습니다.

즉, 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는데 노드는 적합합니다. 예를 들어 네트워크나 데이터베이스, 디스크 작업 같은 I/O에 특화되어 있습니다. 실시간 채팅 애플리케이션, 주식 차트도 포함됩니다.

결론적으로 노드의 장점은 첫째, 멀티 스레드 방식에 비해 적은 컴퓨터 자원을 사용합니다. 둘째, I/O작업이 많은 서버로 적합합니다. 셋째, 웹 서버가 내장되어 있어 별도의 웹서버를 설치할 필요가 없습니다. 넷째, 자바스크립트를 사용하기 때문에 JSON 형식과 쉽게 호환됩니다.

참조

profile
Pay it forward
post-custom-banner

1개의 댓글

comment-user-thumbnail
2021년 12월 30일

출처 남기고 개인블로그에 퍼갈게요

답글 달기