Node.js

[Node.js] 기능 알아보기

구루싸 2021. 7. 8. 21:01
반응형
SMALL
 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

Node.js의 공식 홈페이지에서 Node.js를 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임으로 설명하고 있습니다. 여기서 런타임은 특정 언어로 만든 프로그램을 실행할 수 있는 환경을 의미하므로 노드는 Javascript 프로그램을 실행할 수 있습니다. 

[그림1] 노드의 내부 구조

[그림1]를 보면 노드는 V8과 libuv 라이브러리를 사용하고 있습니다. V8과 libuv는 C/C++로 구현되어 있고, 자바스크립트 코드를 노드가 V8과 libuv에 연결합니다. 

Node.js의 특징

  1. 이벤트 기반(event-driven)
    • 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
    • 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두어야 하고, 이를 이벤트 리스너(event listener)에 콜백(callback) 함수를 등록한다고 표현함
  2. 논 블로킹(Non blocking) I/O
    • 논 블로킹은 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 방식
    • 노드는 I/O 작업을 백그라운드로 넘겨 동시에 처리함
  3. 싱글 스레드(Single thread)
    • 노드를 실행하면 먼저 프로세스가 하나 생성되고, 그 프로세스에서 여러 개의 스레드들을 생성하는데, 직접 제어 가능한 스레드는 하나임

※ 스레드풀(Thread Pool)

노드가 특정 동작을 수행할 때 스스로 멀티 스레드를 사용함

※ 워커 스레드(Worker Thread)

노드 12버전에서 안정화된 기능으로 직접 다수의 스레드를 제어할 수 있음 

※ 이벤트 루프(event loop)

이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할을 담당하며, 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 함

※ 백그라운드(Background)

setTimeout 같은 타이머나 이벤트 리스너들이 대기하는 곳으로, 여러 작업이 동시에 수행될 수 있음

※ 태스크 큐(Task queue)

이벤트 발생 후, 백그라운드에서는 태스크 큐로 타이머나 이벤트 리스너의 콜백 함수를 보내고, 정해진 순서대로 콜백들이 순서대로 줄을 서 있으므로 콜백 큐라고도 함

서버로서의 노드

  • 네트워크, 데이터베이스, 디스크 작업 같은 I/O에 특화되어 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는 데 적합
  • 실시간 채팅 어플리케이션이나 주식 차트, JSON 데이터를 제공하는 API 서버가 노드를 많이 사용함
  • 워커 스레드 기능의 안정화로 멀티 스레드 작업을 할 수 있게 되었지만, 이미지, 비디오, 대규모 데이터 처리 등의 CPU를 많이 사용하는 작업에는 C, C++, Rust, Go 등의 언어에 비해 속도가 느림
  • AWS Lambda, Google Cloud Functions 같은 서비스에서 노드로 CPU를 많이 사용하는 작업을 지원함
  • 웹 서버가 내장됨
  • javascript의 사용으로 하나의 언어로 웹 사이트를 개발할 수 있음

서버 외의 노드

  • 초기에는 대부분 서버로 이용했지만, 사용 범위가 늘어서 웹, 모바일, 데스크톱 애플리케이션 개발에도 사용됨
  • 노드 기반으로 돌아가는 대표적인 웹 프레임워크는 구글 진영의 앵귤러(Angular), 페이스북 진영의 리액트(React), 뷰(Vue), 모바일 개발 도구인 리액트 네이티브(React Native), 데스크톱 개발 도구인 일렉트론(Electron) 등이 있음

노드 기능 알아보기

  1. REPL
    • Read, Eval, Print, Loop
  2. JS 파일 실행
    • node helloworld : helloworld.js 파일 실행
  3. 모듈(Module)
    • module.exports
    • require
    • circular dependency 주의
  4. 타이머(Timer)
    • setTimeout
    • setInterval
    • setImmediate
  5. 프로세스(Process)
    • process.env
    • process.nextTick
    • process.exit

노드 내장 모듈

  1. os
  2. path
  3. url
  4. querystring
  5. crypto
  6. util
  7. worker_threads
  8. child_process
  9. assert
  10. dns
  11. net
  12. string_decoder
  13. tls
  14. tty
  15. dgram
  16. v8
  17. vm

 

반응형
LIST