본문으로 바로가기

[Node] 노드의 핵심 개념

category Back-End/Node.js 2018. 12. 7. 14:35


노드의 핵심 개념


본 내용은 ZeroCho 님의 저서 Node.js 교과서를 학습한 내용을 바탕으로 작성한 내용입니다.




1. 핵심 개념 이해하기

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

    • 서버
- 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램.
클라이언트란 요청을 보내는 주체로, 브라우저, 모바일 앱, 다른 서버에 요청을 보내는 서버 등 때에 따라 달라질 수 있다.
> 노드는 자바스크립트 애플리케이션이 서버로서 기능하기 위한 도구를 제공하기 때문에 서버로써의 역할을 수행할 수 있다.

    • 자바스크립트 런타임
- 런타임은 특정 언어로 만든 프로그램을 실행할 수 있는 환경을 말한다.
> 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 해준다.

- V8과 더불어 libuv 라이브러리를 사용한다.
> libuv 는 노드의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현하고 있다.

    • 이벤트 기반 (event-driven)
- 이벤트가 발행할 때 미리 지정해둔 작업을 수행하는 방식
> 이벤트로는 클릭이나 네트워크 요청 등이 있다.
> 미리 작업을 지정해두는 것을 '이벤트 리스너에 콜백 함수를 등록한다.' 고 한다.
> 이벤트 루프 : 여러 이벤트가 동시에 발생했을 때, 어떤 순서로 콜백 함수를 호출할지를 판단하는 행위

- setTimeout(콜백, 밀리초);  ->  특정 밀리초(1000분의 1초) 이후에 콜백에 해당하는 코드를 실행하는 함수

    • 논블로킹 I/O
- 이전 작업이 완료될 때까지 멈추지 않고 다음 작업을 수행하는 것.
setTimeout(콜백, 0) : 코드를 논블로킹으로 만드는 기법 중 하나. 브라우저와 노드에서는 기본적인 지연 시간이 있으므로 바로 실행 되지는 않는다. HTML5 브라우저에서는 4ms, 노드에서는 1ms의 지연시간이 있다.

블로킹 : 이전 작업이 끝날때까지 기다렸다가 다음 작업을 수행한다.

    • 싱글 스레드
- 노드는 스레드를 늘리는 대신, 프로세스 자체를 복사해 여러 작업을 동시에 처리하는 멀티 프로세싱 방식을 사용한다.



2. 서버로서의 노드 - 서버로 사용할 때의 장단점

    • 노드는 안정성과 보안성 측면에서도 충분히 검증되어 있다.
    • NASA, 이베이, 월마트, 넷플릭스 등 여러 대기업들도 노드로 서비스를 운영한다.

 장점

단점 

  멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함

  싱글 스레드라서 CPU 코어를 하나만 사용함

  I/O 작업이 많은 서버로 적합

  CPU 작업이 많은 서버로는 부적합

  멀티 스레드 방식보다 쉬움

  하나뿐인 스레드가 멈추지 않도록 관리해야 함

  웹 서버가 내장되어 있음 (누구나 쉽게 입문 가능)

  서버 규모가 커졌을 때 서버를 관리하기 어려움

  자바스크립트를 사용함 (하나의 언어로 웹 사이트 개발 가능)

  어중간한 성능

  JSON 형식과 호환하기 쉬움

 




3. 서버 외의 노드

    • 노드는 자바스크립트 런타임이기 때문에 용도가 서버에만 한정되어 있지 않다.
- 노드 기반의 개발 도구들
> 웹 프레임워크 : Angular, React, Vue, Meteor 등
> 모바일 개발 도구 : React Native, Ionic Framework
> 데스크톱 개발 도구 : Electron (만들어진 프로그램 : Atom, Slack, Discord 등)





'Back-End > Node.js' 카테고리의 다른 글

[Node] ES2015 (ES6) 문법  (1) 2018.12.12