[NodeJS] NodeJS란?

koline·2024년 5월 29일
0

NodeJS

목록 보기
1/1

NodeJS


NodeJS는 브라우저 밖에서 Google Chrome의 핵심인 V8 JavaScript 엔진을 실행하는 오픈 소스이자 크로스 플랫폼 JavaScript 런타임 환경이다.

일반적으로 JavaScriptHTML에 종속되어있는 언어로 HTML을 조작하여 웹페이지를 다이나믹하게 바꿔주는 기능을 한다.

브라우저는 HTTP 요청 응답으로 HTML이 오면 브라우저는 HTML을 해석 및 표현하고 Javascript를 실행한다.

즉, 브라우저 안에는 Javascript를 구동하는 엔진이 내장 되어있다.

이러한 이유로 기존에는 Javascript를 구동하기 위해서는 브라우저를 필요로 했다.

그러나 2008년에 구글이 V8 엔진을 사용한 크롬을 출시했고 상황이 바뀌었다.

V8 엔진은 성능이 매우 뛰어날 뿐만 아니라 오픈소스로 코드도 공개되었다.

이 점을 이용하여 V8 엔진을 기반으로 브라우저 외에 다른 환경에서 Javascript를 사용할 수 있게 해주는 NodeJS 프로젝트가 등장하게 되었다.




단일 프로세스


NodeJS 앱은 각 요청마다 새로운 스레드를 생성하지 않고 단일 프로세스에서 실행된다.

NodeJS는 표준 라이브러리에서 비동기 I/O 원시 기능을 제공하여 JavaScript 코드가 블로킹되는 것을 방지한다.

예를 들어 일반적인 애플리케이션에 10개의 요청이 온다고 하면 제일 먼저 도착한 요청부터 순차대로 10개의 요청을 처리하게 된다.

10번째로 도착한 요청은 앞선 9개의 요청이 처리되는 동안 대기한 후 마지막에 처리된다.

하지만 NodeJS 앱은 10개의 요청이 도착한다면 10개의 요청을 동시에 받는다. 그리고 그 중 가장 처리 속도가 빠른 요청부터 응답을 반환한다.

이것을 Non-blocking I/O라고 한다. 이로 인해 일반적으로 NodeJS의 라이브러리는 비블로킹 패러다임을 사용해 작성되어 블로킹 동작이 예외적인 경우가 된다.

또한, NodeJS가 네트워크에서 읽기, 데이터베이스 액세스, 파일 시스템 접근 등 I/O 작업을 수행할 때, 스레드를 블로킹하고 CPU 사이클을 낭비하는 대신, 응답이 돌아오면 작업을 재개한다.

이로 인해 NodeJS는 스레드 동시성 관리를 추가적으로 부담하지 않고 단일 서버로 수천 개의 동시 연결을 처리할 수 있다. 이는 많은 버그의 원인이 될 수 있는 스레드 동시성 문제를 피할 수 있게 한다.




사용하는 이유


위에서 언급했던 Non-blocking I/O로 인해서 NodeJS로 개발된 앱은 HTTP 요청이 많이 요구되는 서버에 적합하다.

예를 들어 실시간 채팅 기능을 개발한다고 할 때, 서버에는 실시간 채팅 데이터 요청이 쏟아질 것이다. 이를 멀티 스레드 환경에서 처리한다면 사용자가 많아질수록 처리속도는 매우 늦어지게 된다.

반면 NodeJS 앰은 이 요청들을 하나의 프로세스로 처리하기 때문에 훨씬 빠르게 처리할 수 있다.

그러나, 하나의 프로세스에서 모든 요청이 처리되는 만큼 대용량의 트래픽이 요구되는 요청에는 부적합하다.

예를 들어 매우 큰 용량의 비디오를 로드하는 요청을 동시에 많은 양 받게 된다면 하나의 스레드로는 감당하기 어렵다.

하지만 그렇다고 해서 NodeJS 서버의 안정성에 문제가 있는 것은 아니다. AirB&B, LinkedIn, Netflix, PayPal 등 수많은 대기업에서 보안성과 안정성을 요구하는 서비스에 NodeJS를 활용하고 있다.

또한, 프론트엔드 개발자 입장에서 익숙한 Javascript로 서버 개발을 할 수 있고, 코드가 매우 짧고 쉬워서 빠른 개발이 가능하다는 장점이 있다.




참조


NodeJS 공식 홈페이지

profile
개발공부를해보자

0개의 댓글

관련 채용 정보