상세 컨텐츠

본문 제목

3장) Node.js 입문

본문

높은 확장성을 고려한 웹 / 애플리케이션 프레임워크

=> 기존 JS 활용해 백엔드 서비스 개발까지 진행 할 수 있게 되었다.


Node.js 사용해 애플리케이션 내에서 Node.js 모듈을 빌드하고 배포 및 사용하는 방법

 

1. Node.js 이해

웹 서비스 개발과정에 겪게 되는 동시성 처리 과정에 해답으로 2009년 라이언 달(Ryan Dahl) 개발

비슷한 시기 구글에서 웹 트래픽 처리에 최적화된 크롬 웹 브라우저용 V8 자바 스크립트 엔진 출시

-> 라이언은 웹 클라이언트 개발에 사용되던 V8엔진을 이용해 서버 개발이 가능한 Node.js로 개발하게 된것

 

[ 용도 ]

  1. REST API 개발
  2. 실시간 멀티플레이 개발
  3. 도메인 교차 기능, 서버 측 요청과 같은 웹 서비스 백엔드
  4. 웹 기반 애플리케이션
  5. 대화방 같은 여러 사람이 동시에 접속을 가능하게 하는 도구

Node.js 설치 위치 살펴보기

실행 파일과 node_modules 폴더가 있다.

더보기

node: Node.js 자바스크립트 엔진의 실행 파일

자바스크립트 파일 위치를 넘겨주면 Node.js는 해당 스크립트를 실행한다.

목표 위치가 없으면 직접 작성하고 실행할 수 있는 콜솔이 실행된다.

 

npm: Node.js 패키지를 관리하기 위해 사용되는 명령 프로그램

 

node_modules: 설치된 Node.js 패키지를 포함. Node.js 기능을 확장시켜줄 라이브러리와 같이 사용된다.

 

개인 노드 패키지 모듈에는 패키지 정의 정보를 가진 package.json 파일이 들어 있다.

이름, 버전, 작성자, 기여자 등의 메타데이터 정보가 들어 있다.

종속 관계의 패키지 정보와 노드 패키지 관리자가 설치 및 배포과정에 사용하는 추가 정보들도 포함된다.

 

[ package.json 사용되는 지시어 ] -> 개념 이해

더보기
지시어 설명 사례
name 패키지 고유 이름 "name" : "blahblah"
preferGlobal 전역 설치 선호 표시 "preferGlobal": true
version 모듈 버전 정보 "version": 0.0.1
author 작성자명 "author": "blahblah@blahblah.com"
description 설명 -
contributors 공헌한 사람들 -
bin 프로젝트와 같이 설치될 바이너리

[bin": {

"excalibur": "./bin/excalibur"}

scripts node 런치 시 사용한 console app

"scripts" : {

"start": "node 위치",

"test": "echo testing"

}

main 바이너리나 .js파일로 구성되는 애플리케이션 메인 진입점 "main": "./bin/excalibur"
keywords npm 검색 시 사용될 키워드

"keywords": [

"swallow", "unladen" ]

dependencies 종속성 있는 모듈 버전

"dependencies": {

"express": "latest",

"connect": "2.x.x",

"cookies": "*" }

engine 패키지에 사용된 node 버전

"engines": { "node": ">=0.6" }

npm은 기본적으로 package.json을 찾는다.

 

⊙ 패키지로 묶어 Node.js 모듈 생성 및 NPM 레지스트리로 발행하기

모듈 만들기

더보기
1. 프로젝트 root 폴더에 새로운 이름에 폴더 생성 (자유)
2. 생성한 폴더에 파일 생성 (ex. censortext.js)

censortext.js

var censoredWords = ["sad", "bad", "mad"];
var customCensoredWords = [];

function censor(inStr) {
  for (idx in censoredWords) {
    inStr = inStr.replace(censoredWords[idx], "****");
  }
  for (idx in customCensoredWords) {
    inStr = inStr.replace(customCensoredWords[idx], "****");
  }
  return inStr;
}

function addCensoredWord(word) {
  customCensoredWords.push(word);
}

function getCensoredWords() {
  return censoredWords.concat(customCensoredWords);
}

exports.censor = censor;
exports.addCensoredWord = addCensoredWord;
exports.getCensoredWords = getCensoredWords;

 

해당 폴더 안에서 패키지 모듈 제작을 위해 package.json을 생성한다.

name, version, main은 필수로 추가한다.

main - JS 모듈의 이름으로  censortext가 된다.

 

./package.json

{
  "author": "Edward",
  "name": "censorify",
  "version": "0.0.1",
  "description": "Censors words out of text",
  "main": "censortext",
  "dependencies": {},
  "engines": {
    "node": "*"
  }
}

 

npm pack 실행 -> 로컬 패키지 모듈 빌드.

 

+ NPM 레지스트리에 발행하고 싶은분들은 읽으시면 됩니다.

더보기

http://npmjs.org 에 위치한 NPM 레지스트리 발행

공개 저장소에 추가 + npmjs 계정 추가

1. github에 저장소 추가
2. https://npmjs.org/signup 계정 생성
3. npm adduser 로 사용자명, 패드워드, 이메일 정보 입력
4. package.json 내용 수정

./package.json
{
  "author": "Edward",
  "name": "censorify",
  "version": "0.0.1",
  "description": "Censors words out of text",
  "main": "censortext",
  "repository": {
    "type": "git",
    "url": "git@github.com:donghyunele/JS.git"
  },
  "keywords": [
    "censor",
    "words"
  ],
  "dependencies": {},
  "engines": {
    "node": "*"
  }
}

5. npm publish 실행 => NPM 레지스트리상의 검색 (npm search) 통해 모듈 찾고, npm install로 설치 가능.

 

[ 제거를 원할 경우 ]

npm unpublish project name

 

+ 강제로 해야하는 경우

npm unpublish censorify --force

 

패키지 모듈 사용하는 방법

애플리케이션에 모듈을 설치하고 require() 함수를 사용해 모듈을 로딩해 사용한다.

 

사용법

더보기

폴더 생성

./readwords 이름의 프로젝트 생성

npm install 프로젝트 이름 or np install ../censorify/censorify-0.0.1.tgz
=> npm i 이런식으로 줄일 수 있다.

./readwords.js

var censor = require('censorify');
console.log(censor.getCensoredWords());
console.log(censor.censor("Some very sad, bad and mad text"));
censor.addCensoredWord("gloomy");
console.log(censor.getCensoredWords());
console.log(censor.censor("A very gloomy day."));

 

콘솔에 데이터 쓰기

콘솔 모듈 - 디버그나 정보를 콘솔에 출력하기 위한 기능

결과 값, 시간 변화정보, traceback, assertion 출력

더보기
함수 명세
log([데이터], [...])

콘솔에 결과 값 출력

데이터 변수로 문자열이나 변환 가능한 객체 사용 가능

console.log("There are %d items", 5);

info([데이터], [...]) log와 동일
error([데이터], [...]) log와 info와 동일, 결과 값이 stderr로 출력
warn([데이터], [...]) log와 동일
dir(오브젝트) 객체의 문자열 표시 형식으로 콘솔에 출력
console.dir({name: "Brad", role: "Author"});
time(라벨) label 문자열에 밀리 초 단위의 현재 타임 스탬프를 할당함
timeEnd(라벨) 현재 시간과 label에 타임 스탬프로 지정한 시간과의 차이를 결과로 출력
console.time("FileWrite");
f.write(data); //takes about 500ms
console.log("FileWrite");
>> FileWrite: 500ms
trace(라벨) 코드 내 현재 위치에서의 스택 추적 정보를 stderr에 출력
module.trace("traceMark");
>> Trace: traceMark
     at Object.<anonymous> (C:\test.js:24:9)
     at Module._comile (module.js:456:26)
     at Object.Module._ext.js (module.js:474:10)
assert([표현식], [메시지]) expression이 false인 경우 message와 스택 추적 정보를 콘솔에 출력

 

관련글 더보기