Node.js란
오픈소스 JavaScript엔진인 크롬 V8로 만들어진 JavaScript 런타임 환경으로, 브라우저 밖에서도 JavaScript로 서버를 구축하는 등의 코드를 실행할 수 있게 해줍니다. Node.js는 네트워크 프로그램 개발을 위해 만들어졌기에 주로 서버사이트에서 많이 사용되고 있습니다. 자바스크립트를 사용하는데 내장 HTTP서버 라이브러리를 포함하고 있어서 웹서버에서 아파치 등 별도의 소프트웨어 없이 구동할 수 있습니다. 현재 node.js를 사용하는 유명회사는, Netflis, Linkedin, Paypal, Uber, Facebook등이 있습니다.
특징
-
자바스크립트 언어 기반
-
이벤트 기반: Node.js는 미리 이벤트가 발생할 때 수행할 작업을 지정합니다. 그리고 이벤트 리스너에 콜백함수를 등록하는데 콜백함수가 호출되면, 노드는 다음 이벤트가 발생할 떄까지 대기합니다.
-
이벤트 루프: 동시에 여러개의 이벤트가 발생시 어떤 순서로 콜백함수를 호출할지 이벤트 루프가 판단합니다. 그리고 이벤트 종료시 이를 반복(루프)합니다.
-
논 블로킹 I/O: 이전작업이 완료될 때까지 기다리지 않고 먼저 처리된 결과 값을 반환 후 다음 입출력 작업을 수행합니다.
-
단일 스레드: 하나의 프로세스에 하나의 스레드만 실행 , 하나의 저장장치(레지스터 & 스택)로 표현합니다.
장점
-
친숙한 자바스크립트언어로 서버, 백엔드, 프론트엔드까지 전부 구사할 수 있습니다.
-
이벤트 기반 비동기방식이라 서버 무리가 적습니다.
-
단일 스레드라 메모리, 시스템 리소스를 절약할 수 있습니다.
-
크롬 V8엔진을 써서 업그레이드가 잘 됩니다.
-
C++로 개발된 엔진이라 확장성이 좋습니다.
-
npm(node package manger)을 통해 다양한 모듈을 제공, 원하는 라이브러리와 패키지를 검색해 설치할 수 있기 때문에 효율적입니다.
단점
-
이벤트기반 비동기방식이라 서버단 로직이 복잡하면 콜백함수가 계속 생겨서 들여쓰기가 많아 가독성이 떨어집니다.
-
비동기식 노드를 자바개발시 했던 방법으로 설계하고 프로그래밍하면 구동이 안될 수 있습니다.
-
단일 스레드라 하나의 작업에 소요되는 시간이 길다면 멀티스레드보다 비효율적입니다.
-
코드가 수행될 때 에러가 있는지 알 수 있고, 에러가 날 경우 프로세스가 내려가기 때문에 테스트가 매우 중요한데, 이게 번거로울 수 있습니다.
Node.js의 전망
출처: https://insights.stackoverflow.com/survey
stackoverflow에서 올해 58,000여명의 개발자들을 대상으로 실시한 개발언어 순위만 봐도 javascript가 1위 node.js가 7위입니다. (물론 node.js는 언어나 프레임워크라기 보다 런타임 환경으로 이해해야 맞지만) 여기서 java의 순위가 8위인데, 이는 spring boot를 사용한 java보다 node.js 환경의 javascript언어로 웹개발을 많이 한다는 의미입니다.
node.js가 단일 스레드라 cpu부하가 큰 작업엔 적합하지 않지만 네트워크 db 디스크 작업 같은 I/O엔 특화되서 일반적인 앱웹 개발에 더 용이 한것 같습니다. 게다가 프론트엔드의 경우 react. js나 vue.js를 쓰는데 백엔드까지 자바스크립트로 작업을 하면 개발자 입장에선 자바스크립트만으로 풀스택이가능하니 편하죠. 실제로 이런 장점 때문에 기존 springboot에서 node.js로 코드를 바꾸는 회사들도 있으니까요.
그래서 앞으로 node.js 환경에서 , javascript를 풀스텍 언어로 사용하는 역량을 기르는게 중요할 것 같습니다. 😅 java만 가지고 백엔드를 하기엔 js의 장점을 무시할 수 없네요.
참고
💻 스택오버플로우 개발 언어 순위 💻 https://velog.io/@daeseongkim/Node.js-Node.js%EB%8A%94-%EC%8B%B1%EA%B8%80-%EC%8A%A4%EB%A0%88%EB%93%9C 💻 https://www.chapter247.com/blog/node-js-vs-springboot-java-which-one-to-choose-and-when/ 💻 콜백과 비동기 제어
댓글남기기