상세 컨텐츠

본문 제목

노드의 기초

Node

by 성찬우 2022. 10. 28. 11:43

본문

Node.js

크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다. 

런타임은 실행기로 이해하면 된다. 

 

 

V8 엔진 : 오픈 소스 자바스크립트 엔진 -> 속도 문제 개선

libuv : 노드의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현한 라이브러리


특성

이벤트 기반

이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식이다. 

 

쉽게 말해서 클릭, 네트워크 요청, 타이머 를 예시로 들수 있다. 

이벤트 리스너 : 이벤트를 등록하는 함수 

콜백 함수 : 이벤트가 발생했을 때 실행될 함수 

 


논 블로킹 

오래 걸리는 함수를 백그라운드로 보내고 다음 코드가 먼저 실행되게하고 이후 오래 걸리는 함수를 실행한다.

 

논 블로킹 방식으로 일부 코드는 백그라운드에서 병렬로 실행이 되며 (파일 시스템 접근, 네트워크 요청, 압축, 암호화 등)

 

나머지코드는 블로킹 방식으로 실행이 된다. 

 

 

싱글 스레드

노드는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이다. 

동시에 돌아가려면 특정한 조건을 만족해야 하기 때문에 대기를 하고 있다. 

 

노드는 멀티 스레드 대신 멀티 프로세스를 활용하며

 

14버전부터 멀티 스레드를 사용가능하다. 

 

Q)

근데 전부터 의문점이 하나 있었다. 요즘은 cpu성능이 좋아져서 멀티 프로세스도 문제가 없다고는 하지만

그렇다고 해서 싱글 스레드가 장점이라고 하는것이 이해가 되지않았다. 

A) 

논 블로킹 모델을 채택하여 일부코드(IO)를 다른 프로세스에서 실행이 가능하다.

1) 요청을 먼저 받고, 이후 완료되었을 때 그때 응답한다. 

2) IO관련  코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아진다. 

결국 한계는 존재 한다. 하지만 

멀티 프로세스로 인해서 싱글스레드가 여러게 즉 체인점을 내는 것이다. 

 

멀티스레드의 어려운 점을 극복하지는 못했지만 싱글 스레드로 좋은 효율을 뽑아내는 것이 노드이다.

 

 

 

 

'Node' 카테고리의 다른 글

V8 Memory Leak 메모리 누수  (0) 2023.06.22

관련글 더보기

댓글 영역