본문 바로가기
ETC/develop

node.js & Express Develop#2

by asdf12345 2021. 3. 14.

[ node.js 개발일지 2일 ]

Table of contents

#0 Concept

#1 Develop

 

#0. Concept

주로 이용되는 전역 객체,  모듈

 

  • Node.js 에서 자주 이용되는 전역객체

1. console 객체

console.log(): 콘솔에 로그 메시지 출력
console.time(label) : 시간 측정 시작
console.timeEnd(label) : 시간 측정 종료

 

2. Process 객체
1) 속성

process.argv: 프로그램의 매개변수 정보
process.env : 컴퓨터 환경과 관련된 정보
process.version : Node.js의 버전
process.versions : Node.js 프로세스에서 사용하는 모듈들의 버전
process.arch : 프로세서의 아키텍처
process.platform : 플랫폼의 정보

2) 메소드

process.exit() : 프로그램 종료
process.memoryUsage() : 메모리 사용 정보
process.uptime() : 현재 프로그램이 실행된 시간

 

3. Exports 객체 : exports객체의 속성이나 메소드로 정의

1) Example test.js

exports.double = function(r) {
    return r * r;
};
 
exports.plus = function(r) {
    return r + r;
};

2) Example main.js

var caculator = require('./test.js');
console.log('Double value is '+ caculator.double(3));
console.log('Plus value is ' + caculator.plus(3));

 

  • Module

1. OS 모듈

os.tmpdir() : 임시 저장 폴더의 위치
os.endianness() : CPU의 endianness(BE 또는 LE)
os.hostname() : 호스트(컴퓨터) 이름
os.type() : 운영체제 이름
os.platform() : 운영체제 플랫폼
os.arch() : 운영체제 아키텍처
os.release() : 운영체제 버전
os.uptime() : 운영체제가 실행된 시간
os.loadavg() : 로드 에버리지 정보를 담은 배열
os.totalmem() : 시스템의 총 메모리
os.freemem() : 시스템의 가용 메모리
os.cpus() : CPU의 정보를 담은 객체. CPU의 세부 정보를 반환합니다.
os.networkInterfaces() : 네트워크 인터페이스 정보를 담은 배열

 

 

2. Utility 모듈

util.format(format, [...]) : console.log() 메소드와 비슷한 기능이지만 console.log()는 화면에 출력하고 util.format은 문자열로 반환합니다. printf와 같은 형식으로 첫 아규먼트를 사용해서 포맷팅된 문자열을 반환합니다. 플레이스 홀더는 다음과 같은 아규먼트의 값으로 대체됩니다.
%s : 문자열
%d : 숫자(정수부터 소수까지 표현 가능)
%j : JSON
% : 퍼센트 기호('%'). 이 기호는 플레이스홀더를 사용하지 않습니다.
util.debug(string) : 프로그램의 실행을 멈추고 즉각적으로 string을 출력합니다.
util.log(string) : 타임스탬프 시간과 함께 string을 출력합니다.
util.isArray(object) : 주어진 object가 Array이면 true, 아니면 false를 리턴합니다.
util.isRegExp(object) : 주어진 object가 RegExp이면 true, 아니면 false를 리턴합니다.
util.isDate(object) : 주어진 object가 Date이면 true, 아니면 false를 리턴합니다.
util.isError(object) : 주어진 object가 Error이면 true, 아니면 false를 리턴합니다.

Example

var util = require('util');
var data = util.format('%d, %s, %j', 6, 'chapter', {cotent: 'module'});

console.log(data);
util.log('message');

 

3. File System 모듈

//option은 인코딩 방식으로 주로 UTF-8 이용
fs.readFile(filename, [options], callback) : filename의 파일을 [options]의 방식으로 읽은 후 callback으로 전달된 함수를 호출합니다. (비동기적) 
fs.readFileSync(filename, [options]) : filename의 파일을 [options]의 방식으로 읽은 후 문자열을 반환합니다.(동기적)
fs.writeFile(filename, data, [options], callback) : filename의 파일에 [options]의 방식으로 data 내용을 쓴 후 callback 함수를 호출합니다.(비동기적) 
fs.writeFileSync(filename, data, [options]) : filename의 파일에 [options]의 방식으로 data 내용을 씁니다.(동기적)

Example#0

//main.js
var fs = require('fs');
 

// 비동기적 읽기 ( 파일을 읽으면서 타작업 동시 수행 가능 및 파일 읽기 완료 시, 매개변수 callback으로 전달한 함수 호출( 마지막 인수는 수행 완료 시, 실행할 콜백 함수 ))
fs.readFile('text.txt', 'utf8', function(err, data) {
    console.log('비동기적 읽기 ' + data);
});

// 동기적 읽기 ( 파일을 읽으면서 타작업 불가 ) 
var text = fs.readFileSync('text.txt', 'utf8');
console.log('동기적 읽기 ' + text);

Example#1

// main.js
var fs = require('fs');
 
var data = 'fs.writeFile test';
 
fs.writeFile('text1.txt', data, 'utf8', function(err) {
    console.log('비동기적 파일 쓰기 완료');
});
 
 
fs.writeFileSync('text2.txt', data, 'utf8');
console.log('동기적 파일 쓰기 완료');

 

 

3. Event 모듈

//events 객체의 메소드
emitter.addListener(event, listener) : on() 메소드와 같습니다. 이벤트를 생성하는 메소드입니다.
emitter.on(event, listener) : addListener()과 동일합니다. 이벤트를 생성하는 메소드입니다.
emitter.once(event, listener) : 이벤트를 한 번만 연결한 후 제거합니다.
emitter.removeListener(event, listener) : 특정 이벤트의 특정 이벤트 핸들러를 제거합니다. 이 메소드를 이용해 리스너를 삭제하면 리스너 배열의 인덱스가 갱신되니 주의해야 합니다.
emitter.removeAllListeners([event]) : 모든 이벤트 핸들러를 제거합니다.
emitter.setMaxListeners(n) : n으로 한 이벤트에 최대허용 개수를 정해줍니다. node.js는 기본값으로 한 이벤트에 10개의 이벤트 핸들러를 작성할 수 있는데, 11개 이상을 사용하고 싶다면 n값을 넘겨주면 됩니다. n값으로 0을 넘겨 주면 연결 개수 제한이 사라집니다.
emitter.emit(eventName[, ...args]) : 이벤트를 발생시킵니다.

Example#0 생성

var EventEmitter = require('events');

var custom_event = new EventEmitter();

custom_event.on('call', function() {
	console.log('이벤트 콜');
});

custom_event.emit('call');

Example#1 이벤트 제거

var EventEmitter = require('events');

var custom_event = new EventEmitter();

custom_event.on('call', function() {
	console.log('이벤트 콜');
});

custom_event.removeAllListeners();

custom_event.emit('call'); //이벤트 리스너 제거했기때문에 실행 후에도 log 미존재

 

  • 가독성 높은, 간결한 코드를 위한 util.inherits()를 이용한 상속

1. 전통적인 상속 방법

function Foo() {
    // 코드
}

Foo.prototype = {
    bar: function() {
        console.log('Foo_bar 실행');
    }
};




function Bar() {
}

Bar.prototype = Object.create(Foo.prototype);

Bar.prototype.baz = function() {
    console.log('Bar_baz 실행');
};

Foo.prototype.bar();
Bar.prototype.bar();
Bar.prototype.baz();

2. util.inherits() 메소드를 이용한 상속

function Foo() {
    // 코드
}

Foo.prototype = {
    bar: function() {
        console.log('Foo_bar 실행');
    }
};

var util = require('util');

function Bar() {
}

util.inherits(Bar, Foo);

Bar.prototype.baz = function() {
	console.log('Bar_baz 실행');
};

Foo.prototype.bar();
Bar.prototype.bar();
Bar.prototype.baz();

 

 

  • npm 명령어

1. 원하는 모듈 찾기

npm search [모듈명]
npm info [모듈명]

2. 모듈 리스트 확인

npm list -g

 

  • package.json ( 확장 모듈에 대한 의존성 관리, 개발자 package 공유를 위한 파일 ) 상세 설명

 

 

{
	"name" : "test",
	"description" : "javascript's test programming.",
	"keywords" : ["util", "f", "server", "client", "browser"],
	"author" : "Goorm",
	"contributors" : [],
	"dependencies" : [],
	"repository" : {"type": "git", "url" : "git://gitbub.com/documentcloud/test.git" },
	"main" : "test.js",
	"version" : "1.1.6"
}
Key Value
name

프로젝트 이름으로, 가장 중요합니다. 중앙 저장소에 배포할 때 version과 함께 필수 항목입니다.
url로 사용되고, 설치할 때 디렉토리 이름이 되기 때문에 url이나 디렉터리에서 쓸 수 없는 이름을 사용하면 안 됩니다.
또한, 이름에 node나 js가 들어가면 안 됩니다.
name은 214자보다 짧아야 하며, 점(.)이나 밑줄(_)로 시작할 수 없습니다.
대문자를 포함해서는 안 되며, require() 함수의 인수로 사용되며 짧고 알기 쉬운 것으로 짓는 것이 좋습니다.

version 프로젝트 버전을 정의합니다. 3단계 버전을 사용하며, - 로 태그 이름을 적을 수 있습니다.
description

프로젝트 설명으로, 문자열로 기술합니다.
npm search로 검색된 리스트에 표시되기 때문에 사람들이 패키지를 찾아내고 이해하는 데 도움이 됩니다.

keywords

프로젝트를 검색할 때 참조되는 키워드입니다.
description과 마찬가지로 npm search로 검색된 리스트에 표시됩니다.

homepage

프로젝트 홈페이지 주소입니다.
url 항목과는 다르며, url을 설정하면 예상치 못한 움직임을 하게 되므로 주의합니다.

author 프로젝트 작성자 정보로, 한 사람만을 지정합니다. JSON 형식으로 name, email, url 옵션을 포함합니다.
contributors 프로젝트에 참여한 공헌자 정보로, 여러 사람을 배열로 지정할 수 있습니다.
repository

프로젝트의 소스 코드를 저장한 저장소의 정보입니다.

소스 코드에 참여하고자 하는 사람들에게 도움이 될 수 있습니다. 프로젝트의 홈페이지 url을 명시해서는 안 됩니다.

scripts 프로젝트에서 자주 실행해야 하는 명령어를 scripts로 작성해두면 npm 명령어로 실행 가능합니다.
config 소스 코드에서 config 필드에 있는 값을 환경 변수처럼 사용할 수 있습니다. -> 중요 환경변수 추출 시 이용 가능
private 이 값을 true로 작성하면 중앙 저장소로 저장하지 않습니다. 
dependencies

프로젝트 의존성 관리를 위한 부분입니다. 이 프로젝트가 어떤 확장 모듈을 요구하는지 정리할 수 있습니다.

일반적으로 package.json에서 가장 많은 정보가 입력되는 곳입니다.

애플리케이션을 설치할 때 이 내용을 참조하여 필요한 확장 모듈을 자동으로 설치합니다.

따라서 개발한 애플리케이션이 특정한 확장 모듈을 사용한다면 여기에 꼭 명시를 해주어야 합니다.

또한, npm install 명령은 여기에 포함된 모든 확장 모듈들을 설치하게 되어 있습니다. -> 확장 모듈 파악

devDependencies 개발할 때만 의존하는 확장 모듈을 관리합니다.
engine 실행 가능한 노드 버전의 범위를 결정합니다.

 

 

#1. Develop

  • 개발을 쉽게~! Express 확장 모듈 

Express 모듈 : http 모듈을 이용하여 웹 서버를 구축, 데이터를 표시 방식 추상화하여 개발을 쉽게 도와주는 모듈

express-generator 모듈 : 웹 서버를 구동하기 위해 필수 파일 및 폴더 구조 자동생성 모듈

 

+Express기반 프로젝트 초기 세팅 명령어

npm install express -g
npm install express-generator -g
express [프로젝트 디렉터리명]
cd [프로젝트 디렉터리명] && npm install // Express 기본 세팅이 이용하는 의존성 모듈 설치
cd [프로젝트 디렉터리명] && npm start

 

 

 

5일 CLEAR 또전했는데, 약속은 왜 이렇게 잡아놓은거죠ㅎㅗ,,앗 오타^~^ 3/13

'ETC > develop' 카테고리의 다른 글

Flutter Application Develop just For me:D#1  (0) 2023.05.11
node.js & Express Develop#3  (0) 2021.03.16
node.js & Express Develop#1  (0) 2021.03.12
node.js & Express Develop#0  (0) 2021.03.11