20230307 – 네트워크 – 컴퓨터 네트워크 1장 – 1

  • by

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 버전부터 멀티 스레드 지원