[NODE] NODE.js 란 무엇일까요 ?
NODE.js 란 무엇인가를 알아보고 어떠한 특징이 있으며 그 탄생 배경을 알아본다.
1.개요
NODE JS 는 일반적으로 문법이 JavaScript 이며 JavaScript 엔진 V8 을 사용해서 JS를 실행할수 있는 런타임 실행환경 입니다.
2.탄생배경
위의 개요를 이해하기 쉽게 말하자면 JavaScript 는 사실 브라우저에서 쓰이는 언어 였습니다.
하지만 개발자들은 여러가지 언어를 학습하는데 비용이 발생한다는 생각을 가지게 되었고
javascript를 브라우저 외의 환경에서 사용할 수 있다면 얼마나 좋을까 생각해 왔었습니다.
하지만 속도와 성능이 다른 언어에 비해 느리고 최적화가 안되서 그러한 프로젝트들은 인기를 끌지 못하였습니다.
그러는 와중 최적화와 성능이 좋은 크롬에 탑재된 V8 엔진이 세상에 나오자
그 엔진으로 만든 Node.js 의 인기가 높아지고 많은 사람들이 프로젝트에 기여를 해서 거대한 생태계가 구성되기 시작했습니다.
새로운 언어를 배울 필요도 없고 코드의 통일성을 지킬수 있기 때문에 한국에서도 JS 만 가지고 개발하는 풀스택 개발이 한 때 유행을 했던 시기도 있었죠.
이런 Node.js 를 고안해낸 사람은 Ryan Lienhart Dahl 이라는 분이고 이사람을 검색해서 소스를 찾아보는 것도 나쁘지 않다고 생각합니다.
3. Node의 특징
Node Js 의 특징은 일반적으로 Javascript의 특징과 유사합니다.
- Node.js는 Single-Thread의 non-blocking I/O 이벤트 기반 비동식 방식으로 작동한다.
- JavsScript 엔진(V8 Engine)으로 빌드 된 JavaScript 런타임이다.
- 싱글 쓰레드이긴 하지만 LIBUV 부분에서 멀티쓰래드 역할을 담당하기때문에 Node는 멀티적인 요소를 못한다는 의미는 아니다.
Node의 특징을 더 자세히 이해하려면 Event Loof 에 대해서 학습해야하는데 그 내용은 다음 링크를 타고 상세히 살펴보기 바랍니다.
그럼 장점과 단점을 살펴볼까요?
3-1. Node의 장점
자바스크립트를 동일하게 사용해서 서버단 로직을 처리할 수 있다는게 가장 큰 장점 새로운 언어를 습득하지 않고도 자바스크립트를 활용해 서버기술을 빨리 향상시킬 수 있다.
이벤트 기반 비동기방식이라 서버 무리가 적다.
npm(node package manager)을 통한 다양한 모듈(패키지) 제공 npm을 이용해 자신이 필요한 라이브러리와 패키지를 검색해서 설치하고 사용할 수 있기 때문에 효율성이 좋다.
구글이 만드는 JavaScript 엔진을 사용한다.
구글은 V8 엔진 성능 업그레이드를 계속 하고 있다.C++로 개발된 V8 JavaScript 엔진이기 때문에 확장성이 좋다.
3-2. Node의 단점
이벤트 기반 비동기방식이라 서버단 로직이 복잡한 경우 콜백함수의 늪에 빠질 수 있다.
예를 들어, 한번의 요청에 대해 DB에서 조회한 결과값에 따라 다른 로직을 처리해야 하며, 이런 로직이 여러개인 경우 콜백함수 늪 (Callback Hell) 에 빠진다.단일 쓰레드(Single Thread)이기 때문에 하나의 작업 자체가 많이 걸리는 웹서비스에는 어울리지 않다.
게시판형태와 같이 가벼운 I/O가 많은 웹서비스에 어울린다.코드가 수행되어야 코드에 에러가 있는지 알 수 있으며, 에러가 날 경우 프로세스가 내려가기 때문에 테스트가 엄청 중요하다. 반드시 모든 케이스에 대해 소스코드를 검증해야 한다.
3-3. Node.js 가 어울리는 웹서비스
간단한 로직.
대용량(동시에 여러 request를 처리)
빠른 응답시간 요구
빠른 개발 요구
비동기방식에 어울리는 서비스(네트워크 스트리밍 서비스, 채팅 서비스 등)
3-4. Node.js 가 어울리지 않는 웹서비스
단일 처리가 오래 걸리는 경우 : 싱글 쓰레드이기 때문
서버 체크로직이 많은 경우 : 비동기방식이기 때문에 CallBack Hell에 빠지지 않기 위해
업무 복잡도/난이도가 높은 경우 : 에러가 나면 서버가 죽기 때문에 코드 품질 중요
4. 정리
Node js는 모던 웹 개발에서 필수적인 요소로 자리 잡아가고 있으며 NPM과 Git 에서 협업을 할 때 엄청난 장점들을 발견 할 수 있다. 트랜드를 따라가고 싶다면 학습은 필수라고 생각한다.