1. Node.js
Node.js란 무엇일까요?
명칭에서도 알 수 있듯, 자바스크립트를 개발 언어로 사용하는 소프트웨어 플랫폼입니다. Google Chrome 웹브라우저와 Android 웹브라우저에 탑재된 V8 엔진 위에서 동작합니다. 보통 자바스크립트라고 하면 웹브라우저에서 실행되는 프로그래밍 언어를 떠올리지만, Node.js는 서버 측에서 실행되는 서버 사이드 언어 입니다. [1] (192)
웹이 성장의 한계에 봉착하자 몇몇 선구자들은 귀찮고 반복적인 HTML 작성 작업을 기계가 대신하면 좋겠다는 욕심을 품게 됩니다. 즉, 이미 자바스크립트에 익숙항 웹 개발자들이 새로운 컴퓨터 언어를 배우지 않고도 웹 페이지를 자동으로 생성하는 서버 쪽 애플리케이션을 만들 수 있게 하고 싶었습니다. 이 욕망을 해소하고자 일군의 컴퓨터 공학자들이 나섰고, 이러한 맥락에서 출현한 기술이 바로 Node.js 입니다. [2] (4)
노드의 공식 사이트 (https://nodejs.org/ko/) 에서는 노드를 다음과 같이 설명하고 있습니다.
Node.js 는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다. Node.js 는 이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적입니다. Node.js 의 패키지 생태계인 npm 은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다. [3] (20)
자바스크립트가 웹 브라우저를 제어한다면, Node.js는 자바스크립트를 이용해서 웹 브라우저가 아닌 컴퓨터 자체를 제어합니다.
Node.js라는 새로운 도구를 손에 쥔 웹 개발자들은 이미 익숙한 자바스크립트를 이용해 웹 페이지를 자동으로 생성하는 애플리케이션을 만들기 시작했습니다. 웹 개발자들은 Node.js에 열광했고, 웹 브라우저라는 울타리에 갇혀 있던 자바스크립트는 빠른 속도로 웹 브라우저 밖으로 팽창하기 시작했습니다. [2] (5)
Node.js 또한 웹 서버 기능을 내장하고 있어서 아파치처럼 웹 서버로 사용할 수 있습니다. 이러한 특성을 이용하면 아파치 웹 서버로는 할 수 없는 일도 할 수 있습니다. [2] (39)
노드는 자바스크립트 런타임입니다. 런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻합니다. 따라서 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 해줍니다.
기존에는 자바스크립트 프로그램을 인터넷 브라우저 위에서만 실행할 수 있었습니다. 브라우저 외의 환경에서 자바스크립트를 실행하기 위한 여러 가지 시도가 있었으나, 자바스크립트의 실행 속도 문제 때문에 모두 큰 호응을 얻지 못했습니다.
하지만 2008년 구글이 V8 엔진을 사용하여 크롬을 출시하자 이야기가 달라졌습니다. 당시 V8 엔진은 다른 자바스크립트 엔진과 달리 매우 빨랐고, 오픈 소스로 코드도 공개되었습니다. 속도 문제가 해결되자 라이언 달 (Ryan Dahl) 은 2009년 V8 엔진 기반의 노드 프로젝트를 시작했습니다. [3] (22)
Node.js 는 웹 브라우저에서 사용하는 자바스크립트 실행 엔진을 웹 브라우저 말고 다른 곳 (서버, PC 등) 에서도 사용할 수 있도록 만들어 놓은 프로그램입니다. [4] (18)
Node.js는 자바스크립트를 이용해서 서버를 만들 수 있는 개발 도구입니다.
노드라는 개발 도구를 새로 만들게 된 이유는 의외로 아주 간단합니다. 노드는 2009년에 라이언 달(Ryan Dahl)이 만들었는데 그 당시에는 웹 서버에 파일을 업로드할 때, 업로드가 완료되기 전까지 웹 서버에서 데이터를 조회한다거나하는 등의 다른 작업을 할 수 없었습니다. 이 문제를 해결하기 위해 새로운 방식의 서버 개발 도구를 만들기 시작했는데 그것이 노드입니다. [5] (30)
즉, 하나의 요청 처리가 끝날 때까지 기다리지 않고 다른 요청을 동시에 처리할 수 있는 비동기 입출력 (Non-Blocking IO) 빙식을 적용했습니다. [5] (31)
2. Node.js 프로세스와 스레드
프로세스와 스레드의 차이에 대해 알아봅시다.
프로세스는 운영체제에서 할당하는 작업의 단위입니다. 노드나 인터넷 브라우저 같은 프로그램은 개별적인 프로세스입니다. 프로세스 간에는 메모리 등의 자원을 공유하지 않습니다.
스레드는 프로세스 내에서 실행되는 흐름의 단위입니다. 하나의 프로세스는 스레드를 여러개 가질 수 있습니다. 스레드들은 부모 프로세스의 자원을 공유합니다. 즉, 같은 메모리에 접근할 수 있습니다. [3] (32)
노드는 스레드를 늘리는 대신, 프로세스 자체를 복사해 여러 작업을 동시에 처리하는 멀티 프로세싱 방식을 택했습니다. 자바스크립트 언어 자체가 싱글 스레드 특성을 띠고 있기 때문입니다. [3] (32)
3. Node.js 서버
노드 서버는 I/O가 많은 작업에 적합합니다. 노드는 libuv 라이브러리를 사용하여 I/O 작업을 논블로킹 방식으로 처리해줍니다. 따라서 스레드 하나가 많은 수의 I/O를 혼자서도 감당할 수 있습니다. 하지만 CPU 부하가 큰 작업에는 적합하지 않습니다. [3] (33)
웹 서버가 내장되어 있어 입문자가 쉽게 접근할 수 있습니다. 노드 외의 서버를 개발하다 보면 Apache, nginx, IIS 처럼 별도의 웹 서버를 설치해야 하는 경우가 많습니다. 하지만 노드는 내장된 웹 서버를 사용하면 되므로 편리합니다. 하지만 나중에 서버 규모가 커지면 결국 nginx 등의 웹 서버를 노드 서버와 연결해야 합니다. [3] (33)
노드 사용자들이 말하는 가장 큰 장점은 언어로 자바스크립트를 사용한다는 것입니다. 웹 브라우저도 자바스크립트를 사용하므로 서버까지 노드를 사용하면 하나의 언어로 웹 사이트를 개발할 수 있습니다. 이는 개발 생산성을 획기적으로 높여주었고, 생산성이 중요한 기업이 노드를 채택하는 이유가 되었습니다. [3] (33)
노드의 장단점 [3] (34)
장점 | 단점 |
멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함 | 싱글 스레드라서 CPU 코어를 하나만 사용함 |
I/O 작업이 많은 서버로 적합 | CPU 작업이 많은 서버로는 부적합 |
멀티 스레드 방식보다 쉬움 | 하나뿐인 스레드가 멈추지 않도록 관리해야 함 |
웹 서버가 내장되어 있음 | 서버 규모가 커졌을 때 서버를 관리하기 어려움 |
자바스크립트를 사용함 | 어중간한 성능 |
JSON 형식과 호환하기 쉬움 |
Reference
[1] 만들면서 배우는 모던 웹사이트 제작, 야무 (2015), 한빛미디어
[2] 생활코딩! Node.js 프로그래밍, 이고잉 (2021), 위키북스
[3] Node.js 교과서, 조현영 (2018), 길벗
[4] 초보자를 위한 Node.js 200제, 김경록 (2018), 정보문화사
[5] Do it! Node.js 프로그래밍
'Study > Node.js' 카테고리의 다른 글
[Node.js] Express Web Server Framework (0) | 2022.09.20 |
---|---|
[Node.js] npm (2) | 2022.09.19 |
[Node.js] HTTP Web Server (0) | 2022.09.18 |
[Node.js] Node.js 설치 (0) | 2022.08.23 |