
Node.js 또는 Node는 오픈 소스 서버 측 JavaScript 런타임 환경
Node.js를 사용하여 서버 또는 CI/CD에서와 같이 브라우저 외부의 여러 위치에서 JavaScript 애플리케이션 및 코드를 실행할 수 있다.
Node.js는 Google Chrome, Opera, Safari, Microsoft Edge, Firefox 등을 비롯한 많은 브라우저를 구동하는 V8이라는 JavaScript 엔진을 둘러싼 래퍼로, Node.js를 사용하여 브라우저 외부에서 V8 엔진을 사용하여 JavaScript를 실행할 수 있다.
Node.js API 는 HTTP, OS, 경로, 파일 시스템, 암호화 및 작업자 스레드와 같이 사용해야 할 수 있는 많은 시스템에 대한 액세스를 제공하며 이러한 API는 Node.js를 웹 서버 빌드에 적합한 선택으로 만든다.
JavaScript는 SPA(단일 페이지 애플리케이션)이 증가하면서 좀 더 적절한 옵션이 되고 있으며, 널리 사용되는 JSON(JavaScript Object Notation) 데이터 교환 형식을 지원한다. SQL 및 no-SQL을 비롯한 많은 데이터베이스 기술은 쿼리 및 스키마의 형식으로 JavaScript 및 JSON을 사용한다.
JavaScript JSON 개체를 사용하는 SQL 데이터베이스
JavaScript JSON 개체를 사용하는 NoSQL 데이터베이스
Node.js를 사용하여 다음과 같은 유형의 애플리케이션을 빌드할 수 있다.
Node.js를 사용하여 다양한 production-ready applications을 빌드할 수 있다. 이러한 앱은 기존의 간단하고 사용량이 많은 채팅 프로그램부터 명령줄 도구와 웹 서버까지 다양할 수 있다.
"JavaScript로 작성할 수 있는 모든 애플리케이션은 결국 JavaScript로 작성됩니다."
– Jeff Atwood, 작가, 기업가, StackOverflow 공동 설립자
오늘날 다음을 비롯한 브라우저 외부의 많은 애플리케이션이 JavaScript로 작성되거나 JavaScript를 제1 언어로 지원한다.
JavaScript는 강력한 모듈식 애플리케이션을 작성하는 것에 적합하다.
커뮤니티에서는 이미 100만 개 이상의 Node.js용 모듈 및 라이브러리를 빌드하여 npm(Node.js 패키지 관리자)에 게시했다. 개발자는 이러한 모듈을 쉽게 다운로드하여 기존 프로젝트에 통합할 수 있다. Node.js에서 실행할 수 있는 애플리케이션에는 명령줄 도구, 프레임워크, 웹 서버 등이 포함된다.
Node.js는 OpenJS Foundation에서 지원하는 오픈 소스 기술이다. 대규모 활성 오픈 소스 커뮤니티와 기여자가 기술을 개선하고 최적화하기 위해 지속적으로 노력하고 있다.
오픈 소스 패키지 및 모듈은 Node.js를 사용하여 다른 많은 기술과 통합할 수 있다.
Node.js가 JavaScript 런타임으로 들어오는 작업을 처리하는 방법은 다음과 같다.
JavaScript 애플리케이션에는 두 가지 형식의 작업이 있다.
동기 작업: 순서대로 발생하며 완료를 위해 다른 리소스에 종속되지 않는다. ex) 수학 연산이나 문자열 조작비동기 작업: 다른 리소스에 종속되어 있으므로 즉시 완료되지 않을 수 있다. ex) 네트워크 요청 또는 파일 시스템 작업프로그램이 가능한 한 빨리 실행되기 위해서는 JavaScript 엔진이 비동기 작업의 응답을 기다리는 동안 계속 작업할 수 있도록 비동기 작업을 작업 큐에 추가하고 다음 작업을 계속 진행한다.
Node.js는 JavaScript 엔진의 이벤트 기반 아키텍처를 사용하여 비동기 요청을 처리한다. 다음 다이어그램은 V8 이벤트 루프가 상위 레벨에서 작동하는 방식이다.

Node.js API는 파일 작업과 같은 몇몇 동일한 작업에 대해 동기 작업과 비동기 작업을 모두 제공한다.
일반적으로는 항상 비동기 우선이라고 생각해야 하지만 때로는 동기 작업을 사용할 수도 있다.
그러나 웹 서버를 빌드하는 경우에는 다른 사용자 요청을 처리하는 단일 스레드의 실행 기능을 차단하지 않기 위해 항상 비동기 버전의 파일 작업을 사용해야 한다.
Node.js는 서버 작업을 빠르고 고성능으로 구성하는 JavaScript의 고유한 이벤트 기반 특성을 활용한다. JavaScript는 비동기 기술로 올바르게 사용될 때 V8 엔진에 의해 이루어지는 성능 향상으로 인해 C와 같은 저수준 언어와 동일한 성능 결과를 생성할 수 있다.
Async/await(권장): 비동기 작업의 결과를 수신하기 위해 async와await를 사용하는 최신 비동기 기술 Callbacks: 콜백 함수를 사용하여 비동기 작업의 결과를 수신하는 기존의 비동기 기술 Promises: promise 객체를 사용하여 비동기 작업의 결과를 수신하는 새로운 비동기 기술Async/await 스타일의 코드보다 더 많은 범위의 Node.js 버전 프로젝트에서 promise를 사용할 수 있다.