Node.js 특징
-
Node.js는 이벤트 기반 비동기 방식으로 작동한다.
-
그렇기 때문에 네트워크 어플리케이션 개발에 적합하다.
-
이벤트 기반이란 무슨 뜻일까?
-
만약 A,B,C,D,E 가게에서 물건을 만든 후 갖고오는 작업이 있다면
-
빠른 시간안에 해결할 수 있는 방법은 무엇이 있을까?
-
내 몸을 복제해 동시에 여러 작업을 수행한다.
-
작업이 끝나면 알림을 받고 갖고온다.
-
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++로 개발된 서버 어플리케이션보다는 느리다.