1 – 1. 노드 정의
1. 노드 정의
공식 홈페이지 설명
– Node.js는 Chrome V8 JavaScript 엔진으로 구축된 JavaScript 런타임입니다.
노드가 서버가 아닌가? 서버라는 말이 없네요.
– 서버 역할도 실행할 수 있는 JavaScript 런타임
– 노드로 JavaScript로 작성된 서버를 실행할 수 있습니다.
– 서버 실행에 필요한 http/https/http2 모듈 제공
2. 런타임
노드: JavaScript 런타임
– 런타임 – 특정 언어로 작성된 프로그램을 실행할 수 있는 가상 머신(Chrome V8 엔진 사용) 상태
– 참고: JavaScript로 만든 프로그램을 실행할 수 있도록 합니다.
– 다른 런타임에는 웹 브라우저(크롬, 에지, 사파리, Firefox 등)가 있습니다.
– 노드 앞에서도 JavaScript 런타임을 만드는 많은 시도
– But, 엔진 속도 문제로 실패
2. 내부 구조
2008년 V8 엔진 출시, 2009년 노드 프로젝트 시작
노드에는 V8과 libuv가 내부적으로 포함되어 있습니다.
– V8 엔진 : 오픈 소스 JavaScript 엔진 -> 속도 문제 개선
– libuv : 노드의 특성인 이벤트 기반, 비블로킹 I/O 모델을 구현한 라이브러리
================================================== ==========
1 – 2. 노드의 특성
1. 이벤트 기반
이벤트가 발생할 때 미리 지정한 작업을 수행하는 방법
– 이벤트 예: 클릭, 네트워크 요청, 타이머 등
– 이벤트 리스너 : 이벤트 등록하는 함수
– 콜백 함수: 이벤트 발생 시 실행되는 함수
이벤트 기반 모델에서는 이벤트 루프(event loop)라는 개념이 등장
– 어떤 순서로 콜백 함수를 호출할지 결정
– 함수 호출 발견시 호출 스택에 함수를 침입
function first()
{
second();
console.log('첫 번째');
}
function second()
{
third();
console.log('두 번째');
}
function third()
{
console.log('세 번째');
}
first();
이벤트 기반 모델에서는 이벤트 루프(event loop)라는 개념이 등장
– 어떤 순서로 콜백 함수를 호출할지 결정
– 함수 호출이 발견되면 호출 스택에 함수 삽입
function run()
{
console.log("3초 후 실행);
}
console.log('실행');
setTimeout(run, 3000);
이벤트 루프, 배경, 작업 대기열
– 이벤트 루프: 이벤트 발생 시 호출할 콜백 함수 관리, 실행 순서 결정
– 백그라운드: setTimeout과 같은 타이머/이벤트 리스너가 대기하는 곳
– 작업 대기열: 백그라운드에서 타이머/이벤트 리스너를 받는 위치
이벤트 루프, 배경, 작업 대기열
– 이벤트 루프 : 이벤트 발생시 호출되는 콜백 함수 관리, 실행 순서
– 백그라운드: setTimeout과 같은 타이머/이벤트 리스너가 대기하는 곳
– 작업 대기열: 백그라운드에서 타이머/이벤트 리스너를 받는 위치
2. 비블로킹 I/O
논플로킹: 오래 걸리는 함수를 백그라운드에서 보내고, 다음 코드를 먼저 실행하고, 나중에 시간이 걸리는 함수를 실행합니다.
– 비 블로킹 방법 하에서 일부 코드는 백그라운드에서 병렬로 실행됩니다.
– 일부 코드: I/O 작업(파일 시스템 액세스, 네트워크 요청), 압축, 암호화 Dㅜ
– 나머지 코드는 블록 방식으로 실행됩니다.
– I/O 작업이 많을 경우 노드 활용도 극대화
function longRunningTask()
{
// 오래걸리는 작업
console.log('작업 끝');
}
console.log('시작');
longRunningTask();
console.log('다음 작업');
function longRunningTask()
{
// 오래걸리는 작업
console.log('작업 끝');
}
console.log('시작');
setTimeout(longRunningTask, 0);
console.log('다음 작업');
2. 프로세스 대 스레드
풀 고세스와 스레드
– 프로세스: 운영 체제가 할당하는 작업 단위, 프로세스 간 지원 공유 X
– 스레드: 프로세스 내에서 실행되는 작업 단위, 상위 프로세스 리소스 공유
노드 프로세스는 다중 스레드이지만 직접 처리 할 수있는 스레드는 하나이므로 단일 스레드로 표현
노드는 주로 멀티 스레드 대신 멀티 프로세싱
노드는 14 버전부터 멀티 스레드 지원