런타임(Runtime)이란?
프로래밍 언어가 구동되는 환경.
JavaScript는 Node 전에는 크롬 등과 같이 브라우저 내에서만 사용할 수 있는 한계 때문에 확장성이 좋지 못한 언어였다.- Node는 브라우저 뿐만 아니라 서버, 머신러닝, 데스크탑 앱과 같은 여러 분야에서 JS가 활용 될 수 있도록 해줬다.
이벤트 루프(Event Loop)
이벤트 루프는 세 가지로 이루어져 있다.
- 호출 스택(call stack)
- 백그라운드(background)
- 태스크 큐(task queue)
순서
- 실행 순서대로
호출 스택
에 쌓기 - 백그라운드 필요 작업은 백그라운드로 이동
- 백그라운드에서 작업이 완료되면
태스크 큐
로 이동 호출 스택
이 다완료
되면 이벤트 루프가태스크 큐
를호출 스택
으로 이동
논블록킹 I/O?
- 이전 작업이 완료될 때까지 기다리지 않고, 다음 작업들을 수행
- 오래 걸리는 작업은 백그라운드에서 처리
싱글 스레드
주어진 작업을 한 개의 스레드가 처리하는 방식
스레드?
작업을 실행하는 단위
여러 브라우저가 있을 때 모든 브라우저의 요청과 응답을 스레드 하나에서 처리하게 되고
멀티 스레드 같은 경우 여러 브라우저 요청과 응답에 있어서 브라우저 하나당 스레드가 하나 있어서 처리해주는 방식 정도로 이해해보자
싱글 스레드
- 주어진 작업을 혼자 처리하는 방식
- 스레드에 문제가 생길 시 전체에 문제가 생길 가능성이 있음
- 메모리나 기타 자원을 효율적으로 사용 가능
vs 멀티 스레드
- 여러개의 스레드가 일을 나눠 처리
- 하나의 스레드가 문제 생겨도 다른 스레드로 대체 가능
- 스레드간의 작업 전환 비용, 놀고 있는 스레드 문제 발생
Node.js
장점
- 싱글스레드, 논블로킹 I/O에 따른 빠른 속도
- 컴퓨터 자원을 덜 낭비
- I/O 작업이 많은 서버로 적합(채팅, 스트리밍)
- JavaScript를 사용하기에 FE 사용 용이
- 생산성이 높음
단점
- 싱글 스레드 기반이라 자원을 많이 잡아 먹는 작업이 오면 부하가 크게 걸린다.
- 싱글 스레드는 CPU 코어 1개만 사용 => CPU 작업 많은 서버로 부적합(게임 등)
- 로직이 복잡한 경우 콜박 함수 늪에 빠질 수 있다.
- 에러 발생시 프로세스 자체가 죽어버린다.
댓글