Node.js

박선우·2022년 8월 11일
0

CS 스터디

목록 보기
9/53
post-thumbnail

1️⃣ Node.js란 무엇인가

  • 확장성이 있는 네트워크 어플리케이션 개발에 사용되는 소프트웨어 플랫폼이다.

  • V8이라는 JavaScript 엔진 위에서 동작하는 자바스크립트 런타임(프로그램을 실행할 수 있는 환경)이다.

  • Node.js를 이용하여 서버를 만들 수 있다

2️⃣ Node.js를 왜쓰는가

  • Node.js는 NPM 이라는 오픈 소스 생태계에 필요한 기능들이 대부분 구현되어있어 생산성을 매우 높일수 있습니다.

  • 또, 자바스크립트 기반이라 서버와 클라이언트 모두 한가지 언어로 만드는게 가능하고, 여러 CPU 서버로 확장하기가 쉽습니다. 이런 장점들 때문에 Node.js를 사용합니다.
    번외로 Node.js를 만든 Ryan dahi는 Node.js의 가장 큰 장점이 I/O 논블로킹이다. 라고 했습니다.

자바스크립트 런타임

런타임이란 특정 언어로 만든 프로그램을 실행할 수 있는 환경을 뜻한다.
따라서 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 하는 자바스크립트 실행기이다.
특히 2008년 구글이 V8 엔진을 사용하여 크롬을 출시했고 V8 엔진은 다른 자바스크립트 엔진과 달리 매우 빨라
라이언 달(Ryan Dahl)은 2009년 V8 엔진 기반의 노드 프로젝트를 시작하며 세상에 나왔다.

3️⃣ I/O 논블로킹은 무엇인가

  • Node.js 표준 라이브러리의 모든 I/O 메서드는 논블로킹인 비동기 방식을 제공하고 콜백 함수를 받습니다.

  • 블로킹은 Node.js 프로세스에서 추가적인 자바스크립트의 실행을 위해 자바스크립트가 아닌 작업이 완료될 때까지 기다려야만 하는 상황

  • I/O는 주로 libuv가 지원하는 시스템 디스크나 네트워크와 상호작용하는 것

  • libuv는 비동기 라이브러리이고, 네트워크,파일I/O등 비동기 처리지원한다.

  • 블로킹 작업들을 백그라운드에서 수행하고, 이를 비동기 콜백함수로 이벤트 루프에 전달하는 것을 말합니다.

4️⃣ Node.js(싱글 스레드) -> 싱글 스레드 와 멀티 스레드

싱글 스레드

  • 프로세스 내에서 하나의 스레드가 하나의 요청만을 수행합니다. 해당 요청이 수행될 때 다른 요청을 함께 수행할 수 없다

  • 진행되고 있는 요청이 예정되어 있는 요청을 블로킹하기 때문이다.

멀티 스레드

  • 스레드 풀에서 실행의 요청만큼 스레드를 매칭하여 작업을 수행한다.

  • 스레드 풀에 스레드가 늘어날수록 CPU 비용을 소모하고, 만약 요청이 적다면 놀고있는 스레드가 생긴다.

결론적으로, NodeJS 는 두 개의 스레드로 구성되어 있다.

결론

1️⃣ 이벤트 루프 (메인 스레드)

2️⃣ Thread Pool (미리 생성된, 비어 있는 스레드 그룹이다. Thread Pool 의 크기를 미리 정해놓으면 반복적인 스레드 생성/삭제 절차를 줄임으로써 프로세스의 성능을 개선할 수 있다. Nodejs 의 Thread Pool 기본값은 4 개이다)

Nodejs 는 이벤트 루프에서 작동하다가, fs 나 해싱 등의 작업이 필요한 경우 이 작업을 Thread pool 로 던져주어 새로운 thread 를 사용한다.

profile
코린이 열심히 배우자!

0개의 댓글