{{위키데이터 속성 추적}}
{{소프트웨어 정보
| 이름                   = Node.js
| 로고                   = Node.js logo.svg
| 화면                   = 
| 설명                   = 
| 원저자                 = 라이언 라인하트 달(Ryan Lienhart Dahl)
| 개발자                 = [http://github.com/ry/node/blob/master/AUTHORS Node.js 개발자]
| 운영체제               = [[macOS]], [[리눅스]], [[솔라리스 (운영 체제)|솔라리스]], [[FreeBSD]], [[OpenBSD]], [[마이크로소프트 윈도우|윈도우]] ([[시그윈]]), [[webOS]]
| 상태                   = 개발 중
| 발표일                 = {{시작 날짜와 나이|2009|05|27}}<ref>{{웹 인용| url=https://github.com/joyent/node/tags?after=v0.0.4 | accessdate = 2 August 2014|title=node-v0.x-archive on GitHub}}</ref>
| latest release version = {{wikidata|property|edit|reference|P348}}
| latest release date    = {{시작 날짜와 나이|{{wikidata|qualifier|mdy|P348|P577}}}}
| 미리보기 버전          = 
| 미리보기 버전 출시일   = 
| 프로그래밍 언어        = [[C++]], [[자바스크립트]]
| 종류                   = [[런타임 환경]]
| 라이선스               = [[MIT 허가서]]
}}

'''Node.js'''는 [[크로스플랫폼]] [[오픈소스]] [[자바스크립트]] [[런타임 환경]]으로 [[마이크로소프트 윈도우|윈도우]], [[리눅스]], [[macOS]] 등을 지원한다. Node.js는 [[V8 (자바스크립트 엔진)|V8]] [[자바스크립트 엔진]]으로 구동되며, [[웹 브라우저]] 바깥에서 자바스크립트 코드를 실행할 수 있다.<ref name="node1">{{웹 인용|URL=https://nodejs.org/en/learn/getting-started/introduction-to-nodejs|제목=Introduction to Node.js|확인날짜=2023-12-20}}</ref>

주로 확장성 있는 네트워크 애플리케이션과 서버 사이드 개발에 사용되는 소프트웨어 플랫폼이며, 논블로킹(Non-blocking) I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.

내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며, 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다.

== 개요 ==
Node.js는 [[V8 (자바스크립트 엔진)|V8]]으로 빌드된 [[이벤트 기반 아키텍처|이벤트]] 기반 [[자바스크립트]] [[런타임]]이다. [[웹 서버]]와 같이 확장성 있는 네트워크 프로그램 제작을 위해 고안되었다.

[[파이썬]]으로 만든 [[트위스티드 (소프트웨어)|트위스티드]], [[펄]]로 만든 [[:en:Perl Object Environment|펄 객체 환경]], [[루비 (프로그래밍 언어)|루비]]로 만든 이벤트 머신과 그 용도가 비슷하다. 대부분의 [[자바스크립트]]가 웹 브라우저에서 실행되는 것과는 달리, 서버 측에서 실행된다. 일부 [[CommonJS]] 명세<ref>http://wiki.commonjs.org/wiki/Implementations/node.js</ref>를 구현하고 있으며, 쌍방향 테스트를 위해 [[REPL]] 환경을 포함하고 있다.

== 역사 ==
[[파일:Ryan Dahl.jpg|섬네일|왼쪽|라이언 달: Node.js의 개발자 (2010년)]]
2009년 라이언 달은 [[플리커]]의 파일 업로드 진행 표시줄을 보았을 때, 파일이 얼마나 업로드되었는지 알기 위해서는 서버에 쿼리를 전송해야 한다는 점을 보고 조금 더 쉬운 방법을 찾다가 고안해 내었으며,<ref>{{웹 인용|url=http://devopsangle.com/2013/04/01/the-birth-of-node-where-did-it-come-from-creator-ryan-dahl-shares-the-history/|제목=The Birth of Node: Where Did it Come From? Creator Ryan Dahl Shares the History|last=Harris|first=Amber|date=April 1, 2012|publisher=Devops Angle|accessdate=26 October 2013|보존url=https://web.archive.org/web/20141018133031/http://devopsangle.com/2013/04/01/the-birth-of-node-where-did-it-come-from-creator-ryan-dahl-shares-the-history/|보존날짜=2014-10-18|url-status=dead}}</ref> 그가 일하던 [[Joyent]]라는 회사에서 개발 및 운영을 담당하고 있다.<ref name="Node.js pushes JavaScript to the server-side">{{웹 인용 |url= http://www.sdtimes.com/NODE_JS_PUSHES_JAVASCRIPT_TO_THE_SERVER_SIDE/By_Alex_Handy/About_JAVASCRIPT_and_NODEJS/35668|제목= Node.js pushes JavaScript to the server-side|author=  Alex Handy|publisher= SDTimes|date= 2011-06-24|accessdate= 2011-09-04}}</ref>

최초 버전은 2009년 리눅스 기반으로 출시되었고, 첫 JSConf EU 콘퍼런스에서 라이언 달의 발표<ref>{{웹 인용|url=http://jsconf.eu/2009/speaker/speakers_selected.html|제목=Ryan Dahl at JSConf EU 2009}}</ref> 직후 국제적인 관심을 끌기 시작했다.<ref>{{웹 인용|url=https://www.youtube.com/watch?v=ztspvPYybIY|제목=Ryan Dahl at JSConf EU 2009 Video}}</ref> 패키지 매니저인 [[npm (소프트웨어)|npm]]은 2011년에 처음 소개되었다.

2011년 6월 [[마이크로소프트]]는 Joyent와 파트너십을 맺고<ref>{{웹 인용 | url=http://blog.nodejs.org/2011/06/23/porting-node-to-windows-with-microsoft%25e2%2580%2599s-help/ | 제목=Porting Node to Windows | accessdate=2 August 2014 | archive-date=2014-07-08 | archive-url=https://web.archive.org/web/20140708085756/http://blog.nodejs.org/2011/06/23/porting-node-to-windows-with-microsoft%25e2%2580%2599s-help/ | url-status= }}</ref> 같은 해 7월 [[마이크로소프트 윈도우|윈도우]]용 최초 버전을 출시했다.

2014년 12월, Fedor Indutny는 Node.js의 포크인 io.js를 시작했다.

2015년 9월, Node.js v0.12와 io.js v3.3은 병합되어 Node v4.0으로 합쳐졌다.<ref>{{웹 인용|url=https://nodejs.org/en/blog/announcements/foundation-v4-announce/|title=Node.js Foundation Combines Node.js and io.js Into Single Codebase in New Release|publisher=|accessdate=28 Jan 2016}}</ref>

종전 서드파티 모듈인 [[CommonJS]]만을 사용하고 있었으나, 2019년 4월 Node.js v12부터 [[ECMA스크립트]]의 공식 모듈 시스템 사용을 실험적으로 지원하기 시작했다.

== 출시 ==
Node.js의 버전별 출시 및 관리는 규칙적인 주기를 가지고 이루어지고 있으며, v4 이후로 약 6개월 주기로 새로운 버전을 출시하고 있다. 이 중 짝수버전의 경우 장기지원 버전(LTS) 이라고 하여 별도의 코드명을 부여받으며, 약 3년간 유지보수 대상이 된다.

Node.js를 운영하는 재단의 [https://nodejs.org/ko/about/releases/ 한국어 웹페이지] {{웨이백|url=https://nodejs.org/ko/about/releases/ |date=20191229163919 }}에서는 버전별 출시 및 유지보수 일정을 명시해두고 있다.

{| class="wikitable sortable" style="text-align: center; padding: 2em;"
!릴리스
!상태
!코드명
!출시일
!유지보수 종료일
|-
| {{Version|o|0.10.x}}
| {{Version|o|수명 종료}}
|
| 2013-03-11
| 2016-10-31
|-
| {{Version|o|0.12.x}}
| {{Version|o|수명 종료}}
|
| 2015-02-06
| 2016-12-31
|-
| {{Version|o|4.x}}
| {{Version|o|수명 종료}}
| Argon<ref name="Release">{{웹 인용|url=https://github.com/nodejs/Release|title=nodejs/Release|website=GitHub|language=en|access-date=2018-05-03}}</ref>
| 2015-09-08
| 2018-04-30
|-
| {{Version|o|5.x}}
| {{Version|o|수명 종료}}
|
| 2015-10-29
| 2016-06-30
|-
| {{Version|o|6.x}}
| {{Version|o|수명 종료}}
| Boron<ref name="Release" />
| 2016-04-26
| 2019-04-30
|-
| {{Version|o|7.x}}
| {{Version|o|수명 종료}}
|
| 2016-10-25
| 2017-06-30
|-
| {{Version|o|8.x}}
| {{Version|o|수명 종료}}
| Carbon<ref name="Release" />
| 2017-05-30
| 2019-12-31
|-
| {{Version|o|9.x}}
| {{Version|o|수명 종료}}
|
| 2017-10-01
| 2018-06-30
|-
| {{Version|o|10.x}}
| {{Version|o|수명 종료}}
| Dubnium<ref name="Release" />
| 2018-04-24
| 2021-04-30
|-
| {{Version|o|11.x}}
| {{Version|o|수명 종료}}
|
| 2018-10-23
| 2019-06-01
|-
| {{Version|o|0.12.x}}
| {{Version|o|수명 종료}}
|
| 2015-02-06
| 2016-12-31
|-
| {{Version|o|4.x}}
| {{Version|o|수명 종료}}
| Argon<ref name="Release" />
| 2015-09-08
| 2018-04-30
|-
| {{Version|o|5.x}}
| {{Version|o|수명 종료}}
|
| 2015-10-29
| 2016-06-30
|-
| {{Version|o|6.x}}
| {{Version|o|수명 종료}}
| Boron<ref name="Release" />
| 2016-04-26
| 2019-04-30
|-
| {{Version|o|7.x}}
| {{Version|o|수명 종료}}
|
| 2016-10-25
| 2017-06-30
|-
| {{Version|o|8.x}}
| {{Version|o|수명 종료}}
| Carbon<ref name="Release" />
| 2017-05-30
| 2019-12-31
|-
| {{Version|o|9.x}}
| {{Version|o|수명 종료}}
|
| 2017-10-01
| 2018-06-30
|-
| {{Version|o|10.x}}
| {{Version|o|수명 종료}}
| Dubnium<ref name="Release" />
| 2018-04-24
| 2021-04-30
|-
| {{Version|o|11.x}}
| {{Version|o|수명 종료}}
|
| 2018-10-23
| 2019-06-01
|-
| {{Version|o|12.x}}
| {{Version|o|수명 종료}}
| Erbium<ref name="Release" />
| 2019-04-23
| 2022-04-30
|-
| {{Version|o|13.x}}
| {{Version|o|수명 종료}}
|
| 2019-10-22
| 2020-06-01
|-
| {{Version|o|14.x}}
| {{Version|o|수명 종료}}
| Fermium<ref name="Release" />
| 2020-04-21
| 2023-04-30
|-
| {{Version|o|15.x|show=}}
| {{Version|o|수명 종료}}
|
| 2020-10-20
| 2021-06-01
|-
| {{Version|o|16.x}}
| {{Version|o|수명 종료}}
| Gallium<ref name="Release" />
| 2021-04-20
| 2023-09-11<ref>[https://nodejs.org/en/blog/announcements/nodejs16-eol/ Bringing forward the End-of-Life Date for Node.js 16], Node.js Website</ref>
|-
| {{Version|o|17.x}}
| {{Version|o|수명 종료}}
|
| 2021-10-19
| 2022-06-01
|-
| {{Version|co|18.x}}
| {{Version|co|유지보수 LTS}}
|Hydrogen<ref name="Release" />
| 2022-04-19
| 2025-04-30
|-
| {{Version|o|19.x}}
| {{Version|o|수명 종료}}
|
| 2022-10-18
| 2023-06-01
|-
| {{Version|co|20.x}}
| {{Version|co|지원 중인 LTS}}
| Iron<ref name="Codenames">{{웹 인용|title=Node.JS CODENAMES.md |url=https://github.com/nodejs/Release/blob/main/CODENAMES.md |access-date=6 September 2023 |website=GitHub |language=en}}</ref>
| 2023-04-18
| 2026-04-30
|-
| {{Version|c|21.x}}
| {{Version|c|현재}}
|<ref name="Release" />
| 2023-10-17
| 2024-05-30
|-
|-
| {{Version|p|22.x}}
| {{Version|p|보류}}
| Jod<ref name="Codenames" /><ref name="Release" />
| 2024-04-15
| 2027-04-28
|-
|-
| {{Version|p|23.x}}
| {{Version|p|보류}}
|<ref name="Release" />
| 2024-10-14
| 2025-05-27
|-
| colspan="5" | <small>{{Version |l |show=111101}}</small>
|}

== 예제 ==
[[Hello world]] [[웹 서버|HTTP 서버]]:
<syntaxhighlight lang="javascript">
var http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
}).listen(8000);

console.log('Server running at http://localhost:8000/');
</syntaxhighlight>

다른 예제, 7000번 [[포트 번호|포트]]를 여는 간단한 [[전송 제어 프로토콜|TCP]] [[Echo]] [[서버]]:
<syntaxhighlight lang="javascript">
var net = require('net');

net.createServer(function (stream) {
    stream.write('hello\r\n');

    stream.on('end', function () {
        stream.end('goodbye\r\n');
    });

    stream.pipe(stream);
}).listen(7000);
</syntaxhighlight>

== 같이 보기 ==
* [[자바스크립트]]
* [[V8 (자바스크립트 엔진)]]

== 각주 ==
{{각주}}

== 외부 링크 ==
{{위키공용분류}}
* {{공식 웹사이트}}
* [https://github.com/nodejs/node 깃허브 저장소]
* [http://www.nodebeginner.org/index-kr.html The Node Beginner Book]

{{Node.js}}
{{자바스크립트}}
{{전거 통제}}

[[분류:자바스크립트 라이브러리]]
[[분류:C++로 작성된 자유 소프트웨어]]
[[분류:자바스크립트로 작성된 자유 소프트웨어]]
[[분류:MIT 라이선스 소프트웨어]]
[[분류:리눅스 재단 프로젝트]]