Node.js

확장성 있는 네트워크 애플리케이션 개발에 사용되는 소프트웨어 플랫폼

Node.js크로스플랫폼 오픈소스 자바스크립트 런타임 환경으로 윈도우, 리눅스, macOS 등을 지원한다. Node.js는 V8 자바스크립트 엔진으로 구동되며, 웹 브라우저 바깥에서 자바스크립트 코드를 실행할 수 있다.[3]

Node.js
원저자라이언 라인하트 달(Ryan Lienhart Dahl)
개발자Node.js 개발자
발표일2009년 5월 27일(14년 전)(2009-05-27)[1]
안정화 버전
22.0.0[2] 위키데이터에서 편집하기 / 2024년 4월 24일(1일 전)(2024년 4월 24일)
저장소
프로그래밍 언어C++, 자바스크립트
운영 체제macOS, 리눅스, 솔라리스, FreeBSD, OpenBSD, 윈도우 (시그윈), webOS
종류런타임 환경
라이선스MIT 허가서
상태개발 중
웹사이트nodejs.org 위키데이터에서 편집하기

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

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

개요 편집

Node.js는 V8으로 빌드된 이벤트 기반 자바스크립트 런타임이다. 웹 서버와 같이 확장성 있는 네트워크 프로그램 제작을 위해 고안되었다.

파이썬으로 만든 트위스티드, 로 만든 펄 객체 환경, 루비로 만든 이벤트 머신과 그 용도가 비슷하다. 대부분의 자바스크립트가 웹 브라우저에서 실행되는 것과는 달리, 서버 측에서 실행된다. 일부 CommonJS 명세[4]를 구현하고 있으며, 쌍방향 테스트를 위해 REPL 환경을 포함하고 있다.

역사 편집

 
라이언 달: Node.js의 개발자 (2010년)

2009년 라이언 달은 플리커의 파일 업로드 진행 표시줄을 보았을 때, 파일이 얼마나 업로드되었는지 알기 위해서는 서버에 쿼리를 전송해야 한다는 점을 보고 조금 더 쉬운 방법을 찾다가 고안해 내었으며,[5] 그가 일하던 Joyent라는 회사에서 개발 및 운영을 담당하고 있다.[6]

최초 버전은 2009년 리눅스 기반으로 출시되었고, 첫 JSConf EU 콘퍼런스에서 라이언 달의 발표[7] 직후 국제적인 관심을 끌기 시작했다.[8] 패키지 매니저인 npm은 2011년에 처음 소개되었다.

2011년 6월 마이크로소프트는 Joyent와 파트너십을 맺고[9] 같은 해 7월 윈도우용 최초 버전을 출시했다.

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

2015년 9월, Node.js v0.12와 io.js v3.3은 병합되어 Node v4.0으로 합쳐졌다.[10]

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

출시 편집

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

Node.js를 운영하는 재단의 한국어 웹페이지 Archived 2019년 12월 29일 - 웨이백 머신에서는 버전별 출시 및 유지보수 일정을 명시해두고 있다.

릴리스 상태 코드명 출시일 유지보수 종료일
오래된 버전, 지원 중단: 0.10.x 오래된 버전, 지원 중단: 수명 종료 2013-03-11 2016-10-31
오래된 버전, 지원 중단: 0.12.x 오래된 버전, 지원 중단: 수명 종료 2015-02-06 2016-12-31
오래된 버전, 지원 중단: 4.x 오래된 버전, 지원 중단: 수명 종료 Argon[11] 2015-09-08 2018-04-30
오래된 버전, 지원 중단: 5.x 오래된 버전, 지원 중단: 수명 종료 2015-10-29 2016-06-30
오래된 버전, 지원 중단: 6.x 오래된 버전, 지원 중단: 수명 종료 Boron[11] 2016-04-26 2019-04-30
오래된 버전, 지원 중단: 7.x 오래된 버전, 지원 중단: 수명 종료 2016-10-25 2017-06-30
오래된 버전, 지원 중단: 8.x 오래된 버전, 지원 중단: 수명 종료 Carbon[11] 2017-05-30 2019-12-31
오래된 버전, 지원 중단: 9.x 오래된 버전, 지원 중단: 수명 종료 2017-10-01 2018-06-30
오래된 버전, 지원 중단: 10.x 오래된 버전, 지원 중단: 수명 종료 Dubnium[11] 2018-04-24 2021-04-30
오래된 버전, 지원 중단: 11.x 오래된 버전, 지원 중단: 수명 종료 2018-10-23 2019-06-01
오래된 버전, 지원 중단: 0.12.x 오래된 버전, 지원 중단: 수명 종료 2015-02-06 2016-12-31
오래된 버전, 지원 중단: 4.x 오래된 버전, 지원 중단: 수명 종료 Argon[11] 2015-09-08 2018-04-30
오래된 버전, 지원 중단: 5.x 오래된 버전, 지원 중단: 수명 종료 2015-10-29 2016-06-30
오래된 버전, 지원 중단: 6.x 오래된 버전, 지원 중단: 수명 종료 Boron[11] 2016-04-26 2019-04-30
오래된 버전, 지원 중단: 7.x 오래된 버전, 지원 중단: 수명 종료 2016-10-25 2017-06-30
오래된 버전, 지원 중단: 8.x 오래된 버전, 지원 중단: 수명 종료 Carbon[11] 2017-05-30 2019-12-31
오래된 버전, 지원 중단: 9.x 오래된 버전, 지원 중단: 수명 종료 2017-10-01 2018-06-30
오래된 버전, 지원 중단: 10.x 오래된 버전, 지원 중단: 수명 종료 Dubnium[11] 2018-04-24 2021-04-30
오래된 버전, 지원 중단: 11.x 오래된 버전, 지원 중단: 수명 종료 2018-10-23 2019-06-01
오래된 버전, 지원 중단: 12.x 오래된 버전, 지원 중단: 수명 종료 Erbium[11] 2019-04-23 2022-04-30
오래된 버전, 지원 중단: 13.x 오래된 버전, 지원 중단: 수명 종료 2019-10-22 2020-06-01
오래된 버전, 지원 중단: 14.x 오래된 버전, 지원 중단: 수명 종료 Fermium[11] 2020-04-21 2023-04-30
오래된 버전, 지원 중단: 15.x 오래된 버전, 지원 중단: 수명 종료 2020-10-20 2021-06-01
오래된 버전, 지원 중단: 16.x 오래된 버전, 지원 중단: 수명 종료 Gallium[11] 2021-04-20 2023-09-11[12]
오래된 버전, 지원 중단: 17.x 오래된 버전, 지원 중단: 수명 종료 2021-10-19 2022-06-01
오래된 버전, 지원 중: 18.x 오래된 버전, 지원 중: 유지보수 LTS Hydrogen[11] 2022-04-19 2025-04-30
오래된 버전, 지원 중단: 19.x 오래된 버전, 지원 중단: 수명 종료 2022-10-18 2023-06-01
오래된 버전, 지원 중: 20.x 오래된 버전, 지원 중: 지원 중인 LTS Iron[13] 2023-04-18 2026-04-30
현재 안정화 버전: 21.x 현재 안정화 버전: 현재 [11] 2023-10-17 2024-05-30
배포 예정: 22.x 배포 예정: 보류 Jod[13][11] 2024-04-15 2027-04-28
배포 예정: 23.x 배포 예정: 보류 [11] 2024-10-14 2025-05-27
범례:
오래된 버전
오래된 버전, 지원 중
최신 버전
최신 미리보기 버전
배포 예정

예제 편집

Hello world HTTP 서버:

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/');

다른 예제, 7000번 포트를 여는 간단한 TCP Echo 서버:

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);

같이 보기 편집

각주 편집

  1. “node-v0.x-archive on GitHub”. 2014년 8월 2일에 확인함. 
  2. “Release 22.0.0”. 2024년 4월 24일. 
  3. “Introduction to Node.js”. 2023년 12월 20일에 확인함. 
  4. http://wiki.commonjs.org/wiki/Implementations/node.js
  5. Harris, Amber (2012년 4월 1일). “The Birth of Node: Where Did it Come From? Creator Ryan Dahl Shares the History”. Devops Angle. 2014년 10월 18일에 원본 문서에서 보존된 문서. 2013년 10월 26일에 확인함. 
  6. Alex Handy (2011년 6월 24일). “Node.js pushes JavaScript to the server-side”. SDTimes. 2011년 9월 4일에 확인함. 
  7. “Ryan Dahl at JSConf EU 2009”. 
  8. “Ryan Dahl at JSConf EU 2009 Video”. 
  9. “Porting Node to Windows”. 2014년 7월 8일에 원본 문서에서 보존된 문서. 2014년 8월 2일에 확인함. 
  10. “Node.js Foundation Combines Node.js and io.js Into Single Codebase in New Release”. 2016년 1월 28일에 확인함. 
  11. “nodejs/Release”. 《GitHub》 (영어). 2018년 5월 3일에 확인함. 
  12. Bringing forward the End-of-Life Date for Node.js 16, Node.js Website
  13. “Node.JS CODENAMES.md”. 《GitHub》 (영어). 2023년 9월 6일에 확인함. 

외부 링크 편집