![[Javascript] Node.js 환경 이해하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRwNx3%2FbtsEGNnkv4b%2F1EeYlOL7LkJkFH2Y9f3W81%2Fimg.jpg)
Node.js 개념 이해하기
Node.js는 자바스크립트의 가능성을 브라우저의 경계를 넘어 확장시킨 플랫폼이다.
이 크로스플랫폼 런타임 환경은 자바스크립트를 서버 측 프로그래밍 언어로 변모시켜 개발자들이 브라우저 외부에서도 자바스크립트를 사용하여 애플리케이션을 개발할 수 있게 했다.
기능과 장점
이벤트 기반 아키텍처
Node.js의 장점 중 하나는 이벤트 기반 아키텍처를 채택하고 있다는 점이다.
이는 Node.js가 각종 이벤트(네트워크 요청, 파일 I/O 완료 등)에 대해 비동기적으로 반응할 수 있도록 함으로써 단일 스레드 모델임에도 불구하고 높은 수준의 동시성을 제공한다.
이벤트 기반 모델의 가장 큰 이점은 I/O 작업이 블로킹되지 않는다는 것이다.
"I/O 작업이 블로킹되지 않는다"?
입력/출력(I/O) 작업(파일 읽기/쓰기, 네트워크 요청 등)이 실행되는 동안 프로그램의 실행이 멈추지 않고 다른 작업을 계속 수행할 수 있다는 의미이다.
즉, 해당 I/O 작업이 완료될 때까지 프로그램의 전체 실행 흐름이 대기 상태에 빠지는 '블로킹(blocking)' 현상이 발생하지 않는다.
전통적인 멀티스레드 서버 모델에서는 각 연결을 처리하기 위해 별도의 스레드를 생성하거나 프로세스를 할당해야 한다.
이는 리소스 사용량을 크게 증가시키며 많은 수의 연결을 처리할 때 성능 저하로 이어질 수 있다.
반면, Node.js는 이벤트 루프와 비동기 I/O를 사용하여 이러한 문제를 효과적으로 해결한다.
이벤트 루프
이벤트 루프는 Node.js의 비동기 작업을 관리하는 핵심 메커니즘으로, 계속해서 실행되며 외부 이벤트(데이터 수신, 파일 읽기 완료 등)를 감지하고 관련 콜백 함수를 실행한다.
이 과정은 비동기적으로 이루어지므로 Node.js 애플리케이션은 I/O 작업 대기 시간에도 다른 작업을 중단 없이 지속할 수 있다.
이러한 특성은 애플리케이션의 반응성을 크게 향상시키고 다수의 I/O 작업을 효과적으로 동시에 처리할 수 있게 만든다.
Node.js의 이벤트 기반 모델은 네트워크 프로그램이나 실시간 데이터 처리와 같은 애플리케이션 개발에 유연성과 강력한 처리 능력을 제공한다.
이벤트 루프는 Node.js가 JavaScript의 단일 스레드 특성에도 불구하고 논블록 I/O 작업을 가능하게 하며, 가능한 경우 시스템 커널에 작업을 위임함으로써 이를 실현한다.
대부분의 현대 커널이 멀티 스레드를 지원하므로, 배경에서 여러 작업을 동시에 처리할 수 있다.
작업 중 하나가 완료되면 커널은 Node.js에 알려 적절한 콜백이 'poll' 큐에 추가되어 결국 실행될 수 있도록 한다.
NPM (Node Package Manager)
npm(Node Package Manager)은 Node.js 생태계에서 모듈과 라이브러리를 관리하는 도구다.
개발자들이 npm을 사용함으로써 외부 라이브러리와 모듈을 쉽게 찾아 설치할 수 있으며 개발 과정을 단순화하고 코드 재사용을 용이하게 한다.
npm은 프로젝트 내의 의존성을 자동으로 관리하며 개발자들이 수동으로 처리해야 하는 번거로움을 줄여준다.
특히 라이브러리의 버전을 관리하는 기능은 프로젝트가 필요로 하는 정확한 모듈 버전을 안정적으로 유지하게 도와주며 프로젝트의 안정성과 호환성 유지에 기여한다.
뿐만 아니라 npm은 개발자가 자신의 모듈을 공개하고 다른 개발자들과 협업할 수 있는 커뮤니티 플랫폼의 역할을 한다.
개방적이고 협력적인 개발 환경을 조성하여 전 세계 개발자들이 자유롭게 지식과 자원을 공유할 수 있는 기반을 마련하고 있다.
references
https://nodejs.org/en/learn/getting-started/introduction-to-nodejs
https://nodejs.org/en/guides/event-loop-timers-and-nexttick/
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!