node.js 특성

이후띵·2022년 1월 28일
0

Node.js

목록 보기
3/10

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

  • node.js 내부의 구조

node.js의 특성

  1. 자바스크립트 런타임
    노드는 자바스크립트 런타임이다. 런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻한다. 따라서 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 해준다. 2008년 구글이 V8엔진을 사용하여 크롬을 출시하였다. 당시 V8엔진은 다른 자바스크립트 엔진과 달리 매우 빨랐고, 오픈 소스로 코드도 공개되었다. 속도문제가 해결되자 라이언 달은 2009년 V8엔진 기반의 노드 프로젝트를 시작했다. 노드는 V8과 더불어 libuv라는 라이브러리를 사용한다. V8과 libuv는 C와 C++로 구현되어 있다. libuv라이브러리는 노드의 특성인 이벤트 기반, 논블로킹 I/O모델을 구현한다. 노드는 스스로를 이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적이라고 표현했다.

  2. 이벤트 기반
    이벤트 기반(evnet-driven)은 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식이다. 이벤트로는 클릭 네트워크 요청 등이 있을 수 있다. 이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두어야 한다. "이벤트 리스너에 콜백 함수를 등록한다" 고 표현한다.

https://velog.io/@nittre/블로킹-Vs.-논블로킹-동기-Vs.-비동기

  1. 논블로킹 I/O
    전 작업이 완료될 때까지 멈추지 않고 다음 작업을 수행함을 뜻한다. setTmeout(콜백, 0) - 코드를 논블로킹으로 만들기 위해 사용하는 기법 중 하나이다. 노드에서는 다른 방식을 주로 사용한다. 밀리초를 0으로 설정했으므로 바로 실행되는 것이 아닌가 착각할 수 있다. 하지만 브라우저와 노드에서는 기본적인 지연시간이 있으므로 바로 실행되지 않는다. HTML5 브라우저는 4ms, 노드에서는 1ms의 지연 시간이 있다.
  1. Single Thread
    자바스크립트와 노드에서 논블로킹이 중요한 이유는 바로 단일 쓰레드이기 때문이다. 한번에 한 가지 일밖에 하지 못하므로 어떠한 작업에서 블로킹이 발생하면 다음 일을 처리하지 못한다.

node.js의 장단점

장점

  • 멀티 스레드 방식에 비해 컴퓨터가 자원을 적게 사용함.
  • I/O 작업이 많은 서버로 적합.
  • 멀티 스레드 방식보다 쉬움.
  • 웹 서버가 내장되어 있음.
  • 자바스크립트를 사용함.
    -JSO 형식과 호환하기 쉬움.

단점

  • 싱글 스레드라서 CPU 코어를 하나만 사용함.
  • CPU 작업이 많은 서버로는 부적합.
  • 하나뿐인 스레드가 멈추지 않도록 관리해야됨.
  • 서버 규모가 커졌을 때 관리가 어려움.
  • 어중간한 성능.

안정성과 보안성의 측면의 문제도 이미 충분히 검증되었다. 규모가 큰 곳으로는, NASA, Air BnB, woober, Netflix, linked in 등에서 사용되고있다. 페이팔, 월마트, 이베이 같이 결제시스템을 사용하는 대기업들도 노드로 서비스를 운영한다.

profile
이후띵's 개발일지

0개의 댓글