Gidhub BE Developer

Node.js의 특징 및 장단점

2018-11-13
goodGid

Node.js 특징

  • Node.js는 이벤트 기반 비동기 방식으로 작동한다.

  • 그렇기 때문에 네트워크 어플리케이션 개발에 적합하다.

  • 이벤트 기반이란 무슨 뜻일까?


  • 만약 A,B,C,D,E 가게에서 물건을 만든 후 갖고오는 작업이 있다면

  • 빠른 시간안에 해결할 수 있는 방법은 무엇이 있을까?

  1. 내 몸을 복제해 동시에 여러 작업을 수행한다.

  2. 작업이 끝나면 알림을 받고 갖고온다.


  • 1번째 방법이 기존 네트워크 어플리케이션이 사용하는 쓰레드 기반 동기 방식이다.

  • 동기 방식은 작업 요청이 들어올 때마다 쓰레드를 여러 개 만들어 동시에 일을 처리한다.

  • 굉장히 좋은 해결책이지만 일이 많아질수록 쓰레드를 더 많이 만들어야 하므로 메모리 사용량이 계속 증가하는 단점이 생긴다.


  • 그렇다면 2번째 방법은 어떨까?

  • 쓰레드1개만 생성한다.

  • 그리고 끝난 작업어 대해 이벤트를 받고 처리한다.

  • 일이 아무리 많아도 쓰레드는 1개이기 때문에 메모리 사용량과 시스템 리소스 사용량에는 변화가 거의 없다.

  • 따라서 대규모 네트워크 프로그램을 개발하기 적합한 형태이다.

  • 이 방식이 Node.js가 사용하는 방식이다.

  • 물론 쓰레드가 1개이기 때문에 생기는 단점이 존재한다.

  • 일을 처리하는 쓰레드가 쓰러지는 순간 프로그램 전체에 문제를 발생시킨다.


Node.js는 쓰레드가 1개이다?

  • 사실 Node.js도 내부적으로 여러 개의 쓰레드가 쓰레드 풀로 동작한다.

  • 또한 실제 웹 서버를 운용할 때는 코어를 분산해서 관리하므로 하나의 쓰레드만 사용한다고 볼 수는 없다.

  • 중요한 것은 이러한 쓰레드를 관리하는 것이 개발자가 아니라 플랫폼이라는 것이다.

  • 개발자는 쓰레드 하나를 관리하듯 프로그래밍하면 플랫폼이 여러 쓰레드를 효율적으로 운용하게 된다.

  • 덕분에 숙련된 개발자(=멀티 쓰레드 환경 경험이 적은 개발자)가 아니더라도 효율적인 어플리케이션을 작성할 수 있다.


Node.js 장점

JavaScript를 사용

  • 어떠한 웹 개발자라도 JS는 알고있다.

  • 따라서 진입장벽이 낮으며 모든 웹 개발자가 쉽게 접근할 수 있다 장점이 있다.


구글이 만드는 JavaScript 엔진 사용

  • 구글은 V8 엔진 속도를 점점 빨라지게 하고있다.

  • 따라서 구글이 망하지 않는 이상 V8 엔진은 계속 빨라질 것이다.


C++로 개발된 V8 JavaScript 엔진

  • C++를 사용해 기능 확장이 가능하다.

Node.js 단점

C++로 개발된 서버 어플리케이션보다 느림

  • V8 엔진이 아무리 빨라도 C or C++로 개발된 서버 어플리케이션보다는 느리다.

Reference


Index