node.js를 배워보고 싶은데 기본 지식이 전혀 없어서 공식문서, 블로그, 유튜브등 찾아보면서 정리해보았다.
Node.js란?
Node.js는 자바스크립트를 서버나 로컬 컴퓨터에서 실행할 수 있게 해주는 "자바스크립트 런타임 환경"이다.
자바스크립트는 브라우저 내에 포함된 인터프리터 덕분에 별도 설치 없이 실행되지만 스크립트 언어라 특정한 프로그램 안에서 동작하는 프로그램이기 때문에 웹 브라우저(크롬, 사파리, 익스플로러, 파이어폭스 등)가 없으면 사용할 수 없는 프로그램이다.
자바스크립트를 웹 브라우저에서 독립시킨 개념으로 컴퓨터나 서버에서 자바스크립트를 실행하려면 Node.js가 필요하다. Node.js는 V8 자바스크립트 엔진을 기반으로 동작하며, 파일 시스템 접근이나 네트워킹 기능과 같은 서버 측 기능을 제공한다. 덕분에 웹 서버를 구축하거나 데이터베이스와 통신하는 등의 백엔드 개발을 자바스크립트로 할 수 있게 해준다.
*V8 JavaScript 엔진????
JavaScript 엔진은 자바스크립트 파일을 컴퓨터가 읽을 수 있도록 변환해주는 역할을 한다.
V8엔진은 원래 구글이 웹 브라우저인 chrome의 성능을 높이려는 목적으로 개발하여 코드 번역 방식을 바꿔서 개선하였다.
구글이 오픈 소스로 공개하면서 V8엔진을 웹브라우저 뿐만 아니라 서버에서도 사용할 수 있게 되었다. 그래서 Node.js에서도 V8 엔진을 활용해서 서버에서 자바스크립트를 실행할 수 있게 된 것이다.
Node.js의 특징
특징은 크게 5가지로 볼 수 있는데
1. 비동기 이벤트 기반 환경
웹 서버들 대부분은 스레드를 기반으로 입출력을 처리하였지만 Node.js는 대규모 네트워크 서비스를 개발하기 위해 고안되었기 때문에 이벤트 기반으로 작동한다. 이벤트 기반의 비동기 처리는 입출력 작업을 기다리는 동안 다른 작업을 수행할 수 있기 때문에 CPU 자원을 효율적으로 활용할 수 있는 장점이 있다..
Node.js에서의 이벤트 기반처리는 작업을 요청할 때마다 이벤트가 발생하고 각 작업이 준비되면 그때 실행되는 방식이다. 예를 들어 첫 번째 작업의 이벤트가 발생하면 첫 번째 작업을 시작하고 두 번째 작업의 이벤트가 발생하면 두 번째 작업을 이어서 처리하는 방식이다.
이러한 상황을 바로 이벤트 기반의 ‘비동기 처리’라고 할 수 있다.
이벤트 기반의 Node.js는 Non-Blocking I/O를 통해 입출력 작업이 끝날 때까지 기다리지 않고 다음 작업을 진행할 수 있다. 예를 들어, 첫 번째 작업이 진행 중에 두 번째 작업의 준비가 끝나면, 첫 번째 작업을 멈추지 않고도 두 번째 작업을 동시에 처리할 수 있는데.이러한 방식 덕분에 Node.js는 하나의 스레드로도 많은 작업을 빠르게 처리할 수 있게 된다.
*스레드???
프로세스 내에서 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위
* Blocking:
Node.js 프로세스에서 한 작업의 실행을 위해 다른 작업이 완료될 때까지 기다려야 하는 방식
* Non-Blocking:
A라는 작업 중 B작업을 실행시켜야 할 때 A작업이 끝나지 않더라도 기다리지 않고 B작업이 실행될 수 있도록 하는 방식
2. 단일 언어 사용
자바스크립트 기반인 Node.js는 프론트엔드와 백엔드 모두 동일한 언어를 사용할 수 있다.
그래서 프론트엔드와 백엔드 간의 코드 공유가 가능하고, 하나의 팀이 동일한 언어를 사용하므로 협업이나 코드 관리가 훨씬 쉽다.
예를 들면 만약 프론트엔드에서 Math.random()을 써서 랜덤 숫자를 생성한다고 할 때, 같은 함수를 백엔드에서도 사용할 수 있어서 서버와 클라이언트가 동일한 로직을 공유할 수 있기 때문에, 데이터를 처리하는 방법에 일관성을 유지할 수 있다는 장점이 있다.
3.경량화
Node.js의 환경이 가볍고 코드 구조가 모듈화 되어 있기 때문에 병렬 작업과 대용량 데이터 처리에 높은 성능을 보장한다.
서버를 띄우는 데 필요한 리소스가 적어 효율적이고, 병렬 작업과 대용량 데이터 처리에 높은 성능을 보장한다.
특히 NPM(Node Package Manager)을 통해 다양한 라이브러리나 패키지를 쉽게 설치할 수 있기 때문에 빠르고 간편하게 필요한 기능을 추가할 수 있다.
4. 확장성
새로운 모듈을 추가하는 과정이 간단하다. 프로젝트가 커질수록 관리가 어려워지는 경우가 많지만, Node.js는 기능을 독립적으로 개발하고 관리할 수 있어서 대규모 프로젝트에도 적합하다.
새로운 API 기능을 추가하고 싶다면, 그 기능만을 담당하는 모듈을 만들어 기존 코드에 추가하면 되기에 새로운 기능을 쉽게 추가하고 유지보수도 간편하게 할 수 있다는 특징이 있다.
Node.js 설치