Tech Blog of Pinomaker
Published 2022. 11. 14. 13:29
[Node JS] Node JS란? B.E/Node JS

Node.js

확장성 있는 네트워크 애플리케이션(특히 Server Side) 개발에 사용 되는 소프트퉤어 플랫폼으로, Javascript를 활용하여 논 블로킹 I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.

 

내장 HTTP 서버 라이브러리를 포함하고 있어서 웹 서버에서 아파치 등의 별도 소프트웨어 없이 동작이 가능하여 서버의 동작에 있어서 더 많은 통제를 가능하게 한다. 

 

 

Node.JS는 2009년에 Ryan Dahl이  Inangural JSConf EU conference에서 발표하였는 데, Node.js의 탄생 전까지의 Javascript는 Frontend에서만 사용 되는 언어였습니다. 단순하게 HTML과 CSS로만 구성된 웹 서비스에서 동적 페이지를 다루는 용도로 사용 되었고, 주로 <script> 태그로 삽입 하여 사용 했었으나 브라우저에 삽입된 코드가 그대로 노출 되고 보안에 취약하다는 점이 있어 사용은 많이 하지만 그냥 스크립트 언어라는 괄시를 받았다.

 

하지만 Node.js의 등장으로 Javascrip를 이용하여 서버를 구축할 수 있게 되었고 이는 Frontend와 Backend에서 같은 언어를 사용할 수 있다는 큰 장점이 되었으며, 같은 개발자가 FullStack으로 개발할 경우 생산성을 향상 시키고, Frontend와 Backend가 분리 되어있다고 하더라도 커뮤니케이션이 잘 되는 장점이 있었고, 2008년 구글은 크롬을 출시하면서 자체 개발한 Javascript Engine인 V8을 크롬에 내장하여 Javascript의 속도도 향상 되었다.

 

 

 

NPM

Node Package Manager의 약자로, Node.js의 패키지 관리 시스템

 

Node.js는 NPM을 이용하여 누구나 자신이 만든 Node.js 기반 라이브러리를 등록하여 다른 사람들에게 공개할 수 있으며, 비공개를 희망한다면 돈을 지불하고 비공개로 등록도 가능합니다. 현재 2022년 3월 기준으로 NPM에 등록된 패키지 수는 190만개라고 합니다. 대부분의 소스 코드가 Github에 공개되고 있는 , Github는 NPM을 인수하였고 Github는 MicroSoft의 소유이므로 사실상 NPM은 MicroSoft에서 주도하는 것이다.

 

 

단일 쓰레드 이벤트 기반 비동기 방식

Node.JS는 단일 쓰레드에서 구동 되는 non-blocking I/O의 이벤트 기반 비동기 방식으로 작동 합니다. 작업 요청이 한 번에 들어올 때 각 작업을 처리하기 위한 쓰레드를 만들고 할당하는 방식을 멀티 쓰레드 방식이라고 하는 데, 여러가지 작업을 동시에 처리하여 작업 처리 속도가 빠른 장점이 있지만 공유 자원을 관리하는 노력이 많이 들고 잘못 작성된 동기화로 락에서 빠져나오지 못 하는 경우가 많습니다. 또 쓰레드가 늘어날 때 마다 메모리를 소모하게 되어 메모리 관리도 중요합니다.

 

하지만 Node.js는 하나의 쓰레드에서 작업을 비동기로 처리하는 데, 사실 애플리케이션에서는 단일 쓰레드지만, 백그라운드에서 쓰레드 풀을 구성해 작업을 처리 하게 되는 데, 개발자가 직접 쓰레드 풀을 관리하지 않고 Node.js에 포함된 Liibuv5가 그 역할을 하기에 개발자는 쉬운 코드를 작성할 수 있습니다.

 

 

Node.js의 장단점

Node.js는 단일 쓰레드 이벤트 기반 비동기 방식이기에 서버의 자원에 크게 부하를 가하지 않고, 이는 대규모 네트워크 애플리케이션 개발에 적합 합니다. 하지만 쓰레드 하나만을 사용하기에 하나의 쓰레드에서 문제가 발생하면 전체적으로 오류를 발생할 위험이 있습니다.

 

Node.js는 컴파일러 언어의 처리 속도에 비하여 성능이 떨어진다는 단점이 있지만 서버의 성능이 계속 발전하고 V8 엔진의 성능도 계속 향상 되고 있어 서버로 개발하기에 손색이 없고 비동기 방식으로 복잡한 기능을 구현하면 가독성이 떨어지거나 콜백 지옥에 빠지게 되었는 데, Promise와 async/await이 도입되면서 문제가 거의 없어졌다.

profile

Tech Blog of Pinomaker

@pinomaker

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!