Node.js?
Node.js는 웹의 발전에 의해서 등장한 기술이다. 단방향 통신 위주였던 WEB 1.0 에서 사용자와 상호작용을 하는 WEB 2.0 으로 발전을 하면서 웹페이지의 Javascript는 복잡해졌고 이에 따라 Javascript 실행기가 필요해졌다.
구글 크롬웹브라우저는 V8이라는 엔진을 만들고 Javascript는 상당히 빠르게되었고 이 V8 엔진을 이용해 자바스크립트를 어느 환경에서나 실행할 수 있게 해주는 실행기 Node.js가 탄생되었다.
브라우저의 JS
- 브라우저에서 실행
- 웹 내부 제한된 동작
- 이 때 까지는 JS가 웹 프론트 개발자의 언어라고 알려짐
Node.js가 등장 이후
- 크로스 플랫폼 실행 ( 어떤 환경이든 실행)
- 제한 없는 동작
- 다양한 어플리케이션 개발
Node.js로 할 수 있는 것들
Front, Back, Mobile-App, Desktop-App, Machine-Learning 등 을 할 수 있다.
(react.js, express.js, react-native, electron, brain.js)
Node.js 특징
싱글 쓰레드 - 비동기 - 이벤트 기반
싱글 쓰레드?
싱글 쓰레드란 말 그대로 한 번에 한가지 동작만 실행한다는 특징이다.
싱글 쓰레드는 안좋은 것이 아닌가라고 생각할 수 있지만 장점과 단점이 있다.
장점 - 쓰레드가 늘어나지 않기 때문에 리소스 관리에 효율적이다.
단점 - 쓰레드 기반의 작업들의 효율이 떨어진다. ex) cpu 연산 작업
그래서 Node.js는 비동기 동작으로 쓰레드 기반의 작업을 최소화한다.
비동기?
동작을 실행한 후 완료가 되길 기다리지 않는 방식을 말한다. 이러한 방식으로 인해 다른 동작을 바로 실행 할 수 있다.
멀티 쓰레드 방식과 싱글 쓰레드 방식의 차이
멀티 쓰레드 방식의 경우 실행시 완료가 될 때까지 cpu의 리소스를 낭비하지만, 싱글 쓰레드 비동기 방식의 경우 동작의 완료를 기다리지 않기 때문에 그렇지 않다.
이벤트 기반?
비동기 동작의 완료를 처리하는 방법인데, 앞서 알아보았듯이 비동기 방식은 특정 동작을 실행한 후 해당 동작의 완료를 기다리지 않는다. 대신 해당 동작이 완료될 경우 실행한 함수를 미리 등록해 실행한다.