Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 입니다.
노드는 서버가 아닌가요?
런타임: 실행기
Deno: TS 런타임
런타임: 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상 머신(크롬의 V8 엔진 사용)의 상태를 의미합니다.
따라서 노드는 자바스크립트로 만든 프로그램들을 실행할 수 있게 해줍니다.
다른 런타임으로는 웹 브라우저(크롬, 엣지,사파리, 파이어폭스 등)가 있습니다.
노드 이전에도 자바스크립트 런타임을 만들기 위해 많은 시도를 했지만 엔진 속도 문제로 실패했습니다.
1. 이벤트 기반
: 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식입니다.
◽ 이벤트의 예: 클릭, 네트워크 요청, 타이머 등
◽ 이벤트 리스너: 이벤트를 등록하는 함수
◽ 콜백 함수: 이벤트가 발생했을 때 실행될 함수
2. 논블로킹 I/O
: 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행시키는 것 입니다.
3. 프로세스 vs 스레드
프로세스와 스레드
노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현 합니다.
노드는 주로 멀티 스레드 대신 멀티 프로세스를 활용합니다.
노드는 14버전부터 멀티 스레드가 사용 가능합니다.
4. 싱글 스레드
싱글 스레드라 주어진 일을 하나밖에 처리하지 못합니다.
대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능하게 합니다.
요청을 먼저 받고, 완료될 때 응답합니다.
I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아집니다.
5. 멀티 스레드 모델과의 비교
6. 멀티 스레드의 활용
노드 14 버전
멀티 스레딩 | 멀티 프로세싱 |
---|---|
하나의 프로세스 안에서 여러 개의 스레드 사용 | 여러 개의 프로세스 사용 |
CPU 작업이 많을 때 사용 | I/O 요청이 많을 때 사용 |
프로그래밍이 어려움 | 프로그래밍이 비교적 쉬움 |
장점 | 단점 |
---|---|
멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함 | 싱글 스레드라서 CPU 코어를 하나만 사용함 |
I/O 작업이 많은 서버로 적합 | CPU 작업이 많은 서버로는 부적합 |
멀티 스레드 방식보다 쉬움 | 하나뿐인 스레드가 멈추지 않도록 관리해야 함 |
웹 서버가 내장되어 있음 | 서버 규모가 커졌을 때 서버를 관리하기 어려움 |
자바스크립트를 사용함 | 어중간한 성능 |
JSON형식과 호환하기 쉬움 |