노드 시작

ClassBinu·2024년 4월 2일

Node.js 교과서

목록 보기
1/19

서버

네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터(또는 프로그램)
서버는 클라이언트의 요청에 응답을 한다.

노드

Node.js는 Chrome V8 JS 엔진으로 빌드된 자바스크립트 런타임
런타임: 특정 언어로 만든 프로그램을 실행할 수 있는 환경

노드 = V8 + libuv(비동기 I/O)
(C, C++로 구현됨)

노드 외의 런타임으로 번, 디노가 있음

이벤트 기반

이벤트가 발생할 때 미리 지정해둔 작업이 수행되는 방식
"이벤트 리스너에 콜백 함수를 등록 하는 방식으로 작동"

이벤트를 다 처리하면 노드는 다음 이벤트가 발생하기를 대기

이벤트 루프

이벤트 기반에서는 여러 이벤트가 동시에 발생했을 때 처리(콜백 함수 호출)를 결정해야 함.
이걸 이벤트 루프가 판단한다.

동작 과정

노드가 자바스크립트 코드를 실행하다가, 함수 호출 부분을 발견하면 콜 스택에 넣음.

이벤트 루프: 이벤트를 처리하기 위해 동작. 콜백 함수 실행 순서를 결정
백그라운드: 이벤트 리스너가 대기 중
태스크 큐(콜백 큐): 이벤트 발생 후 백그라운드에서 보낸 콜백 함수가 대기하는 곳

콜백 큐는 큐 형태로 처리되지만 순서가 바뀔 수도 있음
태스크 큐는 여러개 존재할 수 있다. 마치 OS의 프로세스 대기 큐랑 비슷하네?

논블로킹 I/O

논블로킹: 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행
블로킹: 이전 작업이 끝나야만 다음 작업을 수행

노드는 동시 처리 가능한 I/O 작업을 백그라운드로 넘겨 동시에 처리한다.

노드에서 I/O 작업은 다음과 같다.

  • 파일 시스템 접근
  • 네트워크 요청
  • 데이터베이스 쿼리

setTimeout(콜백, 0)의 진실
HTML5 브라우저에서는 기본 지연 시간 4ms, 노드에서는 1ms가 있음.

싱글 스레드

노드를 실행하면 프로세스가 생성
그 프로세스 안에서 스레드들이 생성됨
사실은 스레드를 여러 개 생성함.
이 때 내가 제어할 수 있는 스레드가 하나 뿐임.
그래서 노드를 싱글 스레드라고 함.

스레드 풀에서 대기하다가 백그라운드에 작업이 할당되면, 스레드가 맡아서 그걸 처리하고 끝나면 다시 풀로 돌아가 대기 상태가 됨.

서버로서의 노드

서버는 I/O 작업이 많이 일어나므로, I/O 처리에 특화된 노드는 좋은 선택
스레드 하나가 많은 I/O를 감당할 수 있음.
단, 메인 스레드 하나가 다 처리하므로 CPU 부하가 큰 작업은 적합하지 않음

개수가 많지만 크기가 작은 데이터를 실시간으로 주고 받는 작업이 적합
ex) 채팅, 주식 차트, json api 서버

이미지/비디오 처리, 대규러 데이터 처리 등 CPU 과부하 작업은 적합하지 않음.

노드는 기본적으로 웹 서버가 내장되어 있지만(내장 http 모듈) 규모가 커지면 nginx 등을 노드 서버와 연결해야 함.

0개의 댓글