Chrome V8엔진을 사용한 클라이언트의 브라우저 외부에서 웹 애플리케이션 실행하기 위한 오픈 소스, 크로스 플랫폼입니다. JavaScript 런타임 환경 및 라이브러리로 웹 서버의 기능을 가지고 있습니다.
하드웨어, 소프트웨어 혹은 2개가 같이 동작하는 것을 의미할 수 있습니다.
하드웨어 측면: web server는 webser의 소프트웨어와 website의 컴포넌트 파일들을 저장하는 컴퓨터입니다. web server는 인터넷에 연결되어 웹에 연결된 다른 기기들이 웹 서버의 데이터를 주고받을 수 있도록 합니다.
소프트웨어 측면: 웹 사용자가 어떻게 호스트 파일들에 접근하는지를 관리합니다. HTTP 서버는 URL과 HTTP의 소프트웨어 일부입니다.
자바스크립트를 동일하게 사용해 서버 로직을 처리할 수 있습니다. 새로운 언어를 습득하지 않고 자바스크립트를 활용해 서버기술을 빨리 개발/응용 할 수 있습니다.
개발이 빠르고 쉽습니다. 서버 설치부터 화면 띄우기까지 쉽게 처리할 수 있습니다.
싱글 스레드로 이벤트 루프를 통해 높은 처리가 가능합니다.
이벤트 기반 비동기방식이라 서버 무리가 적습니다.
ex) Non-Blocking I/O란?
1. 야구 입장권 1장 예매
2. 야구 입장권 2장 예매
3. 야구 입장권 40장 예매
4. 야구 입장권 3장 예매
4개의 요청이 들어오면 4번 손님의 경우 3번 손님의 예약 40장을 기다려야 한다. 하지만 누가 먼저 왔는지 상관없이 빨리 결과가 나오는 순으로 처리하기 때문에
1번-2번-4번-3번 순으로 진행된다.
SNS, 채팅서비스 웹 서버에서 많이 사용된다. 똑같은 서버를 복사해 사용가능하기 때문에 Scailing에 도움이 된다.
하지만 수학적 연산이 필요하거나 분석하는 곳에서 Node.js는 약한 모습을 보인다.
Node.js는 내부적으로 이벤트 루프, 백그라운드, 테스크 큐를 통해 동작합니다.
이벤트 루프란 이벤트 발생 시 호출한 콜백 함수를 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할을 담당합니다.
(루프: 이벤트 처리를 위한 작업 반복을 뜻한다.)
백그라운드란 타이머나 이벤트 리스너가 대기하는 곳입니다. 여러 작업이 동시에 실행될 수 있게 도와줍니다.
태스크 큐: 이벤트 발생 후 정해진 순서대로 콜백을 줄 세울 수 있어 콜백 큐라고도 부릅니다. 보통 완료된 순서대로 줄을 세우고 특정한 경우에 순서가 바뀌기도 합니다.