Node.js는 무엇인가??

조 은길·2022년 6월 24일
1

Node.js & 몽고DB

목록 보기
1/10
post-thumbnail

Node.js가 뭔가요??

이것의 정의에 대해서 검색해보면, JS의 런타임이라고 나온다. 뭐 쉽게 얘기해서, 자바스크립트 실행기라는 말인데.. 좀 더 자세하게 정의해보자!!

태초에 JS는 HTML을 동적으로 사용하기 위해서, 즉 HTML을 컨트롤하기 위해서 만든 언어이다. 어찌보면, 파이썬이나, C++과는 태생적으로 존재하는 목적이 다르다.

JS는 누가 해석하나??

JS 해석은 브라우저가 담당한다. 그래서, 브라우저마다 JS를 해석할 수 있는 엔진들이 있다.

그런데, 이 중에서 크롬의 V8이 타의 추종을 불허할 정도로 JS 해석을 잘한다.
자바스크립트를 빠르게 읽고 해석하면 웹사이트 렌더링 성능도 빨라지니, 브라우저 개발자들은 자바스크립트를 해석할 수 있는 엔진 개발에 열성이었다.

그러다, 성능 좋은 V8 엔진 자체를 살 좀 붙여서, 출시를 하게 되는데 이게 노드.js이다.

즉, 노드.js는 크롬의 JS를 해석하는 엔진으로 이루어져 있다.

이렇게 노드.js를 만든 이유는 JS를 브라우저에서 말고, 다른 환경에서도 실행할 수있게하기 위해서이다.


개발자들은 하나의 언어로 모든 것을 하고 싶은 욕망이 있다.

그래서, 노드.js로 서버를 만들기 시작했는데, 가장 큰 이유는 노드.js로 서버를 만들면 쉽기 때문이다.

노드.js로 서버를 만들었을 때, 장점은 바로 논블로킹 I/O인데, 이것에 대해서 알아보자!!


일전에 필자가 정리했던 논블로킹의 정의에 관해 다시 가져와보겠다.

  • 동기 : 코드가 순서대로 실행된다.
  • 비동기 : 코드가 순서대로 실행되지 않는다.
  • 블로킹(blocking) : 코드의 실행이 다른 코드의 실행을 막는다.
  • 논블로킹(Non-blocking) : 코드의 실행이 다른 코드의 실행을 막지 않는다.

즉, Node.js에서는 시간이 걸리는 작업을 수행시, 해당 코드의 실행이 다른 코드의 실행을 막지 않기 위해서, 코드가 순서대로 실행되지 않는 것을 "비동기"라고 할 수있겠다.

논블로킹에 관해서 더 자세하게 알고 싶다면,


즉, Node.js가 서버로써 좋은 이유는 중간에 어려운 작업을 만나도, 코드 실행기가 어려운 작업을 수행하느라 멈추는게 아니라, 시간이 오래걸리는 작업은 좀 제겨두고, 결과값이 빠르게 나오는 것부터 실행해주기 때문이다.


서버로서 Node.js 강점

바로, 이런 논블로킹 I/O 특성 때문에 노드.js는 쓸모가 많다.

특히, 요즘 SNS, 채팅서비스 개발을 많이 하는데, 이런 서비스들의 특징은 서버가 1초에 몇 십만 개의 요청을 처리할 수있어야 한다.

  • 전통적인 서버의 경우, 요청이 많거나, 오래 걸리는 요청이 있으면, 서버가 멈추거나 대기시간이 발생한다.

  • 그러나, 노드.js의 경우, 요청이 많거나 오래걸리는 요청이 있어도 멈추거나 요청 대기시간이 걸리지 않는다.

    • 즉, 한꺼번에 많은 요청을 받아들이기 좋다.

그러나, 일반 서버로도 이런 작업을 못하는게 아니다. 서버의 스케일링이라고 해서, 서버의 인스턴스를 하나 더 만들던지 해서 카운터를 여러개 만들게 되면, 동시에 많은 요청을 받을 수있게 된다.

정리하면,

바로 SNS, 채팅서비스 웹서버입니다. SNS같은 플랫폼 만들 때 가장 중요한게 '한번에 많은 요청을 감당할 수 있냐' 입니다.

일반 서버의 경우 1초에 10만개의 요청이 들어오면.. 바로 처리해주기 위해선

  • 똑같은 서버를 몇만대 복사해서 만들어 두거나 (Scaling)

  • CPU 멀티쓰레딩을 이용하거나

  • Node 처럼 Non-blocking 스타일로 코드를 짜거나 한다.

반면 Node.js 서버의 경우엔 애초에 설계상 한꺼번에 많은 요청을 받아줄 수 있으니, 애초에 서버 덩치를 키울 걱정 자체가 적겠죠.

하지만 처리 속도라든지 이건 다른 문제입니다.

Node.js자체가 연산속도가 빠르다고 유명해진게 아니니까요.

(귀여운 노드쨩에게 피보나치 수열 계산 이런거 시키면 한참 걸립니다)

Node.js로 자주 만드는 것들 및 장점

1. 노드쨩은 위에서 설명한 SNS, 채팅 서비스에 특화된 언어라고 보시면 됩니다.

이런 서비스는 요청처리에 힘든 수학적 연산을 요구하지 않습니다.

  • 글자를 저쪽에 전달해주기
  • 가끔은 여러명에게 전달해주기

    이게 끝입니다. 채팅 서비스가 이런 요청 말고 더 필요한 요청이 있나요?

    그래서 대량, 하지만 처리가 간단한 요청이 들어오는 채팅, SNS 서비스에 Node.js를 많이 사용합니다.

2. 노드쨩은 스타트업, 프로토타입 만들기에서도 많이 사용합니다.

빠르게 시범서비스를 만들고 싶다면 Node.js는 좋은 선택입니다.

  • 일단 초보자에게도 쉽고
  • 진짜 템플릿 몇개만 복붙해도 2시간만에 빠르게 서버를 만들 수 있습니다.
  • 갑자기 사용자가 터져서 대량의 요청이 들어와도 나름 감당가능 (서버가 죽진 않음)
  • 자바스크립트 문법만으로 프론트, 백엔드 전부 가능하다는 장점

Node.js의 단점

Node.js는 보통 웹 서비스를 만들 때, 많이 쓴다. 그러나, 모든 서버가 웹 서비스용은 아니다.

이미지 처리 서버 => C , 파이썬 이 더 좋은 선택이다.

수학 계산, 통계 => 파이썬이 강점을 보인다.

즉, 단점은 ..

  1. 처리속도가 떨어질 수 있다.
  2. 수학연산이나 이미지처리 같은 라이브러리가 부족할 수 있다.
  3. Node.js가 제공하는 Non-blocking 처리방식은 다른 언어에서도 비슷하게 구현 가능하다.
profile
좋은 길로만 가는 "조은길"입니다😁

0개의 댓글