Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.
-Node.js는 공식 홈페이지-
런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻합니다.
우선 자바스크립트라는 언어를 알아야합니다.
자바스크립트는 HTML에 종속되어있는 언어입니다. HTML 조작과 변경을 위해 사용합니다.
💡 HTML은 웹페이지에 글쓰고, 그림넣는 언어이다.
특징 ) 안 움직임, 글 넣고 그림 넣고 끝
정적 언어인 HTML을 조작해서 웹페이지를 다이나믹하게 바꿔주는 기능을 하는게 자바스크립트입니다.
바로 브라우저입니다. 브라우저에는 자바스크립트 해석 엔진이 있습니다. (브라우저의 종류에 따라 쓰는 엔진이 다릅니다.) 따라서 기존에는 자바스크립트를 인터넷 브라우저 위에서만 실행할 수 있었습니다.
그러나 2008년에 구글이 V8 엔진을 사용하여 크롬을 출시했습니다. V8 엔진은 엄청 빨랐고, 오픈 소스로 코드도 공개되었습니다. V8 엔진이 너무 뛰어나서 기능을 좀 더 더해서 V8 엔진 기반에 노드 프로젝트를 시작했고, Node.js(V8)이 등장했습니다. Node.js는 브라우저 내에서 말고도 다른 환경에서 자바스크립트를 사용할 수 있게 해줍니다.
따라서 Node.js는 JavaScript 실행 환경(=런타임)입니다.
Node.js를 설치하면 브라우저를 키지 않아도 자바스크립트를 컴퓨터에서 수행할 수 있게됩니다.
Node.js가 자바스크립트를 컴퓨터에서 쉽게 실행시켜줬기 때문에 자바스크립트를 프로그래밍 언어처럼 사용하기 시작했습니다.
node -v
를 입력 후 버전이 제대로 나오는지 확인해보면 됩니다.node
입력한 후 console.log('헬로')
를 적어서 자바스크립트 코드가 작동하는지 확인해봅시다.자바스크립트 코드인 console.log()
가 제대로 동작하는 것을 볼 수 있습니다.
많은 사람들이 Node로 서버를 만듭니다.
두 개의 서버(=요청을 처리하는 기계)가 있습니다.
Node.js로 만들어 진 거 하나, 일반 서버 하나 이렇게 두 개가 있다고 가정해봅시다.
이 서버는 동일한 작업을 수행하는 서버입니다. 예를 들어 CGV 페이지라고 생각해봅시다.
손님이 예매할 영화의 티켓 수를 얘기(요청)하면
CGV 페이지의 서버가 요청을 받고 티켓을 줍니다(응답).
손님은 서버가 준 티켓을 받습니다.
손님이 4명 있다고 생각해봅시다.
1번째 손님은 티켓 1장을 요구해서 서버가 티켓 1장을 줬습니다.
2번째 손님은 1번째 손님이 가기를 기다렸다가 차례가 되면 예매를 합니다. 1장을 요구하고 서버에게 1장을 받고 갑니다.
그런데 3번째 손님이 200장을 예매합니다. 그러면 서버는 200장의 티켓을 준비하고, 3번째 손님은 기다립니다. 근데 문제는 4번째 손님도 3번째 손님이 마무리될 때까지 기다려야한다는 겁니다.
모든 손님의 요청을 한번에 받습니다. 그리고 순서와 상관없이 처리 속도가 빠른 것부터 결과를 가져다줍니다. 처리 속도가 빠른 것부터 처리하기 때문에 요청을 놓치지 않고, 4번째 손님이 굳이 3번째 손님의 요청이 끝날 때까지 기다리는 문제도 사라졌습니다.
이게 Node.js의 Non-blocking I/O의 개념입니다.
SNS나 채팅서비스에 많이 사용됩니다. 이런 서비스들의 특징이 요청이 매우 많다는 것입니다.
일반 서버로 구현하면 요청이 많거나 오래 걸리는 요청이 있으면 멈추거나 대기 시간 발생합니다. (일반 서버에서도 스케일링을 하거나 멀티쓰레드를 사용하면 사용할 수도 있긴합니다)
Node.js 서버로 구현하면 요청이 많거나 오래걸리는 요청이 있어도 멈추거나 요청 대기 시간이 발생하지 않습니다. 이런 Non-blocking 덕분에 채팅이나 SNS에 자주 사용됩니다.
Node.js는 코드가 매우 짧고 쉬워서 빠른 개발 가능(Pivoting이 잘됨)합니다.
정리하자면, 개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는 데 적합해서, 실시간 채팅이나 주식 차트 등에 노드를 많이 사용합니다.
이미 안정성과 보안성 측면의 문제도 충분히 검증되었습니다. 규모가 큰 에어비엔비, 넷플릭스, 링크드인 등에서 노드를 사용하고 있고, 페이팔이나 월마트 같이 결제 시스템을 사용하는 대기업에서도 노드로 서비스를 운영하고 있습니다.
Node.js는 모두 스레드 하나에서 처리됩니다. 코드가 CPU 연산을 많이 요구하면 스레드 하나가 감당하기 어렵습니다. 그렇기 때문에 이미지나 비디오 처리, 대규모 데이터 처리 같이 CPU를 많이 사용하는 작업을 위한 서버로는 권장하지 않습니다. 노드보다 더 적합한 다른 언어들이 많기 때문입니다.
🔗참고 자료
책 [Node.js 교과서] - 조현영 지음
2시간만에 웹서버 쉽게 개발하기 (Node.js + MongoDB)
감사합니다. 개념 잡기 너무 좋은 추천 글입니다. !!!