Node.js의 주요 특징에 대해 설명해주세요.
분야: 프론트엔드
Node.js는 크롬 V8 엔진을 기반으로 동작하는 자바스크립트 런타임 환경입니다. 브라우저에서만 동작하던 자바스크립트를 서버 사이드 환경에서도 실행할 수 있도록 만들어 줍니다.
Node.js의 주요 특징은 크게 세 가지로 정리할 수 있습니다.
먼저, Node.js는 싱글 스레드 기반으로 동작합니다. 이는 기본적으로 하나의 스레드로 연산 작업을 수행한다는 뜻으로, 요청마다 JS 실행 스레드를 추가 생성하거나 할당하지 않습니다. 일반적으로 멀티 스레드 방식은 각 요청에 대해 스레드를 따로 생성하여 병렬적으로 처리하지만, Node.js는 단일 스레드로 처리하기 때문에 서버 자원을 효율적으로 사용합니다.
또한, Node.js는 이벤트 기반 구조를 따릅니다. 이는 특정 이벤트가 발생했을 때 태스크 큐에 등록된 콜백 함수를 실행하는 방식입니다. 예를 들어, 데이터베이스 조회나 파일 읽기 같은 비동기 작업을 요청하더라도, 그 작업이 끝날 때까지 기다리지 않고 바로 다음 코드를 실행합니다. 이후 해당 작업이 완료되면, 이벤트 루프가 해당 이벤트를 감지해 콜백 함수를 호출합니다. 이런 방식으로 코드 흐름을 차단하지 않으면서도 필요한 작업은 차질 없이 처리할 수 있습니다.
끝으로, Node.js는 논 블로킹 I/O 모델을 채택하고 있습니다. 일반적인 I/O 작업은 완료될 때까지 실행을 멈추는 ‘블로킹’ 방식이지만, Node.js는 작업이 끝날 때까지 기다리지 않고 다음 작업을 이어서 처리할 수 있습니다. 이처럼 I/O 작업이 애플리케이션의 흐름을 막지 않기 때문에, 많은 요청을 동시에 처리하는 데 유리하며, 서버 자원을 효율적으로 사용할 수 있습니다. 이러한 비동기 I/O 방식은 앞서 설명한 이벤트 기반 구조와 결합되어 Node.js의 높은 처리량과 확장성을 가능하게 만듭니다.
Node.js가 적합하지 않은 경우는 언제인가요? 🤔
Node.js는 CPU 계산량이 많은 작업에는 상대적으로 부적합합니다. 예를 들어 복잡한 이미지 변환, 머신러닝 연산, 수치 계산처럼 CPU 리소스를 많이 사용하는 작업은 싱글 스레드에서 병목이 발생할 수 있기 때문에, 이런 경우에는 다른 언어나 워커 스레드 등의 대안이 필요할 수 있습니다.