cf) 커맨드라인 인터페이스 : 사용자가 텍스트로 명령어를 입력하고 다시 텍스트로 결과를 화면에 출력해주는 인터페이스를 가진 컴퓨팅 인터페이스
요약 : Chrome 브라우저의 V8 Javascript 엔진을 탑재한 Server Side 오픈소스 Javascript 런타임
브라우저 이외의 환경에서도 동작할 수 있도록 V8 엔진을 브라우저에서 독립시킨 Javascript의 또 다른 실행 환경(runtime)이다.
그로인해, 브라우저에서 할 수 없는 운영체제의 파일 시스템에 접근해서 파일을 조작한다든지 등의 다양한 일들이 가능하게 되었다.
단순히 브라우저 밖으로 꺼내는게 목적이 아니라 웹 서버인 Apache HTTP Server가 최대 10,000개 이상의 동시 요청을 다루는데 있어서 갖는 문제를 해결하기 위해 자바스크립트(Javascript)를 그대로 활용하면서, 이벤트 기반의 높은 처리 성능을 낼 수 있는 network 서버를 만드는 것에 관심이 있었고 그렇게 Node.js가 탄생했다.
이러한 특징을 가진 Node.js는 페이팔, 넷플릭스, 월마트, 링크드인, 우버 등에서 메인 또는 서브 백엔드 서버를 만드는데 사용되고 있다.
브라우저(Chrome, Safari, Internet Exploere)에서 HTML 요소 생성부터 모든 페이지 및 기능을 동적으로 처리할 수 있도록 만들어주는 브라우저에서 실행되는 프로그래밍 언어
Google이 주도하여 C++로 개발한 고성능 엔진.
Javascript 언어로 작성된 코드를 컴퓨터가 해석하기 쉬운 바이트 코드로 JIT 컴파일 방식으로 변환하는 역할을 수행한다.
바이트 코드 : 직접 CPU 내의 레지스터와 누산기를 어떤 식으로 사용하라고 명령하는 명령문
네트워크의 한 방식인 클라이언트-서버 구조의 서버 쪽에서 행해지는 처리
어떤 프로그램이 실행되고 있는 동안의 동작
해당 프로그램이 필요한 시스템 자원(RAM, 시스템 변수, 환경변수 등)을 할당받고 실제로 시스템 자원을 사용해서 어떤 처리를 하고 있는 것 (그러한 상태/그런 처리가 행해지고 있는 것)이다.
Runtime이 일어나기 위해, 즉 해당 프로그램(애플리케이션)이 시스템 자원을 사용하기 위하여 시스템 자원에 액세스 할 수 있도록 해주는 실행 환경
libuv
라는 비동기 I/O에 중점을 둔 오픈 소스 라이브러리를 사용함으로써 이벤트 기반(Event Driven), Single Thread, non-blocking I/O 모델을 구현한다.
덕분에 Node.js는 지연(blocking) 없이 동시 요청을 빠르게 처리할 수 있다.
MSA : 한 가지 일만 수행하는 작은 어플리케이션
즉, 쉽게 교체될 수 있고 독립적으로 개발되고 전개될 수 있는 작은 컴포넌트를 의미한다.
MSA 구조 안에서는 기능이 추가될 때마다 기존 시스템에 더해지는 것이 아니라 가벼운 시스템을 새롭게 구축하는 방법으로 확장하게 된다.
결과적으로 Node.js는 상대적으로 가벼운 런타임이기 때문에 MSA와 아주 잘 조화되어 사용될 수 있다.
node.js는 풍부한 생태계(라이브러리 약 80만개)를 갖고 있고, JSON 형식을 그대로 사용할 수 있는 등 많은 장점들이 있다. 이러한 이유로 자바스크립트와 노드로 백엔드 API 서버를 구축하는 것은 좋은 선택일 수 있다. Node.js의 경우 속도와 확장성을 요구하는 집중적인 I/O가 있는 실시간 애플리케이션, 웹, 앱 어플리케이션 개발에 적합한 기술이다.