본문 바로가기
Back/node.js+express+npm

[node.js] 개념정리 및 기본 설치

by SIXXXX_ 2022. 2. 15.
728x90

Node.js 기본 개념

Node.js 는 JavaScript 런타임

쉽게 말해서 JavaScript로 만든 프로그램을 실행할 수 있도록 만든 자바스크립트 실행기(환경)

 

 

 

 

  1. Node.js를 사용하려면 먼저 JavaScript를 배워야한다. Node.js는 JavaScript를 사용하기 위해  만들어진 것이기 때문이다.
  2. JavaScript는 C/C++, Java 와 같은 프로그래밍 언어이다. JavaScript는 독립적인 언어가 아닌 스크립트 언어이다.
  3. 스크립트 언어는 특정한 프로그램 안에서 동작하는 프로그램이기 때문에 웹 브라우저 프로그램 안에서만 동작을 한다. 즉, 웹 브라우저(크롬, 사파리, 익스플로러, 파이어폭스 등)가 없으면 사용할 수 없는 프로그램이다.
  4. 여기서 Node.js가 나오는 이유가 된다. 즉, JavaScript 를 웹 브라우저에서 독립시킨 것으로 Node.js를 설치하게 되면 터미널프로그램(윈도우의 cmd, 맥의 terminal 등)에서 Node.js를 입력하여 브라우저 없이 바로 실행할 수 있다.
  5. Node.js를 이용하여 웹 브라우저와 무관한 프로그램을 만들 수 있게 되었다.
  6. 하지만 JavaScript에서 분리된 언어이기 때문에 문법은 같다.
  7. 중요한 것은 Node.js를 이용하여 서버를 만들 수 있다는 것이다.
  8. 중요한 이유는 이전까지 Server-Client 웹사이트를 만들 때 웹에서 표시되는 부분은 JavaScript 를 사용하여 만들어야만 했으며, 서버는 Reby, Java 등 다른 언어를 써서 만들었어야 했는데 마침내 한 가지 언어로 전체 웹 페이지를 만들 수 있게 된 것이다.

Javascript에 이어 Node.js를 연달아 배우면 도움이 될 것 같다.

 

 

특징

 

  • js를 서버에서도 사용할 수 있도록 만든 프로그램(JSON 형식과 쉽게 호환된다)
  • 웹서버와 같이 확장성 있는 네트워크 프로그램을 제작하기 위해 만들어졌다 -> 확장성이 있는 네트워크 어플리케이션 개발에 사용되는 소프트웨어 플랫폼이다.
  • Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.
  • 내장 HTTP 서버 라이브러리를 포함하고 있다.
  • 싱글 스레드(논 블로킹 방식으로 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행한다.)
  • I/O 요청이 많이 발생하면 노드를 서버로 사용하는 것이 좋다. CPU 부하가 큰 작업에는 적합하지 않다.
  • 즉, 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는데 노드는 적합하다.
  • 예를 들어 네트워트나 데이터베이스, 디스크 작업 같은 I/O에 특화되어있다. 실시간 채팅 애플리케이션, 주식 차트도 포함된다.

 

이벤트 기반

  • 노드는 V8(엔진)과 더불어 libuv라는 라이브러리를 사용한다.
  • libuv 라이브러리는 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있다.
  • 이벤트 기반(Event-driven)이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미한다.
  • 즉, 이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두고, 이를 이벤트 리스너에 콜백함수를 등록한다.
  • 이후 이벤트가 발생하면 리스너에 등록해둔 콜백함수를 호출하며, 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기한다.

이벤트 루프

  • 이벤트 루프(event loop)는 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백함수를 호출 할지를 이벤트 루프가 판단한다.
  • 노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프(loog)라고 부른다.

논 블로킹 I/O 

  • 이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있다.
  • 작업에는 두 가지 종류가 있는데 동시에 실행될 수 있는 작업과 동시에 실행될 수 없는 작업이다.
  • 특히 파일 시스템 접근, 네트워크를 통한 요청 작업은 입력(Input)/출력(Output)의 일종이며,
  • 이러한 작업을 할 때 노드는 비동기 방식으로 블로킹을 만들지 않게 끔(논 블로킹) 처리한다.
  • 비동기이란 이전 작업이 완료될 때까지 대기하지 않고 동시에 작업을 수행한다.
  • 반대로 동기는 이전 작업이 끝나야만 다음 작업을 수행한다.
  • 자세하게 풀어서 아야기하면 함수 호출 시 당장 실행하는 것이 아니라(동기→블로킹) 일단 어느 곳에 쌓아 놓고 동시에 요청을 처리하고(비동기→논 블로킹) 요청이 완료된 순서대로처리(스택 이용) 한다는 말이다.

활용

 

실시간 온라인 채팅, 실시간 온라인 게임 등 실시간 기능을 넣을 수 있다.

로그인 기능을 넣어 유저를 관리하고 점수를 관리하는 데이터베이스 기능을 Node.js를 통해 만들 수가 있다.

 

설치

 

http://node.js.org  로 설치 할 수 있다

 

[LTS(Long Term Supported) 버전]
짝수 버전이 LTS 버전
안정성과 보안성에 초점을 두어 개발
LTS : 기간을 두고 버전이 적응될 수 있도록 해놓은 것
프론트엔드 개발쪽은 Stable 버전 추천

 

[Stable 버전]
Stable 버전은 잦은 업데이트를 진행
홀수 버전
서버로 사용할려면 LTS를 사용 추천
 
 
환경변수 설정을 하지 않아도 된다고 한다.
node.js 로컬 환경으로 개발 / 디버깅시 잡다한 문제가 많이 발생됩니다.
이래서 node.js개발자들은 전부 맥을 사용하나봅니다 터미널 명령어의 일관성도 있어서?
 
 
 
 

node.js설치 후 파일

c:/program Files/ nodejs

 

Cmd

 

 

cmd  속성- 글꼴 크기 키울 수 있다

npm (Node Package Manager)

node.js 에서 사용하는 모듈들을 패키지로 만들어 npm을 통해 관리하고 배포하고 있다.

다른 사람들이 만들어놓은 모듈들을 npm으로 설치해 사용이 가능하다는 뜻

다른 모듈의 의존성을 자동으로 해결한다

 

다른언어에서 비슷한 개념으로
- ruby의 Gem
- php의 Composer
- C#의 NuGet

 

- java의 Jpm
- python의 pip

 

 

npm설치 (cmd)

npm install 로 설치

 

 

npm -v  : npm의 version 정보

 

npm install bower - g : 전역 설치

특정 디렉토리 안에서만 쓰이는 모듈이 아니라 전역으로 설치해 명령어를 이용하기 때문에 전역 설치하는 것

 

 

 

npm에서는 패키지 관리는 package.json이라는 파일로 관리합니다.

package.json을 가장 쉽게 생성하는 방법은 npm 명령어를 통해 생성하는 방법입니다.

 

npm init 명령어를 통해 package.json을 쉽게 생성할 수 있다

package name는 패키지명입니다. (test1)는 기본 값으로 폴더 명입니다.

version는 패키지 버전입니다. (1.0.0)는 기본 값입니다.

description는 패키지에 대한 설명입니다. 

entry point는 시작 파일 명입니다. (index.js)는 기본 값입니다.

test command는 npm test를 호출할 때마다 실행되는 명령입니다.

git repository는 패키지가 저장되어 있는 Git 저장소의 URL입니다.

keywords는 패키지의 키워드입니다.

author는 원작자의 이름입니다. 여러분의 이름이나 아이디를 입력하면 됩니다.

license는 패키지 사용에 대한 라이선스입니다. (ISC)는 기본 값입니다.

 

cmd npm init 예시
package.json 생성완료

 

vscode 파일 열어본 결과

package.json은 npm을 통해 생성되는 node 관련 component들의 dependency를 관리하는 모듈로써,

Maven Project의 pom.xml과 비슷한 역할이라 생각하면 이해가 쉬울 수 있다.

 

 

FrameWork Express

간단하게 npm 모듈로 기본이 되는 express 모듈(express.js) 을 설치 >>

Node.js를 이용하여 웹 애플리케이션을 만들기 위한 틀(Frame)을 제공하는 라이브러리의 집합이다.

 

npm install express --

express.js 설치중 
설치후 

 

package-lock.json 파일과 node_modules 파일 생성

설치된 package-lock.json 파일은 node_modules 에 있는 모듈들에 대한 버전 정보를 가지고 있다.

버전 정보들은 설치되는 모듈간의 의존성 처리에 사용된다. 

npm install 명령어를 이용해 모듈들을 설치할 때마다 package-lock.json 파일 업뎃된다.

 

 

dependencies : { express : 4.17.2 } 버전 추가됨

 

 

 

 

 

 

Reference