림찌의 개발일기 💻

[Node.js] Node.js 란 본문

Node.js

[Node.js] Node.js 란

림찌 🥰 2021. 6. 24. 12:08

 

Node.js 란 무엇일까 🤔

-

node.js 는 자바스크립트로 빌드된 자바스크립트 런타임이다.

일단 특징 세가지를 언급하고 자세한 특징을 서술하겠다.

 

런타임 환경?
특정언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻한다.
node는 javascript 프로그램을 컴퓨터에서 실행을 할 수 있다. 즉, node.js 는 자바스크립트 실행기라고 봐도 된다.

 

특징

1. 이벤트 기반 개발 모델이다. (ex. click event)

2. 논블록킹 I/O 모델을 제공한다.

3. 싱글 스레드를 사용한다. 

4. NPM 이라는 자바스크립트 오픈소스 라이브러리 저장소 생태계를 제공한다.

 

1. 이벤트 기반 개발 모델이다.

이벤트 기반 개발 모델이란, 이벤트가 발생할때 미리 지정해둔 작업을 수행하는 개발 방식이다.

이벤트가 발생하면 미리 등록해둔 이벤트 리스너 콜백 함수가 실행되는 구조이다.

 

2.  논블록킹 I/O 모델을 제공한다.

논블로킹은 이전 작업을 완료하기 전까지 기다리지 않고 바로 다음 작업을 실행하는 것을 말한다.

반대로 블로킹은 하나의 작업을 완료하기 전엔 다음 작업으로 넘어가지 않고 기다린다.

 

 

그림을 보면 블로킹 방식은 작업1이 끝나면 작업 2를 시작하고 작업 2가 끝나면 작업3이 시작된다. 

시간을 따져보면 총 20초가 걸린다.

그러나 논블로킹 방식은 작업이 끝나기 전에 다음 작업이 실행되기 때문에 시간이 더 단축된다.

그렇다고 동시작업 = 논블로킹이 아니다. 동시성은 동시 작업을 논블로킹 처리를 해야 얻을 수 있는 것이다. 

 

3. 싱글 스레드를 사용한다. 

싱글 스레드란, 말 그대로 스레드를 하나만 사용한다는 걸 의미한다.

스레드는 프로세스 내에서 실행되는 흐름의 단위이며 프로세스는 여러개의 스레드를 생성하여 동시에 처리할 수 있다. 여기서 말에 어폐가 느껴질 것이다. 노드는 싱글 스레드라면서 왜 프로세스는 여러개의 스레드를 생성한다고 하지? 일단 프로세스가 여러개의 스레드를 생성하는 건 맞다. 그러나 node에선 그 스레드 중에 한개만을 직접 제어할 수 있기 때문이다. 

 

또다시 의문이 들것이다. 싱글 스레드를 사용하면 모든 처리를 하나의 스레드로 처리를 해야하는 문제는 어떻게 할 것인가.

그 문제의 해결은 논블로킹이 해준다.

 

스레드는 어떻게 보면 일꾼이라고 생각하면 되는데, 블로킹 모델이냐 논블로킹 모델이냐에 따라 일처리 방식이 다르다. 

여러가지 일이 주어졌다고 가정하자. 블로킹 모델의 싱글 스레드는 혼자서 모든 일을 하는데, 한가지 일이 다 끝나기 전까진 다른 일을 전혀 하지 못하는 일머리가 없는 직원이라고 생각하면 된다. (내 기준) 반면에 논블로킹 모델의 싱글 스레드는 혼자서 모든 일을 하지만, 일머리가 좋아서 한번에 여러개의 일도 처리해주는 직원이라고 생각하면 된다.

 

멀티 스레드 말고 싱글 스레드를 사용하는 이유?

비용 절약과 자원 낭비를 막기 때문이라고 보면 된다. 만약 일이 엄청 많아서 스레드라는 직원을 여러명 고용했다 치자. 일이 바쁠때는 효율적이지만, 일이 없을때는 노는 스레드가 생겨나고 자원이 낭비되는데다가 이 스레드라는 직원을 고용하고 해고하는데에 드는 비용도 만만잖다. 그래서 멀티 스레드가 아닌 싱글 스레드를 사용하는 것이다.

 

 

4. NPM 이라는 자바스크립트 오픈소스 라이브러리 저장소 생태계를 제공한다.

 

NPM 이란 개발자들이 개발한 소스를 packaging 해서 올려놓는 외부 저장소를 말한다. 쉽게 말하자면 오픈소스 저장소이다. 우리가 개발을 할때 라이브러리를 끌어오기 위해 쓰는 명령문 npm i ~ 같은 건 npm 에서 끌어오는 것이다. 이런 저장소는 Node를 제외하고도 많다. 파이썬의 경우는 pipe 패키지 저장소가 있고 C#은 nuget 패키지 저장소가 있다.

 

나도 한때는 명령프롬포트에 npm 명령어를 쓰면서 이걸 대체 왜 쓰지..? 할 때도 있었다. 이렇게 개념을 잡고 가니 왜 npm을 치는지, npm에서 다운을 받는지 확실하게 알 수 있었다.

 

 

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

nodemon app crashed error 해결  (1) 2022.02.26
[node.js] MVC패턴과 openAPI(RESTful)  (0) 2021.06.29
Comments