[Node.js] Node.js 란 무엇인가?

Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임(실행기)이다.

그리고 비동기 방식으로 작성하고 콜백을 이용하는 방식으로 코드를 작성한다.


노드의 특징

이벤트 기반의 비동기 I/O 프레임워크 이다.

1. 이벤트 기반

2. 논블로킹 I/O

논블로킹이란 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고 나중에 오래걸리는 함수를 실행하는것이다. 그렇다고 백그라운드로 보낸 코드들이 랜덤적으로 실행되는것은 아니며 그 안에서 또다른 규칙에 의해 실행된다.

3. 싱글스레드

싱글스레드는 한명의 직원이 여러 고객을 응대하는 방식이다. 일반적으로 한명의 직원은 한명의 고객만 응대가능하므로 나머지 고객은 기다려야하는 일이 발생한다.

멀티스레드는 여러명의 직원이 여러 고객을 나눠서 응대하는 방식이다.

하지만 노드에서는 싱글스레드를 채택했다. 대신 논블로킹 모델을 채택하여 한명의 직원이 모든 고객의 요청사항을 받아적고 완료가되면 고객을 불러서 처리된 요청사항의 결과물을 반환한다.


정확히 말하자면 client 측에서 어떠한 이벤트가 발생하면 Event Loop(single thread)를 돌게된다.

간단한 작업의경우 이벤트에 대한 결과를 바로 반환하겠지만 복잡한 작업 예를들어 특정이벤트가 발생하면 DB에 접근해서 데이터를 가져오는것과 같은 동작을 수행할 때 이러한 작업을 Non-blocking Worker로 전달하여 비동기로 처리한다. 

그리고 해당 이벤트에대한 처리가 완료되면 다시 이벤트 루프로 해당결과를 던져준다. 그러면 그때 처리된 결과를 client에게 전달한다.


그리고 Node.js의 경우 비동기 작업을 기본적으로 4개의 단위로 실행되어 처리한다. 만약 10개의 비동기 작업을 동시에 요청하면 4개 / 4개 / 2개 단위로 비동기 작업을 처리한다. 한번에 10개를 처리하는것은 아니다. 하지만 이러한 작업 처리량을 설정해서 늘려줄 수 있다.

 ex) UV_THREADPOOL_SIZE=8 

이와 같이 작성하면 비동기작업을 8개씩 동시에 처리한다.


노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 한다.

노드 14버전부터는 멀티 스레드 사용 가능


- 프로세스 : 운영체제에서 할당하는 작업의 단위, 프로레스 간 자원 공유X

- 스레드 : 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유

예를들어 크롬창을 띄우면 그것을 프로세스 1개 크롬창안에 여러개의 탭으로 창을 띄운것을 스레드라고 생각하면 된다. 하지만 이해를 위한 예시일 뿐이며 실제 크롬창은 각각의 탭으로 띄운 창을 프로세스로 띄운다.


브라우저에서의 window가 Node.js에서는 global이라고 한다.





댓글