Table of Contents
노드란
- 2009년, 라이언 달이 만든 V8 엔진으로 빌드된 자바스크립트 런타임 환경
-
비동기 이벤트 기반 자바스크립트 런타임
- Node.js가 없던 시절에는 자바스크립트를 실행하려면, HTML 안에
<script>
태그로 전달해줘야만 브라우저의 자바스크립트 엔진에서 실행 가능했다 - Node.js의 등장으로 브라우저 이외의 환경에서도 자바스크립트를 실행할 수 있게 되었다
- Node.js는 브라우저의 런타임과 다르게, 하드웨어의 파일 시스템에 접근할 수 있는 런타임 제공한다
노드의 장단점
- 장점
- 프론트엔드에서 사용하는 javascript 언어를 이용해 백엔드 서버 개발이 가능해졌다
- 훌륭한 패키지 매니저(npm), 커뮤니티, 프레임워크 성숙도
- 비동기 이벤트 기반 I/O를 사용해 동시에 여러 요청을 다룰 수 있다
- V8 엔진의 JIT 컴파일러 특성 때문에 서버 기동이 빠르다
- 단점
- 싱글 스레드이기 때문에 CPU 코어를 하나만 사용한다
- 그래서 CPU 작업이 많은 경우에는 사용하기 적절하지 않을 수 있다
노드 구조
노드의 특징
이벤트 기반
- 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 말한다
- 이벤트의 예: 클릭, 네트워크 요청, 타이머 등
- 이벤트 리스너: 이벤트를 등록하는 함수
- 콜백 함수: 이벤트가 발생했을 때 실행될 함수
싱글 스레드 논블로킹I/O
- 노드는 멀티 스레드 지원하지만 기본적으로 싱글 스레드 방식이다
- (멀티 스레드 코드는 프로그래밍 난이도도 높고, 제대로 작성하지 않으면 컴퓨팅 자원이 낭비된다. 그래서 멀티 스레드에 숙련된 개발자들끼리 일할 때 유용하다)
- 시간이 오래 걸리면서, 다른 곳에서 할 수 있는 작업들은 논 블로킹으로 백그라운드에서 병렬로 실행시킨다
- (ex. I/O 작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등 )
- (나머지 코드는 블로킹 방식으로 실행된다)
- 결론은 Node.js는 싱글 스레드로 프로그래밍 난이도는 낮추고, 논블로킹 I/O로 처리 성능을 높였다