이 글의 방향은 내가 node를 처음부터 어떤 이유에서 배우겠다고 결심한게 아닌,
node를 배워야하는 상황에서 그 것에 대한 정보를 찾아보며 쓴 글이다.
사실 처음 node를 배우는 이유는 단순했다.
프론트엔드, 백엔드 중 어느 직군으로 하고 싶다는 확신이 스스로 없었고,
그렇기에 풀스택으로 배워가면서 사용할 수 있는 것 중 node가 가장 좋은 선택지였고
내가 선택한 '코드스테이츠'에서의 과정도 백엔드 부분에서 node.js를 택했기 때문이다.
프론트엔드에서 거의 필수적으로 쓰이는 JavaScript를 브라우저 밖에서
서버를 구축하는 등(백엔드)의 코드를 실행할 수 있게 해주는 런타임 환경이다.
즉, 자바스크립트 기술로 백엔드를 구현할 수 있다는 것이 큰 장점이다.
국내에서도, 해외에서도 Node.js가 프레임워크라는 의견이 있는데
프레임워크는 사실 아니며, 공홈에서도 자바스크립트 런타임 환경이라고 안내를 하고 있다.(예전에는 프레임워크라고 했다가 수정했다고 한다!)
Node.js is an open-source and cross-platform JavaScript runtime environment.
<Node.js공홈..>
1. 자바스크립트로 모두 사용 가능하다.
-> 프론트엔드와 백엔드 기술의 Context Switching을 줄일 수 있고, 각기 다른 파트의 개발자간 소통 오류를 줄일 수 있다. 특히, 프론트엔드 직군은 자바스크립트 언어만으로도 백엔드 기술을 배울 수 있기에 더욱 유용하다.
2. 대기업의 Node.js 사용
해외에선 나사, 넷플릭스, 우버, 이베이, 아마존 등, 우리나라에서도 쿠팡, 네이버, 카카오 등 많은 기업에서 전체적으로 혹은 부분적으로 Node.js를 사용하고 있다. 아직 많은 곳에선 Java 언어가 더 널리 쓰이고 있지만 Node.js의 성장세도 만만치 않다는 것이다.
3. 강력한 커뮤니티(NPM)
NPM(Node Package Manager)으로 인해 다양한 모듈이나 템플릿들을 쉽고 빠르게 다운 받을 수 있으며 그로 인해 편의성과 진입성이 높다.
1. Javascript Runtime
ECMAScript 표준과 Web Assembly로 구현한 V8엔진(크롬, 엣지 등에서 사용)으로 구현한 자바스크립트 런타임 환경으로, 오픈 소스이며 성능이 좋다.
2. Single Thread
싱글 스레드의 특성상 처리해야할 프로세스가 많아도 하나의 스레드로 진행되기 메모리 사용량과 리소스 사용량에는 변화가 거의 없다.
Node.js는 싱글스레드의 단점을 아래 2가지의 특징으로 보완하고 있다.
3. Non-blocking I/O
Input이 주어지면 처리가 다 될 때까지 기다리는 게 아니라, 일을 할당하고 다른 일을 받아서 비동기적으로 처리한다.(ex: 식당의 주문접수원) => Event Loop으로 보낸다.
4. Event Driven
Event가 발생했을 때, Event Loop이 돌아가면서 비동기적으로 처리되는 아이들을 call stack에 추가하는 것으로, Non-blocking의 특징과 연결된다.