Node.js

Nessun (토론 | 기여)님의 2020년 2월 8일 (토) 14:31 판 (→‎NPM)

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

특징

NPM

npm이라는 강력한 패키지 매니저가 있다.

자바의 Maven이나 C#의 NuGet 정도의 포지션.

비동기성

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.js. “Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.”