PROGRAMMING/node.js

[node.js] 노드제이에스 정의, 서버/클라이언트, 이벤트, 논블로킹, 장점, 단점 기초ver

seulda 2021. 4. 7. 17:10
728x90

Node.js

  • 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임.
  • 이벤트 기반, 논플로킹 I/O 모델을 사용해 가볍고 효율적.
  • Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈소스 라이브러리 생태계

 

☞ 서버 : 네트워크를 통해 클라이언트에 정보와 서비스를 제공하는 컴퓨터 또는 프로그램

클라이언트 : 요청을 보내는 주체
(ex_ 브라우저, 데스크톱 프로그램, 모바일 앱, 다른 서버에 요청으로 보내는 서버 등)
클라이언트가 요청(request)을 보내면, 서버는 그에 따른 응답(response)을 준다.

 

 

☞ 런타임 : 특정 언어로 만든 프로그램들을 실행할 수 있는 환경

V8엔진이 사용되기 이전에는 자바스크립트 실행 속도가 좋지 못해 인터넷 브라우저 위에서만 실행할 수 있었으나, 구글이 V8엔진을 사용하여 크롬을 출시하자 실행 속도 문제가 해결되어 노드가 발전하는 계기가 됨
노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 해준다. (= 자바스크립트 런타임)

 

 

☞ 이벤트 기반, event-driven : 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식

(이벤트 ex_ 클릭, 네트워크 요청 등)
이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해둬야함
= 이벤트 리스너(event listener)에 콜백(callback)함수를 등록한다고 표현

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

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

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

 

( 코드가 실행되면 : 호출 스택에 메인함수 등 함수들이 쌓임 - 함수들 중 작업콜백이나 이벤트리스너들은 백그라운드로 감 - 백그라운드에서 콜백함수들을 태스크 큐로 보냄 - 호출 스택 실행이 끝나 비워지면 이벤트 루프가 태스크 큐의 콜백을 호출스택으로 올림 - 콜백함수가 호출스택에서 실행되고 호출스택은 다시 비워짐 -> 이벤트 루프는 태스크 큐에 콜백이 들어올 때까지 대기 )

 

 

☞논블로킹 방식 : 이전 작업이 완료될 때까지 멈추지 않고 다음 작업을 수행하는 방식

이벤트 루프를 활용해 오래 걸리는 함수를 백그라운드로 보내 다음 코드가 먼저 실행되게 하고, 그 함수가 다시 태스크 큐를 거쳐 호출 스택으로 올라오기를 기다리는 방식

setTimeout(콜백, 0) : 코드를 논블로킹으로 만들기 위해 사용하는 기법

프로세스 : 운영체제에서 할당하는 작업의 단위. 노드나 인터넷 브라우저 같은 프로그램은 개별적인 프로세스이며, 프로세스 간에는 메모리 등의 자원을 공유하지 않음
스레드 : 프로세스 내에서 실행되는 흐름의 단위. 하나의 프로세스는 스레드를 여러개 가질 수 있음. 스레드들은 부모 프로세스의 자원을 공유하기 때문에 같은 메모리에 접근 가능

싱글 스레드 : 하나의 스레드는 한가지의 일밖에 하지 못하기 때문에, 싱글 스레드-블로킹 모델 시에는 일을 처리하기까지 오래걸림 -> 싱글 스레드-논블로킹 모델을 사용하여 하나의 스레드로도 여러 일을 처리할 수 있게 함
멀티 스레드 : 여러 스레드를 두게 되면 일의 처리속도가 향상되지만, 낭비(?)가 생김

 

노드는 스레드를 늘리는 대신(멀티 스레딩), 프로세스 자체를 복사해 여러 작업을 동시에 처리하는 멀티 프로세싱 방식을 택함

 

 

----------

 

 

서버로써 노드의 장점
: 멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함, I/O 작업이 많은 서버로 적합, 멀티 스레드 방식보다 쉬움, 웹 서버가 내장되어 있음, 자바스크립트를 사용, JSON 형식과 호환하기 쉬움
서버로써 노드의 단점
: 싱글 스레드라서 CPU코어를 하나만 사용함, CPU 작업이 많은 서버로는 부적합, 하나뿐인 스레드가 멈추지 않도록 관리해야함, 서버 규모가 커졌을 때 서버를 관리하기 어려움, 어중간한 성능

 

-> 개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는 데에 적합 !

 

 

728x90