반응형
SMALL
Node.js의 공식 홈페이지에서 Node.js를 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임으로 설명하고 있습니다. 여기서 런타임은 특정 언어로 만든 프로그램을 실행할 수 있는 환경을 의미하므로 노드는 Javascript 프로그램을 실행할 수 있습니다.
[그림1]를 보면 노드는 V8과 libuv 라이브러리를 사용하고 있습니다. V8과 libuv는 C/C++로 구현되어 있고, 자바스크립트 코드를 노드가 V8과 libuv에 연결합니다.
Node.js의 특징
- 이벤트 기반(event-driven)
- 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
- 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두어야 하고, 이를 이벤트 리스너(event listener)에 콜백(callback) 함수를 등록한다고 표현함
- 논 블로킹(Non blocking) I/O
- 논 블로킹은 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 방식
- 노드는 I/O 작업을 백그라운드로 넘겨 동시에 처리함
- 싱글 스레드(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) 등이 있음
노드 기능 알아보기
- REPL
- Read, Eval, Print, Loop
- JS 파일 실행
- node helloworld : helloworld.js 파일 실행
- 모듈(Module)
- module.exports
- require
- circular dependency 주의
- 타이머(Timer)
- setTimeout
- setInterval
- setImmediate
- 프로세스(Process)
- process.env
- process.nextTick
- process.exit
노드 내장 모듈
- os
- path
- url
- querystring
- crypto
- util
- worker_threads
- child_process
- assert
- dns
- net
- string_decoder
- tls
- tty
- dgram
- v8
- vm
반응형
LIST