node.js란?

최인호·2024년 1월 20일

node

목록 보기
1/1

Nodejs는 JavaScript를 서버측에서 실행할 수 있게 해주는 것이라고 알고 천천히 살펴보자

배경

이전에 JavaScript 엔진을 만들어 웹 브라우저가 JavaScript를 이해하고 실행할 수 있도록 개선되기 시작했다.
이 때 크롬 V8엔진을 중심으로 빠르게 발전하기 시작했는데, 2009년 Ryan Dahl에 의해 처음으로 발표됐다.

즉, Node js는 자바스크립트 런타임 환경이다.

기존 자바스크립트는 HTML에 종속된 언어이기 때문에 웹 브라우저에서 다음과 같이 사용해야 했다.

하지만 Node.js를 사용한다면 브라우저 없이도 쉽게 사용할 수 있다!


Node js 기본 구조와 특징

Node js 애플리케이션은 메모리 힙과 콜 스택을 포함한다.

  • 메모리 힙 : 데이터를 저장하는 공간
  • 콜 스택 : 실행중인 코드의 위치를 추적

Node js는 비동기 언어인데, 그 차이점을 한번 비교해보자.

동기 vs 비동기

동기 : 요청을 보낸 후 해당 요청의 응답을 받아야만 다음 동작을 실행하는데, 이는 요청 처리가 완료될 때까지 기다려야 하므로 순차적이고 직렬적인 작업 처리에 적합

비동기 : 요청을 보낸 후 응답과 관계없이 다음 동작을 실행하는 방식으로 응답이 오는 대로 처리할 수 있기 때문에 병렬적인 작업 처리가 가능하며 시스템 자원을 효율적으로 활용 가능

Node.js는 자바스크립트 기반이므로 싱글 스레드이지만 그럼에도 불구하고 굉장히 빠르고 효율적인 서버를 만들 수 있다.
세계적으로 유명한 기업들부터 우리나라의 대기업들도 많이 사용하는 것이 근거이다.

그런데 Node.js는 싱글 스레드이지만 어떻게 좋은 성능을 낼 수 있을까?

바로 Non-Blocking I/O와 Event-Driven 방식으로 되어있기 때문에 멀티스레딩 방식보다 더 효율적으로 I/O 처리를 담당할 수 있다.


Non-Blocking I/O

입출력 작업을 할 때, 한 작업이 완료될 때까지 기다리지 않고 다음 작업을 바로 진행하는 방식이다. 쉽게 말하면 나는 음식점 요리사라고 생각해보자.

동기적 처리의 경우 내가 스테이크를 구울 때 10분이 걸린다면, 이 스테이크가 다 구워질 때까지 아무것도 하지 못하고 기다려야 한다.
비동기적 처리의 경우 스테이크를 굽기 시작하고 그동안 주문을 받는다거나 설거지를 한다.
이후 알람이 울려서 스테이크를 꺼내고 다시 다른 작업을 진행하는 방식이다.

이와 같이 비동기적 처리를 한다면 시스템 자원을 효율적으로 사용할 수 있고, 처리 속도도 빨라진다는 장점이 있다.

Event-Driven

이벤트가 발생시 미리 정의된 콜백 함수를 실행하는 구조이다.
내가 음식점 알바생이라고 생각해보자.
손님 A가 물을 달라고 해서 물을 가져다주는 동안, 손님 B는 주문을 기다리고 있다.
그러면 나는 손님 B의 주문을 받고 주방에 가서 주문을 전달한다.
그리고 다른 손님 C가 계산을 요청하면, 나는 계산을 처리하는데 이 때 이 모든 일들은 순차적으로 이루어지지 않아도 된다.
즉 결론적으로 어떤 이벤트(손님 요청)이 발생하면, 그에 맞는 적절한 행동(콜백 함수)을 하는거다.


결론

Node js는 싱글 스레드이지만 위의 방식들을 이용해 멀티스레딩 방식보다 더 효율적으로 I/O처리를 할 수 있다.
이러한 구조 덕분에 높은 동시성을 요구하는 웹 애플리케이션 개발에 적합하다.
하지만 싱글 스레드 모델은 CPU 집약적인 작업에는 한계를 가지고 있다. 이미지&비디오 처리, 대규모 데이터 처리와 같은 작업은 CPU를 많이 사용하기 때문에 Node.js는 적합하지 않다.

0개의 댓글