자바스크립트 코드는 웹 브라우저와 별개로 사용할 수 없는 언어다.
정확히 말하면 웹 브라우저가 가지고 있는 Javascript Engine이 없이는 실행할 수 없는 언어라고 말할 수 있다.
자바스크립트가 실행되는 동작 원리에 대해서 잠시 살펴보면,
자바스크립트 코드는 웹 브라우저 (Chrome, Safari, Edge...)에 내장된 Javascript Engine을 이용해 실행된다.
- Javascript Engine은 브라우저 별로 다르며, Google Chrome의 V8엔진이 가장 대표적인 JS Engine이다.
- 브라우저의 JS Engine이 Javascript를 실행하기 위해 반드시 필요했기 때문에 JS는 브라우저에 독립적으로 사용할 수 없었다.
- 브라우저는 HTML 문서를 기반으로 동작하기 때문에, 버튼 클릭 이벤트 처리 등의 웹사이트에서의 인터렉션 외에는 이용할 수 없었다.
하지만, 편리한 언어인 Javascript의 팬들이 많아지면서 개발자들은 생각했다.
브라우저가 아닌 곳에서도 Javascript를 실행시킬 수 없을까?
이러한 수요에 의하여 만들어진 것이 Node.js이다.
Node.js란 무엇인가?
💡
대표적인 자바스크립트 엔진 V8을 이용해서 자바스크립트를 브라우저가 아닌 어디에서든 사용할 수 있도록 만들어주는 Javascript의 실행환경.
즉, Javascript의 Runtime
Node.js의 등장으로 인해 브라우저에서 벗어나서 독립적으로 자바스크립트를 사용할 수 있게 되었다.
자바스크립트라는 언어가 태생적으로 가지고 있던 엄청난 한계가 사라진 것이다.
예를 들면, 카카오톡 같은 프로그램들, 그리고 특히 웹 서버를 만들 수 있게 된 것이다.
Node.js의 특징
- 단일 쓰레드 (Single Thread)
- 이벤트 루프 (Event Loop) 기반 비동기 처리
- Non-Blocking I/O
장점
- Javascript로 서버단 로직을 처리할 수 있다.
- 새로운 언어를 습득하지 않아도 서버 기술을 빠르게 개발/응용할 수 있다.
- 개발이 빠르고 쉽다.
- Non-Blocking I/O 와 단일 쓰레드 이벤트 루프를 통한 높은 처리 성능
- 이벤트 기반 비동기 방식으로 서버에 무리가 적다.
- npm(node package manager)을 통한 다양한 모듈(패키지)제공
단점
- 이벤트 기반 비동기 방식으로 로직이 복잡하면 콜백함수의 늪에 빠질 수 있다.
- 코드가 수행되어야 에러가 있는지 알 수 있다. 에러가 나면 프로세스가 내려가기 때문에 테스트가 중요하다.
- 단일 쓰레드 임으로 작업 처리 시간이 오래 걸리는 웹서비스에는 어울리지 않다.
Node.js 활용도
Node.js가 어울리는 웹서비스
- 간단한 로직
- 동시에 여러 request가 많은 대용량 서비스
- 빠른 응답시간 요구
- 빠른 개발 요구
- ex) 네트워크 스트리밍 서비스, 채팅 서비스 ...
Node.js가 어울리지 않는 웹서비스
- 단일 처리가 오래 걸리는 서비스
- 서버 체크로직이 많은 경구 : CallBack 체크가 많기때문에 CallBack 지옥에 빠질 수 있음
- 업무 복잡도 / 난이도가 높은 경우 : 에러가 나면 서버가 죽기 때문에 코드 품질이 중요
참고
https://junspapa-itdev.tistory.com/3