logo

nodejs 톺아보기

Nodejs · 1월 26일 · 20 min read
poster

Node.js는 크로스 플랫폼 오픈소스 자바스크립트 실행 환경으로 윈도우, 리눅스, 유닉스, 맥OS 등에서 동작하며, V8 자바스크립트 엔진에서 동작하여 웹 브라우저 밖에서 자바스크립트 코드를 실행한다. 실행한다.

Node.js를 통해 개발자는 자바스크립트로 명령줄 도구를 작성하거나 서버 측 스크립팅을 할 수 있다. 서버에서 자바스크립트 코드를 실행하는 기능은 페이지가 사용자의 웹 브라우저로 전송되기 전에 동적 웹 페이지 콘텐츠를 생성하는 데 자주 사용된다. 결과적으로 Node.js는 '어디서나 자바스크립트' 패러다임을 나타내며, 서버 측과 클라이언트 측 프로그래밍에 서로 다른 언어를 사용하는 것과는 대조적으로 단일 프로그래밍 언어를 중심으로 웹 애플리케이션 개발을 통합한다.

Node.js는 비동기 I/O가 가능한 이벤트 기반 아키텍처를 채택하고 있다. 이러한 설계상의 선택은 많은 입출력 작업을 수반하는 웹 애플리케이션과 실시간 웹 애플리케이션(실시간 통신 프로그램, 브라우저 게임 등)의 처리량과 확장성을 최적화하기 위한 것이다.

Node.js의 분산 개발 프로젝트는 이전에는 Node.js Foundation에 의해 총괄되었으나, 현재는 JS Foundation과 합병하여 OpenJS Foundation이 되었다. Foundation의 Collaborative Projects 프로그램에 의해 촉진되고 있다.

nodejs의 역사

Node.js는 최초의 서버사이드 자바스크립트 환경인 넷스케이프의 LiveWire Pro Web이 등장한 지 약 13년 후인 2009년에 Ryan Dahl에 의해 처음 작성되었다. 첫 번째 릴리스는 리눅스와 맥 OS X만 지원했다.

Dahl은 수많은 (10,000개 이상의) 동시 접속을 처리하는 Apache HTTP Server의 제한된 능력과 애플리케이션이 전체 프로세스를 차단하거나 동시 접속을 위해 여러 개의 실행 스택을 생성할 수 있는 순차 프로그래밍의 지배적인 프로그래밍 패러다임을 비판했다.

Dahl은 2009년 11월 8일 열린 제1회 European JSConf에서 이 프로젝트를 시연했다. Node.js는 구글의 V8 자바스크립트 엔진, 이벤트 루프, 저수준 I/O API를 결합했다.

2010년 1월, npm이라는 Node.js 환경용 패키지 관리자가 도입되었다. 이 패키지 관리자를 통해 프로그래머는 Node.js 패키지를 첨부된 소스 코드와 함께 공개하고 공유할 수 있으며, 패키지의 설치, 업데이트, 제거를 간소화하도록 설계되었다.

2011년 6월, 마이크로소프트와 Joyent는 Node.js의 네이티브 윈도우 버전을 구현했고, 윈도우를 지원하는 첫 번째 Node.js 빌드는 2011년 7월에 출시되었다.

2012년 1월, Dahl은 npm의 창시자인 Isaac Schlueter에게 프로젝트 관리를 넘겨주었고, 2014년 1월, Schlueter는 Timothy J. Fontaine이 프로젝트를 이끌게 되었다고 발표했다.

2014년 12월, Fedor Indutny는 Joyent의 거버넌스에 대한 불만으로 인해 별도의 기술위원회를 가진 개방형 거버넌스 대안으로 Node.js의 포크인 io.js를 만들었다. 그 목적은 당시 Node.js의 접근 방식과 달리 최신 구글 V8 자바스크립트 엔진 출시에 맞춰 io.js를 업데이트하는 등 커뮤니티의 의견을 보다 수용하기 쉬운 구조를 구현하는 것이었다.

Node.js와 io.js를 통일된 기치 아래 통합하기 위해 결성된 Node.js Foundation은 2015년 2월에 발표되었다. 합병은 2015년 9월에 실현되어 Node.js v0.12와 io.js v3.3이 Node v4.0으로 통합되었다. 이 병합으로 V8의 ES6 기능이 Node.js에 도입되어 장기적인 지원 릴리스 주기가 시작되었고, 2016년 io.js 웹 사이트는 Node.js로 돌아갈 것을 권장하고 더 이상의 io.js 릴리스가 없을 것이라고 발표하여 사실상 포크 를 종료하여 합병의 성공을 확고히 했다.

2019년 JS 재단과 Node.js 재단이 합병하여 OpenJS 재단이 설립되었다.

2023년 9월 6일, Node.js 20.6.0이 출시되었다. 이 업데이트는 .env 파일 기본 지원 추가, import.meta.resolve 플래그 해제, 모듈 커스터마이징 후크를 위한 새로운 node:module API 등록과 새로운 initialize 후크가 도입됐다. 또한, 모듈 커스터마이징 로드 후크가 CommonJS를 지원하고, Node.js C++ 애드온이 V8용 C++ 가비지 컬렉션 라이브러리인 cppgc(Oilpan)를 실험적으로 지원한다.

nodejs 톺아보기

Node.js는 자바스크립트와 다양한 핵심 기능을 처리하는 '모듈' 컬렉션을 사용하여 웹 서버와 네트워크 도구를 만들 수 있다. 모듈은 파일 시스템 I/O, 네트워킹(DNS, HTTP, TCP, TLS/SSL 또는 UDP), 바이너리 데이터(버퍼), 암호화 기능, 데이터 스트림 및 기타 핵심 기능을 제공한다. .Node.js의 모듈은 서버 애플리케이션 작성의 복잡성을 줄이기 위해 설계된 API를 사용한다.

JavaScript는 Node.js가 기본적으로 지원하는 유일한 언어이지만, 많은 컴파일-투-JS 언어를 사용할 수 있다. 따라서 Node.js 애플리케이션은 CoffeeScript, Dart, TypeScript, ClojureScript 등으로 작성할 수 있다.

Node.js와 PHP의 가장 큰 차이점은 PHP에서는 대부분의 함수가 완료될 때까지 차단되는 반면(명령은 이전 명령이 완료된 후에만 실행됨), Node.js의 함수는 비차단(명령은 동시 또는 병렬로 실행됨합성?) 이며, 콜백을 사용하여 완료 또는 실패를 알린다.

Node.js는 Linux, macOS, Microsoft Windows 8.1과 Server 2012(및 그 이후)에서 공식적으로 지원되며, SmartOS와 IBM AIX에서 Tier 2가 지원되고, FreeBSD에서 실험적으로 지원된다. OpenBSD에서도 동작하며, IBM i (AS/400)에서는 LTS 버전을 사용할 수 있다. 소스 코드는 NonStop OS나 유닉스 서버 등 공식적으로 지원되지 않는 유사한 운영체제로도 빌드할 수 있다.

버전 배포 시기

Node.js의 새로운 메이저 릴리스는 반년마다 GitHub 메인 브랜치에서 삭제된다. 짝수 버전은 4월에, 홀수 버전은 10월에 삭제된다. 새로운 홀수 버전이 출시되면 이전 짝수 버전은 LTS(Long Term Support)로 전환되며, LTS로 지정된 날로부터 18개월 동안 적극적인 지원이 제공된다. 이 18개월이 지나면 LTS 릴리스는 12개월의 유지보수 지원이 추가로 제공된다. LTS 워킹 그룹은 Node.js Foundation의 기술 운영위원회와 협력하여 전략과 정책을 관리하며, 현재 릴리스에 반영된 후 몇 주 후에 LTS 워킹 그룹은 변경 사항의 깨지지 않는 백포트를 받게 된다.