[Node.js] 똑똑,, node 백그라운드는 어떤 일을 하고 있나요

초이지수·2022년 8월 25일
0

Node.js

목록 보기
2/7

single Thread, Event Loop & Blocking Code

자바스크립트는 싱글 스레드만 사용한다.
스레드(운영 체제에서의 프로세스)

하나의 스레드로 여러 요청을 어떻게 다룰 수 있을까?
node 백그라운드는 어떤 요청을 어떻게 처리하고 있는지 알아보자!


🐶 크게 먼저 살펴보자!


☄️ Event Loop

Node.js가 시작하면 프로그램에 의해 자동으로 시작됨
이벤트 콜백을 다룬다.
특정 이벤트가 일어났을 때 바로 이벤트 루프가 해당 코드를 실행하는 것!
모든 콜백을 파악하고 있어서 코드를 실행함.

금방 처리할 수 있는 코드를 포함한 콜백만 다룸
시간이 오래걸리는 파일 연산에는 도움이 되지 않음.

☄️ Worker Pool

Node.js가 시작하면 프로그램에 의해 자동으로 시작됨
시간이 오래걸리는 파일 연산을 처리.

JavaScript 코드로부터 완전히 분리되어 다른 여러 스레드에서 작동할 수 있음.
앱을 실행하는 운영 체제와 깊은 연관이 있다.
-> 코드로부터 완전히 분리되었기 때문에 무거운 작업을 모두 처리할 수 있는 것!

WorkerPool 덕분에 node.js가 성능을 유지할 수 있다.


☄️ Event Loop & Worker Pool

Worker Pool

  1. 워커가 일처리를 마치면(파일 읽기를 마치면)
  2. 읽기 파일 연산에 대한 콜백이 시작됨

Event Loop

  1. 이벤트 루프가 이벤트와 콜백을 책임지기 때문에, 이벤트 루프로 들어가게 됨
  2. node.js가 알맞은 콜백을 실행

🐶 Event Loop를 자세히 알아볼까요?

setTimeout , setInterval 메서드를 사용해
새로운 반복이 시작될 때마다 실행해야 하는 타이머 콜백이 있는지 확인한다.


☄️ Event Loop의 사이클

⚡️ 1. Timers

타이머가 끝나면 실행할 함수를 node.js가 알고 있어서
항상 새로운 루프 반복이 일어날 때마다 시간이 다 된 콜백을 실행함

⚡️ 2. Pending Callbacks - 다른 콜백 체크

읽기 및 쓰기 파일의 연산이 끝나서(오래걸리는 블로킹 연산) 들어온 콜백을 실행

만약 처리되지 않은 콜백이 너무 많이 있다면 루프 반복을 이어가면서 남은 콜백을 다음 반복에서 실행하도록 미룬다.

⚡️ 3. Poll

Node.js가 새로운 I/O 이벤트를 찾아 최대한 해당 이벤트의 콜백을 빨리 실행하도록 함.
타이머가 다 되어 실행해야하는 콜백도 확인

⚡️ 4. Check

setImmediate 콜백 실행
setTimeout setInterval처럼 바로 실행되기는 하지만 반드시 열린 콜백이 모두 실행된 다음에 실행됨!

⚡️ 5. Close Callbacks

닫힌 이벤트 콜백이 모두 실행

⚡️6. 프로그램 종료 전 등록했던 이벤트 핸들러가 남지 않았는지 확인

refs == 0


☄️ Node.js의 작동방식!

Node.js 코드는 논블로킹 방식으로 실행됨

⚡️ 논블로킹 방식

콜백, 이벤트 기반 방식
수많은 콜백과 이벤트를 등록해두면 특정 작업이 끝난 후에 Node.js가 해당 코드를 작동시킨다
코드가 바로 실행되서 메인 스레드를 막지 않도록 등록해 나중에 실행되게함.


Javascript 스레드는 항상 새 이벤트나 새로 들어오는 요청 등을 다룰 수 있게 됨.

더 이상 작업이 없을 때는 프로그램이 종료되는데 서버는 종료될 일이 없다!
createServe가 절대 끝나지 않는 이벤트에 대한 이벤트 리스너를 등록하기 때문

새로운 이벤트(요청)가 발생해도 이벤트 리스너의 등록을 취소하지 않음.
서버는 계속해서 들어오는 요청을 들어야함.


참고했던 자료

udemy - Maximilian Schwarzmüller

profile
닫혀 있어서 벽인 줄 알고 있지만, 사실은 문이다.

0개의 댓글