본문 바로가기
GGM/네트워크

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

by DDongYeop 2023. 3. 7.
728x90

 

1 - 1. 노드의 정의 

1. 노드의 정의 

 공식 홈페이지의 설명

  - Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다. 

 노드는 서버가 아닌가요? 서버라는 말이 없네요.

  - 서버의 역할도 수행할 수 있는 자바스크립트 런타임

  - 노드로 자바스크립트로 작성된 서버를 실행 할 수 있음

  - 서버 실행을 위해 필요한 http/https/http2 모듈을 제공

 

2. 런타임

 노드 : 자바스크립트 런타임

  - 런타임 - 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상 머신(크롬의 V8 엔진 사용)의 상태 

  - 노트 : 자바스크립트로 만든 프로그램들을 실행할 수 있게 해 줌

  - 다른 런타임으로는 웹브라우저(크롬, 엣지, 사파리, 파이어폭스 등)가 있음 

  - 노드 이전에도 자바스크립트 런타임을 만들기 위한 많은 시도

  - But, 엔진 속도 문제로 실패

 

 

2. 내부구조

 2008년 V8엔진 출시, 2009년 노드 프로젝트 시작

 노드는 V8과 libuv를 내부적으로 포함 

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

  - 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 작업 (파일 시스템 접근, 네트워크 요청), 압축,암호화 드ㅜㅇ

  - 나머지 코드는 블로킹 방식으로 실행됨

  - I/O작업이 많을 때 노드 활용성이 극대화

function longRunningTask()
{
	// 오래걸리는 작업 
    console.log('작업 끝');
}

console.log('시작');
longRunningTask();
console.log('다음 작업');

 

 

function longRunningTask()
{
	// 오래걸리는 작업 
    console.log('작업 끝');
}

console.log('시작');
setTimeout(longRunningTask, 0);
console.log('다음 작업');

 

 

2. 프로세스 vs 스레드

 플고세스와 스레드

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

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

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

 노드는 주로 멀티 스레드 대신 멀트 프로세슷 활용

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

728x90

'GGM > 네트워크' 카테고리의 다른 글

20230309 - 네트워크 - 노드  (0) 2023.03.09

댓글