Node.js의 배경, 구성, 모듈 시스템, API

yunji_kim·2023년 3월 30일
0

Node.js

목록 보기
1/2
post-thumbnail

Node.js 이해하기

V8엔진 출현

  • V8은 웹 브라우저 내부에서 자바스크립트 수행 속도의 개선을 위해 처음 고안되었다.
  • 오픈소스이고 C++로 작성되었다. Node.js의 런타임으로도 사용된다.
  • OS에서 어플리케이션에 제공하는 다양한 기능(파일시스템 접근, 네트워크 접근, 시스템 정보 접근)들을 사용해서 브라우저에서는 불가능한 것들을 할 수 있게 됨.

Ryan Dahl의 Node.js

  • V8 엔진과 libuv(event loop) 그리고 Node bindings(C++ 라이브러리 집합)로 이루어진 자바스크립트 실행환경(Runtime)이다. (2009년 출시)
  • Node.js는 고성능 Javascript의 발달과 V8 엔진의 등장에 의해 탄생하였다.
  • 여타 실행환경과는 다르게 비동기 실행 방식을 기본적으로 지원하여 IO 작업 시 최고의 성능을 보여줌
  • Node.js는 자바스크립트를 브라우저뿐만 아니라 어느 환경에서나 실행할 수 있게 해주는 실행기이다. (크로스 플랫폼 실행)
  • 다양한 프로그램을 동작의 제한 없이 개발할 수 있다.

Node.js 구성

  • V8 자바스크립트 엔진 : 코드를 실행하는 것만 담당
  • libuv(이벤트 루프) :
    • C로 작성된 이벤트 루프.
    • Node.js API 또는 C/C++ addon으로 실행된 비동기 작업이 마친 후 실행되어야 하는 콜백함수들을 각종 큐에서 정해진 순서에 맞게 꺼내와 JS엔진에 전달함.
    • 싱글 스레드로 작동
  • Node.js API(JS/C/C++기반 라이브러리) :
    • Node.js에서 제공하는 독자적인 API들로, 브라우저 web API와는 다른 라이브러리들이 포함되어 있음
    • 예) fs, path, crypto, Stream, zlib, chlid_process, EventEmitter
  • 모듈 시스템

조감도


모듈 시스템

모듈 시스템이란?

  • 각 소스 코드를 독립적인 개체(모듈)로 묶어서 관리하는 방식
  • 각 소스 코드 간의 scope 간섭을 없애고 각자의 소스 코드가 독립적인 scope를 갖도록 해줌
  • 용도/책임/역할 등에 따라서 코드를 분리해서 관리할 수 있음

두 가지 모듈 방식

  • ECMAScript 표준 module system : 비동기 → export / import
  • Node.js의 CommonJS : 동기 → exports / require

모듈 재사용 : package

  • 내가 작성한 코드를 포장해서 다른 프로젝트에서도 재사용할 수 있도록 만드는 것
  • 패키지 정보는 package.json이라는 파일에 명시함

Node.js API

fs

  • 파일 시스템에 접근할 수 있도록 해주는 모듈
  • 파일 생성 & 읽기 & 쓰기
  • 디렉토리 생성 & 삭제
  • 파일 & 디렉토리 정보 일기
  • 기타 여러 가지 파일 시스템 관련된 작업이 가능

path

  • 파일과 디렉토리의 경로를 위한 모듈
  • 복잡한 파일 시스템의 경로 체계(절대 경로, 상대 경로)를 이겨내기? 위해 필요한 모듈

process

  • 현재 실행 중인 Node.js 프로세스 및 실행 환경에 관련된 데이터 제공
  • 환경 변수, CPU 아키텍처, 현재 Node.js 프로세스가 실행된 경로, 프로세스 ID 등의 다양한 정보 확인 가능
  • 프로세스를 강제로 죽일 수 있는 process.exit() 메소드가 있음

timers

  • setTimeout, setInterval이 담겨져있는 모듈

그 외

console(웹 브라우저의 콘솔과 비슷한 로깅), http/https(HTTP 통), crypto(암호화, 해싱), stream(스트림 데이터) 등

profile
| FE Developer | 기록의 힘 |

0개의 댓글