개발스토리

서버로서의 노드 본문

node.js

서버로서의 노드

무루뭉 2020. 12. 2. 22:07

서버로서의 노드

  • 노드는 기본적으로 싱글 스레드, 논 블로킹 모델을 사용한다.
  • 노드는(논 블로킹 방식으로 코드를 작성했다는 가정하에) libuv 라이브러리를 사용하여 I/O 작업을 논 블로킹 방식으로 처리한다. 따라서 스레드 하나가 많은 수의 I/O를 감당할 수가 있다.
    • But, 노드는 CPU 부하가 큰 작업에는 적합하지 않다.
    • 싱글 스레드 방식으로 서버를 운영할 때는 하나뿐인 스레드가 에러로 인해 멈추지 않도록 잘 관리해야 한다. 에러를 제대로 처리하지 못하면 하나뿐인 스레드가 죽어버려서 서버 전체가 멈추기 때문이다.
  • 이와 같은 특성들로 노드는 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는 데 적합하다.
    • 실시간 채팅 어플리케이션, 주식 차트 등
  • 노드는 생산성은 매우 좋지만, Go처럼 비동기에 강점을 보이는 언어나 nginx처럼 정적 파일 제공, 로드 밸런싱에 특화된 웹 서버에 비해서는 속도가 느리다.
    • 극단적인 성능이 필요하지 않다면 이러한 단점은 노드의 생산성으로 어느 정도 극복이 가능하다.
  • 요즘은 XML 대신 JSON을 사용해서 데이터를 주고 받는데, JSON이 JS 형식인 것은 소소한 장점이다.
장점 단점
적은 컴퓨터 자원 사용 싱글 스레드로 CPU 코어 하나 사용
I/O 작업이 많은 서버로 적합 CPU 작업이 많은 서버로는 부적합
멀티 스레드 방식보다 쉬움 싱글 스레드가 멈추지 않도록 관리 요함
웹 서버가 내장 서버 규모가 커지면 관리의 어려움
자바스크립트 사용 어중간한 성능
JSON 형식과 쉽게 호환  

서버 외의 노드

  • 노드는 자바스크립트 런타임이므로 용도가 서버에만 한정되지 않는다.
    • 웹, 모바일, 데스크톱 어플리케이션 개발에도 사용된다.
  • 노드를 기반으로 돌아가는 웹 프레임워크로는 앵귤러, 리액트, 뷰 등이 있다.
    • 앵귤러는 구글 진영에서 프론트 엔드 앱을 만들 때 주로 사용
    • 리액트는 페이스북 진영에서 주로 사용, 모바일 개발 도구로는 리액트 네이티브 사용
    • 데스크톱 개발 도구로는 일렉트론이 대표적임(Atom, Slack, Discord, VSCode 등이 있다.)

 

 

 

본 내용은 Node.js 교과서 (길벗 출판사) 개정 2판의 내용을 기반으로 작성되었습니다.

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

ES6(2)  (0) 2020.12.03
ES6  (0) 2020.12.03
노드의 개요  (0) 2020.12.01
Node.js , Mongoose 이용한 간단한 CRUD 사이트  (0) 2020.10.02
코딩 일기_객체 지향 프로그래밍  (2) 2020.07.07
Comments