"파이썬을 배우면 백엔드는 Django를 사용하고 Javascript를 배우면 백엔드는 node.js를 사용한다"라는 말이 어색하지는 않지만 틀린 말이다. 프로그래밍 언어를 위한 프레임워크가 딱 정해진 것이 절대 아니고 분명히 사용되는 이유가 있기 때문에 함께 이용되는 것임을 잊지 말자. 자신이 사용하고 있는 언어와 프레임워크, 런타임등을 왜 사용고 있는지 꼭!! 알고 사용할 수 있기를 바라며 자바스크립트를 배우며 node.js를 사용하는 입장에서 다시 한번 내가 왜 node.js를 사용하고 있는지 확인해보도록 하겠다.
Node.js
Node.js는 Chrome 브라우저의 V8Javascript 엔진을 탑재한 이벤트 기반의 Server Side 오픈소스 Javascript 런타임으로, 노드에 내장되어 있는 기능들(libuv, httpd,..)로 동시 요청 처리에 높은 성능을 갖는 HTTP Server를 구축 및 실행할 수 있다.
→ runtime : 해당 프로그래밍언어로 작성된 코드가 구동되는 환경
💡 자바스크립트의 런타임의 종류로는 웹브라우저(크롭,파이어폭스,사파리등)와 Node.js가 있다 💡
2008년 구글에서 V8 javascript 엔진을 개발하여 속도라는 무기까지 얻게 되었고 2009년 Ryan Dahl에 의해 자바스크립트가 브라우저 이외에 환경에서도 동작할 수 있도록 V8 엔진을 브라우저에서 독립시킨 자바스크립트의 또 다른 런타임인 Node.js를 개발!(Ryan Dahl의 주된 관심사는 이벤트기반의 높은 처리 성능을 낼 수 있는 network 서버를 만드는 것이었다고 한다)
자바스크립트는 브라우저의 엔진에 의해서만 해석이 가능했기에 초반만 하더라도 client-side의 개발만으로 국한되어있었다. 하지만 node.js의 개발로 인해 브라우저에서 벗어나 일반 컴퓨터 환경에서도 동작할 수 있게 되었고 파일시스템에 접근해 읽고 쓰는 등의 기능까지도 할 수 있게 있게 되었다.
Node.js의 역할
💡 한 블로그에서 “Node.js를 배운다는 말은 자바스크립트로 백엔드를 공부한다는 소리가 아니라 컴퓨터를 제어할 수 있는 방법을 배운다라는 말과 같다” 라고 했던 것이 생각났다.
HTML은 웹페이지를 위한 형태를 가진 문서를 위한 마크업 언어이다. 자바스크립트는 html안에 있다고 생각하면 되는데 정적인 웹을 동적이게 만들어준다. html의 조작과 변경하여 웹페이지를 다이내믹하게 바꿔줄 수 있게 한다. html 내부 <script> 안에 있는 자바스크립트는 그럼 누가 해석을 해서 기계가 이해할 수 있는 기계어로 바꿔줄까? 바로 브라우저가 그 역할을 담당한다. 다시 말하면 브라우저마다 각자 자바스크립트를 해석하는 엔진이 있는데 그 엔진이 해석을 담당하게 된다. 그 엔진의 성능에 따라 해석하는 속도와 그 성능이 달라지게 되는데 Node.js는 빠른 속도와 높은 성능을 가진 Chrome의 V8엔진을 탑재한 것이다.
→ 여러 모듈의 도움을 받아 웹페이지를 만들어도 브라우저가 바로 그 내용을 읽지 못하기 때문에 그 내용들을 브라우저가 읽을 수 있도록 HTML,CSS,JS 파일들로 변환 작업이 이뤄져야 하는데 그것이 바로 Node.js의 역할인 것이다. 변환작업을 하는 명령을 내리고 코드를 짜고 이것들이 돌아가는 환경을 만들어준다
Node.js를 사용하는 이유
- 높은 자유도와 무한한 확장 가능성
- NPM(node package manager)을 통해 다양한 모듈과 라이브러리를 제공받기에 일일이 모든 기능을 만들 필요없이 효율적으로 개발을 할 수 있다. (Node.js와 호환되는 수많은 Server-side Framework들이 있는데 Express.js도 그중 하나이다.)
- 빠른 처리 속도
- C++로 작성된 V8엔진은 인터프리터 방식이 아닌 JIT 컴파일 방식을 채택하고 있으며 최적화 기법으로 놀라운 속도로 작업을 수행한다
- 동시 요청 처리 성능
- Node.js는 V8엔진과 함께 libuv라는 비동기 I/O에 중점을 둔 오픈 소스 라이브러리를 사용함으로 이벤트 기반(Event Driven), Single Thread, non-blocking I/O 모델을 구현한다. 덕분에 Node.js는 지연(blocking) 없이 동시 요청을 빠르게 처리할 수 있다
- Frontend와 Backend 기술 스택 통합
- FE와 BE가 같은 언어를 사용함으로써 개발의 전반전인 생산성 향상에 도움이 된다.
- 동일한 언어로 모듈을 만들어 양쪽이 재사용 할 수 있다.
간단하게 Node.js가 무엇인지, 대용량의 요청과 빠른 응답시간을 요구하는 웹서비스에서 왜 Node.js를 사용하는지 이유에 대해서도 알아보았다. 다음에는 Node.js의 핵심인 V8과 libuv에 대해 살펴보면서 Node.js의 작동방식을 이해하고 자바스크립트의 깊은 이해로 나아갈 수 있도록 해보겠다.
'TIL' 카테고리의 다른 글
Libuv 라이브러리(feat. 이벤트 루프) - 3 (0) | 2023.03.24 |
---|---|
V8엔진 구조 및 작동 방법 - 2 (0) | 2023.03.23 |
Process & Thread (0) | 2023.03.13 |
API가 도대체 뭐야? 이걸로 끝내자 (0) | 2023.03.10 |
나는 왜 JWT를 사용했을까?(feat. 쿠키,세션,토큰) (0) | 2023.03.09 |