Node.js는 서버 측에서 JavaScript 코드를 실행할 수 있도록 설계된 오픈 소스 런타임 환경입니다. 원래 JavaScript는 브라우저 내에서만 실행되도록 설계되었지만, Node.js를 통해 서버 측에서도 JavaScript를 사용할 수 있게 되었습니다. 이를 통해 프론트엔드와 백엔드 모두에서 동일한 언어를 사용할 수 있는 이점을 제공합니다.
1. Node.js ?
Node.js는 서버가 아니며, 구글 V8 엔진으로 개발된 JavaScript 런타임 환경입니다.
즉, Node.js는 서버 측에서 JavaScript 코드를 실행할 수 있게 도와주는 런타임 환경입니다.
서버 실행을 위해 필요한 http/https/http2 모듈을 제공합니다.
Node.js를 통해 JavaScript를 다양한 환경에서 실행할 수 있습니다.
2. Node.js의 장점
- 비동기 I/O 처리 : Node.js는 비동기식(Non-blocking) 이벤트 기반 모델을 사용하여 입출력 작업을 효율적으로 처리합니다. 이는 많은 사용자가 동시에 접속하는 상황에서 특히 유리합니다. I/O 작업(예: 파일 읽기, 데이터베이스 접근)이 완료될 때까지 기다리지 않고, 다른 작업을 처리하면서도 I/O 작업이 끝나면 다시 그 작업으로 돌아올 수 있습니다.
- 싱글 스레드, 이벤트 루프 모델 : Node.js는 싱글 스레드에서 동작하지만, 이벤트 루프를 사용해 동시성을 관리합니다. 이 구조 덕분에 서버 자원이 효율적으로 관리되고, 수천 개의 요청을 처리할 수 있습니다. 일반적인 멀티 스레드 서버에서는 스레드 간의 자원 공유나 컨텍스트 전환이 부담이 될 수 있지만, Node.js는 이를 피할 수 있습니다.
- 💡 프로세스와 스레드
- 프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유 X
- 스레드 : 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유
- Nodejs를 실행하면 프로세스 안 여러개의 스레드가 사용되지만 그 중 컨트롤 가능한 스레드는 1개여서 싱글 스레드라고 합니다.
- 빠른 속도 : Node.js는 Google의 V8 JavaScript 엔진을 기반으로 작동합니다. 이 엔진은 JavaScript 코드를 컴파일된 머신 코드로 변환하여 실행합니다. 그 결과, 다른 인터프리터 기반의 언어보다 훨씬 빠르게 JavaScript 코드를 실행할 수 있습니다. V8 엔진은 구글 크롬에서 사용되는 자바스크립트 엔진으로, 브라우저에서도 빠른 성능을 제공합니다.
3. Node.js의 단점
- CPU 집약적 작업의 한계 : Node.js는 싱글 스레드 기반으로 작동하기 때문에, CPU를 많이 사용하는 작업(예: 이미지 처리, 비디오 인코딩, 복잡한 수학 연산)을 처리할 때 성능이 저하될 수 있습니다. 이러한 작업이 하나의 스레드에서 처리되면 다른 요청의 처리가 지연될 수 있습니다.
- 싱글 스레드 한계 : Node.js는 싱글 스레드 이벤트 루프 모델을 사용하지만, 이는 멀티코어 시스템에서 자원을 최대한 활용하지 못할 수 있습니다. 여러 코어에서 병렬 처리를 하기 위해서는 추가적인 설정이 필요하며, 이 과정에서 복잡성이 증가할 수 있습니다.
4. Node.js 설치하기
https://nodejs.org/en/download/package-manager에 접속하여 자신에게 맞는 환경으로 Nodejs를 설치합니다.