[Node.js]개념 이해하기

5361 단어 node.jsnode.js

📖Node.js

Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임.


📌서버란?

▪ 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램.
▪ 요청에 대한 응답뿐만 아니라 다른 서버에 요청을 보내는 클라이언트 역할을 하기도 함.


📌자바스크립트 런타임

▪ 런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻함.


📌이벤트 기반

▪ 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미.
ex) 클릭, 네트워크 요청 등

이벤트 리스너, 콜백 함수
특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두는 것.

이벤트 루프
▪ 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지 판단.
▪ 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할 담당.
▪ 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복.

백그라운드
▪ 타이머나 이벤트 리스너들이 대기하는 곳.
▪ 자바스크립트가 아닌 언어로 작성된 프로그램.
▪ 여러 작업이 동시에 실행될 수 있음.

태스크 큐
▪ 이벤트 발생 후, 백그라운드에서는 태스크 큐로 타이머나 이벤트 리스너의 콜백 함수를 보냄.
▪ 정해진 순서대로 콜백들이 줄을 서 있으므로 콜백 큐라고 부르기도 함.
▪ 콜백들은 보통 완료된 순서대로 줄을 서 있지만 특정한 경우에는 순서가 바뀌기도 함.

ex) 3초 뒤에 run 함수를 실행하는 코드

function run( )  {
   console.log('3초 후 실행');
}
console.log('시작')
setTimeout(run, 3000);
console.log('끝');

결과

시작
끝
3초 후 실행

과정
1. 호출 스택에 쌓임.
2. setTimeout 실행 시 콜백 run은 백그라운드로 보냄.
3. 백그라운드에서 3초 후 태스크 큐로 보냄.
4. 호출 스택 실행이 끝나 비워지면
5. 이벤트 루프가 태스크 큐의 콜백을 호출 스택으로 올림.
6. run이 호출 스택에서 실행되고 비워짐.
7. 이벤트 루프는 태스크 큐에 콜백이 들어올 때까지 대기.

  • 이벤트 루프는 호출 스택이 비어 있을 때만 태스크 큐에 있는 run 함수를 호출 스택으로 가져오므로 호출 스택에 함수들이 많이 들어있으면 3초가 지난 후에도 run함수가 실행되지 않을 수 있음.

📌논 블로킹 I/O

▪ 이전 작업이 완료될 때까지 대기하지 않고 다음작업을 수행함을 뜻함.
▪ 논 블로킹 =/= 동시 (동시성은 동시 처리가 가능한 작업을 논 블로킹 처리해야 얻을 수 있음.
<-> 블로킹: 이전 작업이 끝나야만 다음 작업을 수행할는 것을 의미.

ex)setTimeout을 사용한 논 블로킹 예제

function longRunningTask( )  {
   //오래 걸리는 작업
   console.log('작업 끝');
}
console.log('시작');
setTimeout(longRunningTask, 0);
console.log('다음 작업');

결과

시작
다음 작업
작업 끝

-> setTimeout(콜백, 0)은 코드를 논 블로킹으로 만들기 위해 사용하는 기법 중 하나임.


📌싱글스레드

▪ 스레드가 하나.
▪ 자바스크립트 코드가 동시에 실행될 수 없는 이유.

스레드
▪ 프로세스 내에서 실행되는 흐름의 단위.
▪ 프로세스는 스레드를 여러개 생성해 여러 작업을 동시에 처리할 수 있다.
▪ 스레드들은 부모 프로세스의 자원을 공유한다.
▪ 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.


프로세스
▪ 운영체제에서 할당하는 작업의 단위.
▪ 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스이다.
▪ 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.


📌멀티 스레딩 vs 멀티 프로세싱

멀티 스레딩
▪ 하나의 프로세스 안에서 여러 개의 스레드 사용.
▪ CPU 작업이 많을 때 사용.
▪ 프로그래밍이 어려움.


멀티 프로세싱
▪ 여러 개의 프로세스 사용.
▪ I/O 요청이 많을 때 사용.
▪ 프로그래밍이 비교적 쉬움.




📒Node.js 교과서 개정2판 책을 참고하여 작성하였습니다.

https://www.gilbut.co.kr/book/view?bookcode=BN002827

좋은 웹페이지 즐겨찾기