[Node.js] Node.js란?

meta.mong·2024년 6월 26일
0

⚙️ Framework

목록 보기
1/2

🟢 Node.js란?

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 데이터베이스

    • PostgreSQL
    • MySQL
    • Microsoft SQL Server
  • JavaScript JSON 개체를 사용하는 NoSQL 데이터베이스

    • MongoDB
    • CouchDB
    • Cassandra

Node.js를 사용하여 다음과 같은 유형의 애플리케이션을 빌드할 수 있다.

  • HTTP 웹 서버
  • 마이크로 서비스 또는 서버리스 API 백 엔드
  • 대화형 CLI(명령줄 인터페이스)
  • 모듈식 코드 라이브러리 및 유틸리티
  • 자동화 스크립트

🟢 Node.js가 필요한 이유

다목적 기술

Node.js를 사용하여 다양한 production-ready applications을 빌드할 수 있다. 이러한 앱은 기존의 간단하고 사용량이 많은 채팅 프로그램부터 명령줄 도구와 웹 서버까지 다양할 수 있다.

JavaScript

"JavaScript로 작성할 수 있는 모든 애플리케이션은 결국 JavaScript로 작성됩니다."
– Jeff Atwood, 작가, 기업가, StackOverflow 공동 설립자

오늘날 다음을 비롯한 브라우저 외부의 많은 애플리케이션이 JavaScript로 작성되거나 JavaScript를 제1 언어로 지원한다.

  • Visual Studio Code, Atom과 같은 코드 편집기는 JavaScript 또는 TypeScript(정적 형식 지정을 지원하는 JavaScript의 상위 집합)로 작성된다. 이러한 편집기는 임베디드 버전 Node.js 런타임을 실행한다.
  • JavaScript로 작성되고 Node.js에서 실행되는 웹 서버 및 백 엔드 처리 애플리케이션
  • JavaScript로 작성되며 Node.js를 사용하여 Puck, Tessel과 같은 서버 또는 마이크로 컨트롤러 및 SoC(System on a Chip) 플랫폼에서 실행되는 많은 IoT(사물 인터넷) 및 실시간 애플리케이션
  • JavaScript 또는 TypeScript를 사용하여 고성능 네이티브 모바일 애플리케이션을 빌드할 수 있는 NativeScript와 같은 기술
  • Sketch, Adobe XD, Google App Script와 같은 플러그 인 시스템에 JavaScript를 사용하는 대부분의 애플리케이션

JavaScript는 강력한 모듈식 애플리케이션을 작성하는 것에 적합하다.

  • 브라우저에서 JavaScript를 사용하기 때문에 Node.js를 사용하면 브라우저와 서버 간에 폼 유효성 검사 규칙과 같은 논리를 공유할 수 있다.

커뮤니티

커뮤니티에서는 이미 100만 개 이상의 Node.js용 모듈 및 라이브러리를 빌드하여 npm(Node.js 패키지 관리자)에 게시했다. 개발자는 이러한 모듈을 쉽게 다운로드하여 기존 프로젝트에 통합할 수 있다. Node.js에서 실행할 수 있는 애플리케이션에는 명령줄 도구, 프레임워크, 웹 서버 등이 포함된다.

오픈 소스

Node.js는 OpenJS Foundation에서 지원하는 오픈 소스 기술이다. 대규모 활성 오픈 소스 커뮤니티와 기여자가 기술을 개선하고 최적화하기 위해 지속적으로 노력하고 있다.

통합

오픈 소스 패키지 및 모듈은 Node.js를 사용하여 다른 많은 기술과 통합할 수 있다.

  • Node.js를 사용하여 Express.js 프레임워크를 사용하고 MongoDB 데이터베이스에 연결하는 웹 서버를 빌드할 수 있다.
  • Node.js를 사용하여 Commander.js 프레임워크를 사용하고 MySQL 데이터베이스에 연결하는 명령줄 도구를 빌드할 수도 있다.

🟢 Node.js 작동 방법

Node.js가 JavaScript 런타임으로 들어오는 작업을 처리하는 방법은 다음과 같다.

태스크 유형

JavaScript 애플리케이션에는 두 가지 형식의 작업이 있다.

  • 동기 작업: 순서대로 발생하며 완료를 위해 다른 리소스에 종속되지 않는다. ex) 수학 연산이나 문자열 조작
  • 비동기 작업: 다른 리소스에 종속되어 있으므로 즉시 완료되지 않을 수 있다. ex) 네트워크 요청 또는 파일 시스템 작업

프로그램이 가능한 한 빨리 실행되기 위해서는 JavaScript 엔진이 비동기 작업의 응답을 기다리는 동안 계속 작업할 수 있도록 비동기 작업을 작업 큐에 추가하고 다음 작업을 계속 진행한다.

이벤트 루프를 사용하여 작업 큐 관리

Node.js는 JavaScript 엔진의 이벤트 기반 아키텍처를 사용하여 비동기 요청을 처리한다. 다음 다이어그램은 V8 이벤트 루프가 상위 레벨에서 작동하는 방식이다.

  1. 비동기 작업이 이벤트 루프에 추가된다.
  2. 작업에는 수행할 작업과 결과를 수신하는 콜백 함수가 포함된다.
  3. 집약적인 작업이 완료되면 콜백 함수가 결과와 함께 트리거된다.

동기 작업과 비동기 작업

Node.js API는 파일 작업과 같은 몇몇 동일한 작업에 대해 동기 작업과 비동기 작업을 모두 제공한다.

일반적으로는 항상 비동기 우선이라고 생각해야 하지만 때로는 동기 작업을 사용할 수도 있다.

  • ex) CLI(명령줄 인터페이스)가 파일을 읽은 다음 파일의 데이터를 즉시 사용하는 경우
    • 이 경우 애플리케이션을 사용하기 위해 대기하는 다른 시스템이나 사람이 없기 때문에 파일 작업의 동기 버전을 사용할 수 있다.

그러나 웹 서버를 빌드하는 경우에는 다른 사용자 요청을 처리하는 단일 스레드의 실행 기능을 차단하지 않기 위해 항상 비동기 버전의 파일 작업을 사용해야 한다.

비동기 작업을 통한 성능

Node.js는 서버 작업을 빠르고 고성능으로 구성하는 JavaScript의 고유한 이벤트 기반 특성을 활용한다. JavaScript는 비동기 기술로 올바르게 사용될 때 V8 엔진에 의해 이루어지는 성능 향상으로 인해 C와 같은 저수준 언어와 동일한 성능 결과를 생성할 수 있다.

  • Async/await(권장): 비동기 작업의 결과를 수신하기 위해 asyncawait를 사용하는 최신 비동기 기술
    • 여러 프로그래밍 언어에 걸쳐 사용되며, 일반적으로 새 종속성을 가진 새 프로젝트는 이 스타일의 비동기 코드를 사용한다.
  • Callbacks: 콜백 함수를 사용하여 비동기 작업의 결과를 수신하는 기존의 비동기 기술
    • ex) 이전 코드 베이스 및 이전 Node.js API
  • Promises: promise 객체를 사용하여 비동기 작업의 결과를 수신하는 새로운 비동기 기술
    - ex) 최신 코드 베이스 및 최신 Node.js AP
    • 업데이트되지 않는 이전 API를 래핑하려면 작업에서 프라미스 기반 코드를 작성해야 할 수도 있다.
    • 최신Async/await 스타일의 코드보다 더 많은 범위의 Node.js 버전 프로젝트에서 promise를 사용할 수 있다.

🗞️ 참고

profile
날씨는 항상 바뀌기 마련이다.

0개의 댓글