도서로 공부하는 프로그래밍/코딩 자율학습

[Node.js] Node.js가 서버에서 JavaScript를 실행하는 원리

열공노년 2024. 3. 24. 18:16
반응형

Node.js가 서버에서 JavaScript를 실행하는 원리

Node.js가 서버에서 JavaScript를 실행하는 원리는 Node.js의 핵심 구성 요소인 V8 엔진과 비동기 I/O 처리, 그리고 이벤트 기반의 아키텍처에 기반합니다.

Node.js 실행 화면

V8 엔진

Node.js는 Google Chrome 브라우저에서 사용되는 V8 JavaScript 엔진 위에 구축되어 있습니다. V8 엔진은 C++로 작성되었으며, JavaScript 코드를 기계어로 직접 컴파일하여 빠르게 실행할 수 있게 해 줍니다. 이 컴파일 과정은 Just-In-Time (JIT) 컴파일이라고 불리며, 실행 시점에 최적화된 기계어 코드로 변환함으로써, 고성능을 제공합니다.

비동기 I/O 처리

전통적인 서버 측 프로그래밍 언어는 클라이언트의 요청을 처리할 때 동기적으로 I/O 작업을 수행하는 경향이 있습니다. 이는 요청을 처리하는 동안 서버가 다른 요청을 처리하지 못하게 만들어 성능의 병목 현상을 유발할 수 있습니다. 반면, Node.js는 비동기적 I/O를 사용합니다. 이는 파일 시스템에 접근하거나 네트워크 통신을 할 때 요청을 바로 반환하고, 작업이 완료되면 그 결과를 나중에 처리할 수 있게 합니다.

이벤트 기반 아키텍처

Node.js는 이벤트 루프와 콜백 함수를 사용하여 비동기 I/O 작업을 관리합니다. 이벤트 루프는 계속해서 실행 상태를 체크하면서 새로운 이벤트(예: 파일 읽기 완료, 네트워크 요청 도착 등)를 감지합니다. 이벤트가 발생하면, 루프는 해당 이벤트와 연결된 콜백 함수를 호출합니다. 이벤트 루프는 단일 스레드에서 작동하지만, Node.js는 내부적으로 여러 개의 스레드를 사용하여 I/O 작업을 비동기적으로 처리합니다.

요약

Node.js는 JavaScript 코드를 서버 상에서 실행할 수 있게 하는데, 이는 다음과 같은 프로세스를 통해 이루어집니다.

  1. V8 엔진이 JavaScript 코드를 받아 JIT 컴파일을 통해 기계어로 변환합니다.
  2. 이벤트 루프가 비동기 I/O 요청을 받아들이고, 이벤트가 발생하면 연결된 콜백 함수를 실행합니다.
  3. Node.js의 비동기 아키텍처 덕분에, 서버는 병렬로 여러 요청을 효율적으로 처리할 수 있습니다.
  4. 서버는 네트워크 요청에 대한 응답을 반환하고, 이 과정에서 V8 엔진이 생성한 기계어 코드를 실행합니다.

이러한 메커니즘 덕분에 Node.js는 높은 성능과 확장성을 갖춘 서버 측 애플리케이션을 구축할 수 있는 환경을 제공합니다.

반응형