본문 바로가기

WEB/Node.JS

[Node.JS] Node.JS를 서버로 사용하는 이유

Node.js는 자바스크립트 실행기

이전 게시글에서도 말했다 싶이 Node.js는 크롬 브라우저에 V8 즉, JavaScript 런타임이다.

그런데 이 엔진을 왜 이토록 Server 프로그래밍에 사용되는 이유가 무엇일까?

장점

  • 자바스크립트를 동일하게 사용해서 서버단 로직을 처리할 수 있다는게 가장 큰 장점!
    새로운 언어를 습득하지 않고도 자바스크립트를 활용해 서버기술을 빨리 개발/응용할 수 있습니다.
  • 개발이 빠르고 쉽다. 서버 설치부터 화면 띄우는 것까지 금방 처리 됩니다.
  • Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능
  • 로컬에서 서버만 켜봐도 얼마나 가볍게 돌아가는지 알 수 있다.
  • 이벤트 기반 비동기방식이라 서버 무리가 적다.

Non-blocking I/O 이 무엇인가?

만약 4개의 요청있다고 가정하자.

요청1) 영화 1장 예매좀요

요청2) 영화 1장 예매좀요

요청3) 영화 200장 예매좀요

요청4) 영화 1장 예매좀요

 

이렇게 4개의 요청이 차례로 들어왔을 경우, 일단 접수부터 다 받고 빨리 완료된 것부터 처리해준다. 

누가 먼저 왔는지 상관없고. 그냥 빨리 결과가 나오는 순으로 예매해주는 것이다.

처리 순서는 요청1 – 요청2 – 요청4 – 요청3 이런게 될것이다. 

그래서 아까 요청4 했던 사람도 빠르게 영화표를 받아볼 수 있다. 

 

Non-blocking I/O는 그냥 완료가 빨리될 수 있는 것부터 처리하게 설계된 런타임이다.

 

반면, 일반 프로그래밍언어에서 blockgin I/O가 지원한다면 요청이 들어온 순서대로 일을 처리한다.

만약 첫 요청이 엄청난 처리를 요구하는 요청이고 그 이후에 들어오는 요청들은 엄청 작은 처리를 요구하는 요청이라면 첫 요청이 처리될 동안 다른 작은 요청들 또한 그만큼에 지연 시간이 생긴다.

Node.JS가 강점을 보이는 분야

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

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

  • 똑같은 서버를 몇만대 복사해서 만들어 두거나 (Scaling)
  • CPU 멀티쓰레딩을 이용하거나
  •  Node 처럼 Non-blocking 스타일로 코드를 짜거나 한다.

Node.JS가 약점을 보이는 분야

수학적 연산이 필요하거나 이미지를 가공하거나 분석하는 다소 처리할게 많은 일들은 잘 하지 못한다.

예를들어 수학적 연산이 많이 들어가는 머신러닝이나 게임 분야에서는 약점을 보인다.

'WEB > Node.JS' 카테고리의 다른 글

[express] mongodb 데이터 삽입(insert, save)  (0) 2021.04.28
[express] mongodb 데이터 검색(find, findOne)  (0) 2021.04.28
[Node.js] express란  (0) 2021.04.27
[Node.JS] express를 사용해보자  (0) 2021.04.05
[Node.JS] Node.js의 정체  (0) 2021.04.05