Node Js

Chan·2023년 1월 16일
0

javascript

목록 보기
6/6
post-thumbnail

20 Node.js

**Background**


💡 비동기 프로그래밍의 장점 : 네트워크를 통해 통신하는 입, 출력 관리를 보다 편리하게 할 수 있다. Why? 복잡한 스레드 관리와 동기화 없이 프로그램이 여러 장치와 동시에 데이터를 주고 받을 수 있게 된다.

The Node Command


node 제공 / process.argv로 인자 받음

Node.js는 자바스크립트 파일이 사용되는 node라는 프로그램을 제공한다.

해당 코드는 hello.js에 저장되어 있다.

let message = "Hello world";
console.log(message);

이 프로그램을 실행시키기 위해 명령어 라인에 node를 넣을 수 있다 .

$ node hello.js
Hello world 

Node에서 console.log method는 브라우저에서 작동하는 것과 비슷하다.

→ 이때 Node에서 text는 브라우저의 JavaScript의 console이 아닌 프로세스의 표준 출력 스트림으로 이동한다.

파일을 제공하지 않고 Node를 실행한다면 Javascript 코드를 입력하고 결과를 즉시 볼 수 있는 프롬프트가 제공된다.

$ node
> 1 + 1
2
> [-1, -2, -3].map(Math.abs)
[1, 2, 3]
> process.exit(0)
$

**exit** : 프로세스를 종료하고 프로그램이 성공적으로 완료되었는 지 ( 코드 0 ) 또는 오류가 발생했는 지 여부를 알려준다.

**process.argv**

시작 시 실행 인자를 받으려면 process.argv로 받을 수 있다.

console.log(process.argv[2]); // test1
console.log(process.argv[3]); // test2 

process 객체의 argv로 접근하면 시작할 때 뒤에 오는 인자 값들을 순서대로 사용할 수 있다.

// node argunment.js test1 test2 
console.log(process.argv[0]); // NODE_PATH\node.exe 
console.log(process.argv[1]); // ARGUMENT.JS_PATH\argument.js

**Modules**


require / exports

require이 호출이 되면 Node는 주어진 문자열을 로드할 수 있어야 한다.

💡 /tmp/robot/robot.js 파일에 “./graph”를 요청시

/tmp/robot/graph.js 파일을 로드 시도

상대 경로 또는 절대 경로처럼 보이지 않는 문자열이 필요할 때 이는 **내장 모듈** 또는 **node_modules** 디렉토리에 설치된 모듈을 참조하는 것으로 가정

require(”fs”) : Node의 내장 file_system module 제공

require(”로봇”) : node_moduels/robot/에 있는 라이브러리 로드

const {reverse} = require("./reverse");

// Index 2 holds the first actual command line argument
let argument = process.argv[2];

console.log(reverse(argument));

reverse.js 파일에 해당 코드 작성

→ 문자열 반전을 위한 라이브러를 정의

 exports.reverse = function(string) {
  return Array.from(string).reverse().join("");
};

exports에 해당 모듈의 인터페이스를 추가하면 main.js에서는 reverse 함수를 불러와서 사용 가능하다.

$ node main.js JavaScript
tpircSavaJ

**Installing with NPM**


NPM : NPM의 주요 용도는 패키지 다운로드

  • npm install을 한다.
  • NPM은 node_modules라는 디렉토리 생성

→ 해당 디렉토리 내에는 라이브러리가 포함된 ini 디렉토리가 존재

require(”ini”)를 호출시 구성 파일을 구문 분석하기 위해 구문 분석 속성 호출

→ 기본적으로 NPM은 중앙 위치가 아닌 현재 디렉터리 아래에 패키지 설치

**Package files**


npm install 예시에서 package.json 파일이 존재하지 않는다는 경고를 볼 수 있다.

따라서 해당 파일을 추가하는 것을 추천한다.

해당 파일에는 프로젝트의 이름 버전 등등에 대한 정보가 들어가 있다.

{
  "author": "Marijn Haverbeke",
  "name": "eloquent-javascript-robot",
  "description": "Simulation of a package-delivery robot",
  "version": "1.0.0",
  "main": "run.js",
  "dependencies": {
    "dijkstrajs": "^1.0.1",
    "random-item": "^1.0.0"
  },
  "license": "ISC"
}

설치할 패키지의 이름을 지정하지 않고 npm 설치를 실행하면 package.json에 나열된 종속성이 NPM에 설치된다.

→ 자동으로 패키지 이름이 설정돼서 저장된다는 말이다.

Versions


package.json 파일은 프로그램 자체의 버전과 종속성에 대한 버전을 모두 나열한다.

패키지의 종속성에 대한 버전 번호 앞에 캐럿 문자 ^입니다. json은 지정된 번호와 호환되는 모든 버전이 설치될 수 있음을 나타낸다.

^2.3.0은 2.3.0보다 크거나 같고 3.0.0보다 작은 모든 버전이 허용됨을 의미

package.json 파일에 있는 디렉터리에 npm publish를 실행하면 json 파일에 나열된 이름과 버전이 있는 패키지를 레지스트리에 게시

→ 누구나 NPM에 패키지를 게시할 수 있지만 임의의 살마들이 기존 패키지를 업데이트 할 수 있다면 문제가 발생할 수 있기 때문에 아직 사용되지 않은 패키지 이름으로만 패키지 게시

**The file system module**


fs 모듈을 사용하면 file system을 나타낸다.

let {readFile} = require("fs");
readFile("file.txt", "utf8", (error, text) => {
  if (error) throw error;
  console.log("The file contains:", text);
});

**utf8** : 파일 문자열 decoding 하는데 사용

utf8을 전달하지 않으면 Node는 문자열 대신 Buffer 객체인 (8 bit chunks of data) 을 전달한다.

writeFile 은 디스크에 파일 쓰는 데 사용된다.

const {writeFile} = require("fs");
writeFile("graffiti.txt", "Node was here", err => {
  if (err) console.log(`Failed to write file: ${err}`);
  else console.log("File written.");
});

→ 여기서는 인코딩을 지정할 필요가 없다.

0개의 댓글