그럼에도 불구하고

👨‍💻

[Node.js] Node Life Cycle & Event Loop 본문

Node.js/Node.js basics

[Node.js] Node Life Cycle & Event Loop

zenghyun 2023. 1. 27. 19:45

Node Life Cycle & Event Loop에 대해 알아보자

 

 

 

 

※ node app.js 실행

node app.js를 파일을 실행하면 스크립트가 시작되어 Node.js가 파일 전체를 살펴보고 코드를 분석한 후 변수와 함수를 등록한다. 

=> 전체 코드를 읽고 실행

 

※ 계속 작동하는 이벤트 리스너 

전체 코드를 읽고 실행하는데 목적을 달성해도 프로그램을 끄지 않는다. 

이는 Node.js에서 중요한 개념인 이벤트 루프 때문이다. 

 

Node.js가 관리하는 이벤트 루프는 작업이 남아 있는 한 계속해서 작동하는 루프 프로세스로, 이벤트 리스너가 있는 한 계속 작동한다. 등록 후 제거하지 않았던 이벤트 리스너로 createServer가 만든 요청 리스너가 있다. 

 

createServer에 계속되는 이벤트 리스너라는 함수를 넣어서 만든 이벤트 리스너(요청 리스너)를 제거하지 않았으며, 서버가 계속 운영되기 위해서는 제거되면 안 된다. 

 

즉, 코어 노드 애플리케이션은 이 이벤트 루프에 의해 관리된다.

 

이처럼 Node.js에는 서버 관리를 포함한 다양한 방면에서 이벤트 드리븐 접근 방법을 갖는다.

서버 관리가 중요한 부분이지만, 예를 들어 데이터베이스에 접근할 때도 데이터 요청을 넣으라는 메시지를 보내고 실행해야 하는 함수를 등록하게 된다.

 

Node.js가 이런 패턴을 사용하는 이유는 단일 스레드 JavaScript를 실행하기 위함인데

즉, 실행 중인 컴퓨터에서 전체 노드 프로세스가 하나의 스레드를 사용한다는 뜻이다. 

 

Node.js를 통해 서버를 생성했으면 수 천, 수 만개의 들어오는 요청을 다룰 수 있다.

만약, 한 요청이 들어올 때마다 멈추고 실행하기를 반복한다면, 효율성이 떨어질 것이다. 

그래서 이벤트 루프라는 개념을 통해 계속해서 작동되며,  이벤트가 일어나면 코드를 실행하도록 하는 것이다.

 

만약 들어오는 요청이 두 개라면 두 개의 이벤트를 처리해야 하니 의문점이 생기지만,

사실 요청을 처리하는 것은 아주 빠를뿐더러 배후에서는 운영 체제의 영향력에 따라 약간의 다중 스레드를 사용하기도 한다. 

 

이렇듯 Node.js의 loop는 꼭 기억해야 할 개념이며, 리스너가 있거나 createServer가 계속해서 리스너를 생성하는 한 Node.js의 loop는 계속 되는 것이다.

 

마지막으로 언젠가 루프를 꼭 제거해야 한다면 process.exit를 사용해서 제거하면 된다.

Comments