Node.js 란?

Javascript를 브라우저 밖에서도 실행할 수 있도록 하는 Javascript 런타임!

<aside> 💡 런타임 : 특정 언어로 만든 프로그램을 실행할 수 있는 환경.

</aside>

비동기(Asynchronous), 이벤트 주도 (Event-driven), Non-Blocking I/O, 확장성 등의 말들은 Node.js를 써보았다면 한번쯤은 들어봤을 키워드

**프로세스(Process)**와 **스레드(Thread)**는 Node.js 동작원리를 이해함에 있어 중요한 개념

<aside> 💡 프로세스 : 메모리에 올라와 실행되고 있는 프로그램의 인스턴스. 실행되고 있는 프로그램(독립적인 개체). 스레드 : 프로세스 내에서 할당받은 실행의 단위. 프로세스당 CPU의 코어 갯수만큼 생성 가능.

</aside>

이벤트 기반

이벤트가 발생할때 미리 지정해준 작업을 수행하는 방식을 의미. Node.js는 이벤트 리스너에 등록해둔 콜백함수를 실행하는 방식으로 동작

router.get('/', (req,res,next)=> {
  // router.get 이벤트에 대한 콜백함수 로직
}
* 흔히 사용하고 있는 router도 이벤트 기반으로 동작하고 있습니다.

이벤트에 따라 호출되는 콜백함수를 관리하는 것이 바로 이벤트 루프

자바스크립트가 단일 쓰레드 기반임에도 불구하고 Node.js가 non-blocking I/O 작업을 수행할 수 있게하는 핵심기능.

이벤트 루프에는 6개의 단계(Phase)가 있다.

스크린샷 2023-08-22 오후 5.44.30.png

Timer 단계