내가 나중에 보려고 정리한 Node.js (1)

krystal·2022년 7월 29일
0

서버 공부

목록 보기
1/2

『Node.js 교과서』를 참고하여 쓴 포스팅입니다.

Node.js란?

Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다.
출처 : 위키백과
서버 애플리케이션을 실행하는데 제일 많이 사용한다고 한다.

Node는 자바스크립트 런타임이다

Runtime : 특정 언어로 만든 프로그램들을 실행활 수 있는 환경. 즉, 자바스크립트로 실행된다는 뜻


Node는 V8과 libuv 라는 라이브러리를 사용한다.

노드의 특성중에는 이벤트 기반, 논 블로킹I/O이 있는데 libuv 라이브러리는 이를 구현하고 있다.


이벤트 기반 (event-driven)

노드는 이벤트 기반 방식으로 동작한다. 이벤트를 다 처리하게 되면 다음 이벤트가 발생할 때까지 기다린다.

이벤트가 발생할 때 미리 지정한 작업을 수행하는 방식
(ex. 클릭, 네트워크 요청)

특정 이벤트 발생 시 무엇을 할지 미리 등록 == 이벤트 리스너에 콜백함수를 등록
ex) 클릭 이벤트 리스너에 경고창을 띄우는 콜백함수 등록

이벤트 루프

이벤트 발생 시, 콜백 함수들을 관리 & 콜백 함수의 실행 순서 결정
루프 : 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복

백 그라운드

타이머나 이벤트 리스너들이 대기하는 곳

태스크 큐

1. 이벤트 발생
2. in 백그라운드, 태스크 큐로 타이머나 이벤트 리스너의 콜백 함수를 보낸다
3. 특정한 경우를 제외하고는 완료된 순서대로 정렬됨
4. 호출 스택이 비어있으면 태스크 큐에서 함수를 가져와서 집어넣고 실행한다

이벤트 루프를 그림판으로 대충 그려보면 이런 느낌이다.


논 블로킹 I/O

I/O는 입력(input)/출력(output)을 의미한다.
파일 읽고 쓰고 만들고 네트워크를 통해 요청하고... 이것들이 I/O의 일종이다.
이런 작업을 할 때 이전 작업이 완료될 때까지 기다리지않고 다음 작업을 수행한다.
이것을 논 블로킹이라 칭함.

모두 동시에 처리될 수 있는 작업이라는 전제하에 논 블로킹 방식을 사용하면 더 짧은 시간에 처리할 수 있다.

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

시간절약을 위해선 동시에 처리가능한 작업은 최대한 묶어서 백그라운드로 넘긴다

그 외 다른 설명들도 있지만 우선 기초만 빠르게 훑는 것이 목적이니 후에 추가하도록 하겠다.


싱글스레드

용어 그대로 스레드가 하나 뿐이다.

프로세스와 스레드의 차이

프로세스 : 운영체제에서 할당하는 작업의 단위. 프로세스 간에는 자원을 공유하지 않는다.
스레드 : 프로세스 내에 실행되는 흐름의 단위.
프로세스 안에 스레드를 여러개 생성하여 여러 작업을 동시에 처리할 수 있음

즉, 프로세스 안에 스레드가 포함되어있음



서버로서의 노드

서버는 I/O 요청이 많이 발생하므로 이를 잘 처리하는 노드를 서버로 사용하면 좋다고 함.
하지만 CPU 부하가 큰 작업에는 추천하지 않는다.

네트워크나 데이터베이스같은 i/o에 특화되어있음. (EX. 실시간 채팅, 주식차트, JSON 데이터 제공)

노드는 웹 서버가 내장되어있기 때문에 별도의 웹 서버를 설치하지않아도 됨.

하지만 서버 규모가 커질 경우

nginx 등의 웹서버를 노드 서버와 연결해야 함.


정리

  1. Node.js는 자바스크립트 런타임이다.
  2. Node.js는 이벤트 기반, 논 블로킹 I/O, 싱글 스레드의 특징을 가지고 있다.
  3. 이벤트 기반은 특정 이벤트 발생 시 미리 등록해둔 것을 동작하는 것을 말함
  4. 논 블로킹은 다른 작업이 끝날때까지 기다리지않고 동시에 작업할 수 있는 것.
  5. 프로세스와 스레드의 차이 / 프로세스 안에 있는 스레드.
profile
https://source-coding.tistory.com/

0개의 댓글