런타임 개념과 nvm으로 node.js 설치(unbuntu)

📅 TIL #31


👉 JavaScript 런타임


런타임이란?

JavaScript 런타임이란 이름만 들어보면 엄청 어려울 것 같은 내용이지만, 사실 나는 이미 JavaScript 런타임을 사용하고 있었다.

런타임이란 프로그래밍 언어가 구동되는 환경을 뜻한다. 즉, “어떤 프로그래밍 언어가 동작할 수 있는 프로그램”이라고 보면 된다.



👉 노드는 자바스크립트 런타임이다.


노드는 자바스크립트 프로그램을 컴퓨터에서 실행하게 해준다.

node.js가 나오기 전에는 자바스크립트를 인터넷 브라우저에서만 실행할 수 있었다. 그런데 2008년 구글이 V8 엔진이 장착된 크롬을 출시하자, V8 엔진을 기반으로 한 node.js가 탄생하였다.

node.js는 이벤트 기반, 논블로킹, I/O 모델을 구현하고 있다.

자바스크립트_엔진V8

엔진의 주요 두 구성요소는

  • Memory Heap : 메모리 할당이 일어나는 곳
  • Call Stack : 코드 실행에 따라 호출 스택이 쌓이는 곳



이벤트 기반(event-driven)이란?


이벤트가 발생할 때 미리 지정해 둔 작업을 수행하는 방식을 의미한다. 클릭이나 네트워크 요청 등 특정 이벤트가 발생할 때, 이벤트 리스너(event-listener)에 콜백(callback)함수를 등록해두는 방식이다.

발생한 이벤트가 없거나 발생했던 이벤트를 다 처리하면 노드는 다음 이벤트가 발생할 때 까지 대기한다.

이벤트 기반 모델에서는 이벤트 루프라는 개념이 등장한다. 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할 지를 이벤트 루프가 판단한다.

자바스크립트_이벤트루프

  • 이벤트 루프 : 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할이다. 노드가 종료될 때 까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 불린다.

  • 태스크 큐 : 이벤트 발생 후 호출되어야 할 콜백 함수들이 기다리는 공간이다. 콜백들이 이벤트 루프가 정한 순서대로 줄을 서 있으므로 콜백 큐 라고 불린다.

  • 백그라운드 : 타이머나 I/O 작업 콜백 또는 이벤트 리스너들이 대기하는 곳이다.



싱글 스레드란?

자바스크립트는 싱글 스레드 기반이고 콜백 큐를 사용한다.

그렇다면 스레드란?

컴퓨터 작업을 처리할 수 있는 일손이다. 노드는 싱글 스레드이므로 주어진 작업을 혼자서 처리해야 한다. 따라서 한 번에 한 가지 일 밖에 처리하지 못하므로 자바스크립트와 노드에서 논블로킹이 중요하다.

  • 프로세스 : 운영체제에서 할당하는 작업의 단위이다. 노드나 인터넷 브라우저같은 프로그램은 개별적인 프로세스이다. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.

  • 스레드 : 프로세스 내에서 실행 되는 흐름의 단위이다. 하나의 프로세스는 스레드를 여러개 가질 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 즉, 같은 메모리에 접근할 수 있다.

노드 프로세스도 내부적으로는 스레드를 여러 개 가지고 있으나 실제 노드로 제어할 수 있는 스레드는 하나 뿐이다. 노드는 스레드를 늘리는 대신, 프로세스 자체를 복사해 여러 작업을 동시에 처리하는 멀티 프로세스 방식을 택했다. 자바스크립트 언어 자체가 싱글 스레드 특성을 가지고 있기 때문이다.



👉 (unbuntu) node.js 설치


  1. 관련 패키지 설치하기
  2. nvm 설치
  3. bashrc를 통해 적용
  4. nvm 설치 확인
  5. nvm을 이용하여 node.js 설치하기



1) 관련 패키지 설치하기

nvm을 설치하기 위해 apt를 이용하여 설치하고자 한다. 그러기위해 apt로 다음과 같은 모듈을 먼저 설치한다.

sudo apt-get install build-essential libssl-dev


2) nvm 설치

curl을 이용하여 nvm을 설치 최신버전 확인

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash


3) bashrc를 통해 적용

bashrc를 업데이트 한다.

source ~/.bashrc


4) nvm 설치 확인

정상적으로 설치되었는지를 확인한다.

nvm --version
> 0.37.2


5) nvm을 이용하여 node.js 설치하기

node.js 공식 사이트에 LTS라고 적힌 버전을 기준으로 설치한다.

nvm install 14.15.5

확인

node -v
> 14.15.5



개발을 하다보면 다양한 node.js 버전에 대응해야 할 일이 생긴다고 한다.

예를 들어 node 12.18.3 버전에서는 내가 작성한 코드가 잘 돌아갔는데, 최신 버전인 14.15.5 에서는 안 돌아가는 경우가 생길 수도 있다.

이럴 경우 그러면 node를 지웠다가 버전에 맞게 다시 설치해야 하나? 라고 생각할 수 도 있지만, 이 문제를 NVM(Node Version Manager)이 해결해준다.


nvm use 버전넘버

// code
nvm use 12.18.3

// 다시 돌아갈 때
nvm use 14.15.5



오늘 배운 내용을 간단하게 정리해보았다.

이머시브 코스에 와서 정리하면서 느낀점은 새로운 단어를 보게 되고 그 단어에 대해서 찾아보고 또 거기서 새로운 단ㅇ… 내 자신이 재귀함수가 된 것 같은 기분이 들었다…

자바스크립트를 더 깊게 블로깅 하고 싶었지만 앞으로 배울 내용이기 때문에 천천히 다뤄보려고 한다.



👊 내일의 TIW(today I Will)

Git Workflow, Git Branch