Node.js

Node.js
Node.js logo.svg
소프트웨어 정보
원작자 라이언 라인하트 달(Ryan Lienhart Dahl)
개발 Node.js 개발자
종류 런타임 환경
출시 2009년 05월 27일[1]
최신버전 19.3.0
2022년 12월 14일
상태 개발 중
운영체제 macOS, 리눅스, 솔라리스, FreeBSD, OpenBSD, 윈도우 (시그윈), webOS
작성언어 C++, 자바스크립트
라이선스 MIT 허가서

Node.js구글 크롬에 들어간 V8 엔진을 이용한 JavaScript 런타임으로,[2] 이벤트 주도적인 비동기 프로그래밍이 가능하다.

특징[편집 | 원본 편집]

npm[편집 | 원본 편집]

npm의 로고

npm이라는 강력한 패키지 매니저가 있다. python의 pip나 PHP의 Composer(컴포저), 자바의 Maven나 C#의 NuGet 정도의 포지션이다. npm을 이용해 내가 작성한 코드들을 패키지로 만들거나 의존성 라이브러리를 설정할 수 있다.

nodejs 개발 환경을 세팅하기 위해서는 npm으로 node 패키지를 설치해야 한다.[3] 만약에 타입스크립트로 개발을 하고 싶다면 타입스크립트 패키지를 설치하면 된다. vscode등과 같은 텍스트 편집기, IDE로 node를 개발할 때 require나 import 함수가 인식되지 않다면 설치해야 한다.

npm install node

#lts 버전 설치
npm i node@lts

이렇게 설치하면 현재 환경에만 설치가 되고 -g 옵션을 붙이면 전역으로 설치가 된다.


비동기성[편집 | 원본 편집]

Node.js의 가장 큰 특징으로, Node.js는 싱글 스레드 환경에서 동작하며 non-blocking I/O 호출 방식을 사용한다.

RAM의 속도에 비해 하드 디스크나 네트워크 상의 다른 컴퓨터에 접근해 데이터를 가져오는 작업은 속도가 매우 느리다. 이런 작업을 메인 스레드에서 하게 되면 그동안 다른 작업을 처리하지 못해 극도로 비효율적이 된다. 이를 해결하기 위해 다른 서버 플랫폼에서는 요청마다 새 스레드를 생성해처리하는 것이 보통이지만, 이 작업을 프로그래머가 직접 처리하다 보면 여러 실수도 발생하고, 생각처럼 좋은 성능을 내기도 쉽지 않다. 노드는 연산 작업은 항상 메인 스레드에서 처리하도록 되어 있다. 입출력 작업이 필요할 때, 노드에서 제공하는 함수들은 별도의 스레드를 이용해 작업을 처리하게 된다. 입출력 이후의 처리 부분에서 자바스크립트의 일급 함수 개념이 빛난다. 작업이 끝난 뒤 처리를 담당할 함수를 인자로 같이 넘겨줌으로써, 입출력 이후 그 함수가 호출되어 다음 작업을 진행할 수 있게 되는 것. 다만 이는 콜백 지옥을 발생시킨다는 문제가 지적된다.

step1(function (value1) {
    step2(function (value2) {
        step3(function (value3) {
            step4(function (value4) {
                step5(function (value5) {
                    step6(function (value6) {
                        // Do something with value6
                    });
                });
            });
        });
    });
});

위와 같이, 콜백 함수가 연속해서 나오면서 들여쓰기의 레벨이 한도 끝도 없이 깊어지는 것. 이를 해결하기 위해 Promise, async-await와 같은 해결방법들이 등장했다.

관련 사이트[편집 | 원본 편집]

각주

  1. node-v0.x-archive on GitHub. 2014년 8월 2일에 확인.
  2. Node.js. “Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.”
  3. 이 때 설치하는 것은 node 런타임이 아니다.