-
[Node.js] Node.js와 모듈Back-end/Node.js 2020. 4. 5. 17:36
Node.js
구글의 오픈소스 자바스크립트 엔진인 V8으로 빌드된 서버사이드 자바스크립트
언어는 C, C++, JavaScript로 개발되었다.
비동기식 프로그래밍이 가능하기 때문에 규모가 큰 서비스를 개발하기 좋은 소프트웨어 시스템
노드가 개발된 배경
기존 JSP와 같은 언어로 웹 어플리케이션을 개발한다면 일정한 메모리 공간을 사용하여 쓰레드를 생성해야 한다.
그렇다면 사용자가 많아질수록 서버를 추가해야 할 수 밖에 없다. -> 트래픽 비용의 과부하
또한 서버가 여러 대라면, 모든 서버들이 같은 데이터에 대해서 동기화되어 있어야 한다는 문제가 있었다.
-> 이러한 문제를 해결하고자 노드가 개발되었다.
기존 멀티쓰레드 기반에서 벗어나 노드에서는 서버와 클라이언트의 연결을 하나의 이벤트로 처리된다. (메모리 차지 감소)
운영체제에서 배웠듯이, 일반적인 환경에서는 하나의 프로세스가 자원을 점유하고 있을 때, 그 프로세스가 사용을 종료할 때까지 다른 프로세스는 기다려야 한다. 프로그램에서 I/O 작업을 하고 싶다면 운영체제의 kernel에서 System call 요청을 보내야 한다.
kernel은 이 요청을 받아 들여 I/O를 위한 동작을 수행하고 그동안 프로그램은 kernel이 마칠 때까지 기다려야 한다. (blocked 상태)
멀티 쓰레드는 위의 요청이 여러 개 들어올 때 필요한 개념이다. thread가 여러 개 동시에 실행되어 처리된다.
하나의 CPU를 여러 프로세스가 시간을 나누어 동작함으로써 각 프로세스가 CPU를 공유하는 것처럼 운영된다.
그러나 멀티 쓰레드는 결국 I/O에 대한 System call을 보내고 응답이 올 때까지 마냥 기다려야 한다는 점이다.
또한 CPU를 공유하는 쓰레드 간의 전환이 발생할 때 Context Switch에 대한 cost도 존재한다.
Node.js는 멀티쓰레드 문제점을 보완하고자 싱글 쓰레드로 진행되는데 다만 비동기식 모델이다.
I/O 작업을 요청했다면 그 응답을 기다리지 않고 다음 작업을 실행하고 있다가 응답이 오면 이벤트를 발생시킨다.
Node.js의 장점
프론트엔드를 구성하는 언어는 대부분 자바스크립트이므로 백엔드와 프론트엔드의 언어를 자바스크립트로 통일된다.
Front-Back 양쪽을 자바스크립트 개발자가 모두 개발할 수 있게 된다. 또한 유지보수도 용이해진다.
또한 NPM(Node Package Modules)이라는 모듈 패키지 관리 도구를 이용하여 Extension Module을 쉽게 설치할 수 있다.
npm install --save **** npm install --save A B C // A,B,C 3개 설치
Node.js Module
관련된 코드들을 모아 캡슐화 해놓은 것들을 '모듈'이라고 한다.
노드도 자바스크립트를 기반으로 작성된 소프트웨어이기 때문에 모듈도 각 객체들로 구성된다.
출처 : https://edu.goorm.io/learn/lecture/557/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-node-js/lesson/21938/%EB%85%B8%EB%93%9C%EC%9D%98-%EB%AA%A8%EB%93%88-%EA%B0%9C%EB%85%90 기본적으로 포함되어 있는가? 기본 모듈 노드를 설치하면 기본적으로 설치되는 모듈 확장 모듈 노드의 기능을 확장하기 위한 모듈, 추가적 설치 필요 모듈 설치 위치 / 사용 가능 범위 글로벌 모듈 어디서든 사용할 수 있도록 설치한 확장 모듈 로컬 모듈 해당 어플리케이션에만 사용하는 모듈 어떤 언어로 구현되었는가? 일반 모듈 자바스크립트로 개발된 모듈 네이티브 모듈 네이티브 언어인 C/C++로 개발된 모듈 복수의 파일로 구성되어 있는가? 복합 모듈 다양한 파일을 포함하는 모듈, 구성 단위는 폴더