[Node.js 교과서] 핵심 개념 이해하기

6480 단어 node.jsnode.js

서버

네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램

  • 클라이언트의 요청에 대한 응답

자바스크립트 런타임

  • 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻함 (자바스크립트 실행기)

  • Node.js는 Chrome V8 Javascript 엔진으로 빌드

  • libuv 라이브러리

    • 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있음

이벤트 기반

이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식

  • 이벤트: 클릭이나, 네트워크 요청 등
  • 특정 이벤트가 발생할 때 무엇을 할지 미리 등록
    • 이벤트 리스너에 콜백함수를 등록한다고 표현
  • 노드는 다음 이벤트가 발생할 때까지 대기함

이벤트 루프

여러 이벤트가 동시에 발생했을 때 어떤 순서로 호출할지 판단

⇒ 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프(loop)라고 부름

function first() {
	second();
	console.log('first');
}
function second() {
	third();
	console.log('second');
}
function third() {
	console.log('third');
}
first(); // third second first

⇒ anonymous : 처음 실행 시 전역 컨텍스트(global context) 의미

context: 함수가 호출되었을 때 생성되는 환경

function run(){
	console.log('3초 후 실행');
}
console.log('start');
setTimeout(run, 3000);
console.log('end');

// start end 3초 후 실행
  • 백그라운드: setTimeout 같은 타이머나 이벤트 리스너들이 대기하는 곳, 여러 작업 동시 실행 가능
  • 태스크 큐: 이벤트 발생 후, 백그라운드에서 태스크 큐로 타이머나 이벤트 리스너의 콜백함수를 보냄. 정해진 순서대로 콜백들이 줄을 서 있어 콜백 큐라고도 부름.

    setTimeout ⇒ anonymous ⇒ run 순으로 실행

논 블로킹 I/O

노드는 I/O 작업을 백그라운드로 넘겨 동시에 처리함

→ 동시에 처리될 수 있는 작업들은 최대한 묶어서 넘겨야 시간 절약

싱글 스레드

  • 프로세스
    • 운영체제에서 할당하는 작업의 단위
    • 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스
    • 프로세스 간 메모리 등 자원 공유하지 않음
  • 스레드
    • 프로세스 내에서 실행되는 흐름의 단위
    • 프로세스는 스레드를 여러개 생성해 여러 작업 동시 처리 가능
    • 부모 프로세스의 자원을 공유, 같은 주소의 메모리에 접근 간으하므로 데이터 공유 가능
  • 노드 실행 시 프로세스 생성 그 후 내부적으로 스레드 여러 개 생성, 하지만 직접 제어할 수 있는 스레드는 하나뿐
  • 스레드풀과 워커 스레드
    • 스레드풀 : 특정 동작 수행할 때 스스로 멀티 스레드 사용. 예) 암호화, 파일 입출력, 압축 등

    • 워커 스레드: 노드 12 버전에서 안정화된 기능으로 CPU 작업이 많은 경우 사용

      멀티스레딩멀티 프로세싱
      하나의 프로세스 안 여러개 스레드여러 개의 프로세스 사용
      CPU 작업 많을 때I/O 요청이 많을 때
      프로그래밍이 어려움프로그래밍 비교적 쉬움

서버로서의 노드

노드는 기본적으로 싱글 스레드, 논 블로킹 모델 사용

  • 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는 데 적합
  • 네트워크나 데이터베이스, 디스크 작업 같은 I/O에 특화
    • 예: 실시간 채팅, 주식차트, JSON 데이터 제공 API 서버
장점단점
멀티 스레드 방식에 비해 적은 컴퓨터 자원 사용기본적으로 싱글 스레드, CPU 코어 하나만 사용
I/O 작업이 많은 서버로 적합CPU 작업이 많은 서버로는 부적합
멀티 스레드 방식보다 쉬움하나뿐인 스레드가 멈추지 않도록 관리 필요
웹 서버 내장서버 규모가 커졌을 때 서버 관리 어려움
자바스크립트 사용어중간한 성능
JSON 형식과 쉽게 호환

출처

Node.js 교과서

좋은 웹페이지 즐겨찾기