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에 종속된 프로그램의 버전 정보를 가진 객체 |