Node.js: 두 판 사이의 차이

잔글 (봇: 자동으로 텍스트 교체 (-</source> +</syntaxhighlight>))
편집 요약 없음
1번째 줄: 1번째 줄:
{{소프트웨어 정보
| 이름                  = Node.js
| 로고                  = [[파일:Node.js logo.svg|400px]]
| 화면                  =
| 운영체제              = [[macOS]], [[리눅스]], [[솔라리스 (운영 체제)|솔라리스]], [[FreeBSD]], [[OpenBSD]], [[마이크로소프트 윈도우|윈도우]] ([[시그윈]]), [[webOS]]
| 상태                  = 개발 중
| 종류                  = [[런타임 환경]]
| 라이선스              = [[MIT 허가서]]
| 원작자                = 라이언 라인하트 달(Ryan Lienhart Dahl)
| 개발                  = [http://github.com/ry/node/blob/master/AUTHORS Node.js 개발자]
| 출시                = 2009년 05월 27일<ref>{{웹 인용|url=https://github.com/joyent/node/tags?after=v0.0.4 |확인날짜 = 2014-8-2 |제목 = node-v0.x-archive on GitHub}}</ref>
| 최신버전                = 19.3.0
| 최신출시                = 2022년 12월 14일
| 작성언어                = [[C++]], [[자바스크립트]]
}}
'''Node.js'''는 [[구글 크롬]]에 들어간 V8 엔진을 이용한 [[JavaScript]] 런타임으로,<ref>{{웹 인용|인용문=Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.|url=https://nodejs.org/en/|제목=Node.js}}</ref> 이벤트 주도적인 [[비동기 프로그래밍]]이 가능하다.
'''Node.js'''는 [[구글 크롬]]에 들어간 V8 엔진을 이용한 [[JavaScript]] 런타임으로,<ref>{{웹 인용|인용문=Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.|url=https://nodejs.org/en/|제목=Node.js}}</ref> 이벤트 주도적인 [[비동기 프로그래밍]]이 가능하다.



2022년 12월 27일 (화) 18:47 판

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이라는 강력한 패키지 매니저가 있다.

자바의 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-v0.x-archive on GitHub. 2014년 8월 2일에 확인.
  2. Node.js. “Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.”