Elice

[TIL]엘리스트랙 5주차 1일 Node.js

NHyun 2023. 9. 5. 09:55

Node.js

어떠한 환경에서나 Javascript를 실행할 수 있게 해주는 실행기

 

특징 

싱글 쓰레드 - 비동기 -이벤트 기반

- 싱글 쓰레드이기 때문에 비동기 동작이 필요하고 비동기 동작을 구현하기 위해 이벤트 기반의 동작 방식을 사용함

 

싱글 쓰레드

 장점 - 쓰레드가 늘어나지 않기에 리소스 관리가 효율적

 단점 - 쓰레드 기반의 작업들의 효율이 떨어짐 ex) CPU연산 작업

그래서 Node.js는 비동기 동작으로 쓰레드 기반의 작업을 최소화한다.

 

이벤트 기반

비동기 동작의 완료를 처리하는 방법

-비동기 방식은 특정 동작을 실행한 후, 해당 동작을 전혀 신경 쓰지 않음. 대신 해당 동작이 완료도리 경우 실행할 함수를 미리 등록함.(이벤트를 등록한다 라고함)

-비동기 동작이 완료가 되면 미리 등록된 함수를 실행

 

 

callback 지옥 -> promise chaining으로 해결
promise 지옥 -> async - await로 해결

 

 

이벤트 루프(event loop)

- 이벤트(event)를 처리하는 반복되는 동작(loop)  즉, Node.js가 비동기-이벤트 동작을 처리하는 일련의 반복 동작. 비동기 코딩이 어떤 순서로 수행되는지에 대해 이해할 수 있음.

 

이벤트 루프 - 구성요소

Call Stack

  • 작성된 함수들이 등록되는 LIFO(Last In Frist Out, 후입선출) 스택
  • 이벤트 루프는 콜스택이 비어있을 때까지 스택의 함수를 실행

Message Queue

  • setTimeout 같은 지연실행 함수를 등록하는 FiFO(Frist In Frist Out, 선입선출)큐
  • 정해진 timing이 끝나고, 콜스택이 비어있을 경우 등록된 함수를 콜스택에 추가

Job Queue

  • Promise에 등록 된 콜백을 등록하는 FIFO큐
  • 상위 함수가 종료되기 전에 콜스택이 비어있지 않더라도 잡큐에 등록된 콜백을 콜스택에 추가

 

setTimeout은 메시지 큐를 이용해 콜스택이 비어있을 때 실행 됨

Promise는 잡큐를 이용해 상위함수가 종료되기 전에 실행 됨

 

Node.js process 모듈

process 모듈은 글로벌 객체이기에 require을 하지 않아도 사용 가능

process.arch Node.js가 컴파일된 프로세서의 아키텍처
process.argv 프로세서가 시작될 때 명령어와 함께 전달된 인수
process.env 사용자 환경 정보를 가진 객체
process.exit([code]) 프로세스 종료
process.memoryUsage() 메모리 사용 정보를 가진 객체
process.platform Node.js가 컴파일된 운영체제 플랫폼
process.uptime() 프로세스가 실행된 시간
process.version Node.js의 버전
process.versions Node.js에 종속된 프로그램의 버전 정보를 가진 객체