상세 컨텐츠

본문 제목

Node.js와 비동기

웹/Node.js

by 초띠 2023. 6. 20. 22:08

본문

<Node.js 란>

V8 으로 만들어진 이벤트 기반의 자바스크립트 런타임입니다.

웹서버와 같이 확장성 있는 네트워크 프로그램을 제작하기 위해 만들어졌습니다.

주로 서버를 실행하는 데 사용됩니다.

 

대부분의 자바스크립트는 웹 브라우저에서 실행되는데, node.js 는 서버 측에서 실행됩니다.

 

<비동기 프로그래밍이란>

비동기 방식이란 요청과 결과가 동시에 일어나지 않는 것입니다.

따라서 비동기 프로그래밍은 특정 코드의 처리가 완료되기 전 실행 중에도 아래로 계속 내려가며 다음 코드를 수행합니다.

 

 

<Node.js의 비동기 동작 방식>

node.js는 *싱글 스레드 기반으로 동작하는 서버입니다.

   *하나의 프로세스가 하나의 일만 처리하는 것

따라서 비동기 방식을 채택하여 한번에 여러 일을 처리할 수 있게 만들어졌습니다.

 

node.js 에서의 비동기 처리는 이벤트 루프의 방식으로 풀어냅니다.

 

이벤트 루프는 Node.js의 실행 컨텍스트 중 하나로, 다른 실행 컨텍스트와 함께 호출 스택(Call Stack)에 관리됩니다. 이벤트 루프는 무한 루프에서 실행되며, 다음과 같은 구성으로 작동합니다.

  1. 이벤트 루프는 호출 스택에서 현재 실행되는 작업이 있는지 확인합니다. 호출 스택에 아무것도 없으면 이벤트 루프는 작업을 기다리는 이벤트 큐를 확인합니다.
  2. 이벤트 큐에서 첫 번째 이벤트를 가져와서 호출 스택에 넣습니다. 이벤트는 보통 비동기 콜백 함수이며, 파일 시스템 또는 네트워킹 같은 작업의 결과일 수 있습니다.
  3. 호출 스택에서 이벤트 핸들러를 실행합니다. 이벤트 핸들러는 비동기 콜백 함수이므로, 호출 스택에서 실행되고 있는 다른 함수와 병행하여 실행됩니다.
  4. 이벤트 핸들러가 실행을 마치면, 호출 스택은 이벤트 핸들러를 제거하고 다시 이전 단계로 돌아가서 호출 스택이 비어 있는지 확인합니다.

이러한 작업을 반복하면서 node.js 는 싱글 스레드에서도 다중 요청 처리와 같은 비동기 작업을 지원하며 높은 처리량과 확장성을 가집니다.

 

console.log('Before');
setTimeout(function() {
  console.log('Node');
}, 1000);
console.log('After');

 

위 코드는 node.js 에서 비동기식으로 setTimeout 함수를 사용하여 일정 시간 후에 실행하는 node.js에서의 대표적인 비동기식 코드입니다.

 

setTimeout 함수는 첫 번째 인자로 받은 콜백 함수를 두 번째 인자로 받은 시간(ms) 후에 실행합니다.

실행 결과는 "Before", "After", "Node" 순으로 출력됩니다.

이때 "Node"는 1초 후에 출력됩니다.

' > Node.js' 카테고리의 다른 글

REST API (REpresentational State Transfer Application Programming Interface)  (0) 2023.06.25
Node.Js 함수  (0) 2023.03.15

관련글 더보기