본문 바로가기

서버

[Node.js] 무엇인가

728x90

/* Node.js란 */

현재 다니고 있는 회사에서 nodejs 기반 nestjs를 쓰기 때문에 nodejs 를 공부할 필요가 있다고 느꼈다.

nodejs 는 Chrome V8 Javascript 엔진으로 빌드 된 Javascript 런타임이라고 노드 공식 사이트에서 소개 된다.

노드는 서버를 실행하는 데 제일 많이 사용된다.

 

Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.

 

내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도 소프트웨어 없이 동작이 가능하다.

 

 

  • Javascript는 독립적인 언어가 아닌 스크립트 언어이다
  • 크르비트 언어는 특정한 프로그램 안에서 동작해서 웹 브라우즈 프로그램 안에서만 동작한다.
  • Nodejs는 Javascript를 웹 브라우저에서 독립시킨 것으로 Nodejs를 설치하면 터미널프로그램에서 실행 가능하다
  • 한가지 언어로 웹 페이지를 만들 수 있다

/* 이벤트 기반 */

  • 노드는 V8과 더불어 libuv라는 라이브러리를 사용한다.
  • libuv 라이브러리는 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있다.
  • 이벤트 기반 이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미한다.
  • 특정 이벤트가 발생할 때 무엇을 할 지 미리 등록해두고, 이를 이벤트 리스너에 콜백함수를 등록한다.
  • 이후 이벤트가 발생하면 리스터에 등록해둔 콜백함수를 호출하며, 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기한다.

/* 이벤트 루프 */

 

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

nodejs는 논 블로킹 기반이기 때문에 함수 호출 시 당장 실행하는 것이 아니라 그 콜백 함수는 이벤트 큐에 쌓이고 호출 스택에 비어있을 때 이벤트 루프가 그 콜백함수를 호출 스택에 넣어 실행합니다.  

 

/* 싱글 스레드 */

  • Nodejs는 싱글 스레드 기반이다.
  • 프로세스 : 운영체제에서 할당하는 작업의 단위이다. 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스이다. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.
  • 스레드 : 스레드는 프로세스 내에서 실행되는 흐름의 단위이다. 프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.

/* 그럼 어디에 적합한가? */

우리가 작성하는 코드는 모두 스레드 하나에서 처리되기 때문에 코드가 CPU 연산을 많이 요구하면 스레드 하나가 혼자서 감당하기 어렵다.

즉, 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는데 노드는 적합하다. 예를 들어 네트워트나 데이터베이스, 디스크 작업 같은 I/O에 특화되어있다. 실시간 채팅 애플리케이션, 주식 차트도 포함된다.

 

 

728x90

'서버' 카테고리의 다른 글

[HTTP] OSI 7계층  (1) 2024.09.02
[Node.js] 이벤트 루프  (0) 2024.07.07
[서버] RESTful API  (0) 2024.03.30
[HTTP] 멱등성  (0) 2024.02.03
REST API  (0) 2024.02.03