본문 바로가기
CODE/Back-end

Node.js

by zerozero\base 2021. 12. 27.

Node.js는 네트워크 어플리케이션을 빌드하는데 서버 구축 등을 도와주는 JavaScript의 런타임 플랫폼이다. 프론트엔드의 대표적 언어인 JavaScript로 백엔드 개발을 할 수 있어서 많은 개발자들이 채택하고 있다고 한다.

 

이벤트 기반 처리

Node.js를 공부하기에 앞서, 이벤트 기반의 처리 순서에 대해 간단히 익혀본다.

 

  1. 여러 이벤트들이 실행될 순서대로 호출 Stack에 쌓여 있다.
  2. 필요하다면 Background로 이벤트가 이동한다. (예를 들어 setTime 함수)
  3. Background에서 작업이 완료되면, Task que로 이동한다.
  4. 호출 Stackd에 있던 이벤트들이 모두 완료되면, Event loop가 Task que 작업들을 호출 Stack으로 이동시킨다.

 

블로킹 I/O와 논블로킹 I/O

여기서 I/O는 Input과 Output을 의미한다.

 

우선 서버는 들어온 작업을 순서대로 처리하는데, 블로킹 I/O는 서버가 한 업무를 처리를 마칠 때까지 다른 업무를 처리할 수 없어, 클라이언트는 대기해야 한다.

논블로킹 I/O는 이전 작업이 완료될 때까지 클라이언트는 기다릴 필요가 없다. 오래 걸리는 작업은 Background에서 처리되기 때문이다.

 

 

스레드

싱글 스레드   멀티 스레드
하나의 스레드가 처리 업무 처리 방식 여러 스레드가 나눠서 처리
전체 문제 발생 스레드 문제 발생 다른 스레드로 대체
효율적 자원 사용 자원 활용 스레드간 작업 전환 비용 발생
업무양이 적다면 노는 스레드 발생

(좌) 싱글 스레드, (우) 멀티 스레드

 

Node.js

Node.js는 싱글 스레드와 논블로킹 I/O를 채택한 런타임 플랫폼으로 두 방식의 장점을 모두 품고 있다. 채팅이나 스트리밍 서비스처럼 I/O 작업이 많아 비동기 방식이 적합한 서버에서 주로 사용된다. 또 앞서 말했듯, JavaScript 언어 기반의 플랫폼으로 프론트엔드 개발자도 쉽게 접근할 수 있다.

하지만 싱글 스레드 특성상 자원을 많이 필요로하는 작업을 할 경우 과부하가 발생하고, CPU 코어를 하나만 사용하기 때문에 CPU 작업이 많은 게임 서비스 같은 서비스의 서버로는 부적합하다.

'CODE > Back-end' 카테고리의 다른 글

Prisma와 PlanetScale - [1] ORM  (0) 2022.06.09
multer로 이미지 업로드 기능 만들기  (0) 2022.01.01
HTTP Method를 활용한 요청 및 응답  (0) 2022.01.01
NPM 패키지 설치와 Express, Nodemon  (0) 2021.12.31
API 서버 만들기  (0) 2021.12.31

댓글