Node.js는 네트워크 어플리케이션을 빌드하는데 서버 구축 등을 도와주는 JavaScript의 런타임 플랫폼이다. 프론트엔드의 대표적 언어인 JavaScript로 백엔드 개발을 할 수 있어서 많은 개발자들이 채택하고 있다고 한다.
이벤트 기반 처리
Node.js를 공부하기에 앞서, 이벤트 기반의 처리 순서에 대해 간단히 익혀본다.
- 여러 이벤트들이 실행될 순서대로 호출 Stack에 쌓여 있다.
- 필요하다면 Background로 이벤트가 이동한다. (예를 들어 setTime 함수)
- Background에서 작업이 완료되면, Task que로 이동한다.
- 호출 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 |
댓글