본문 바로가기
node.js

주요 객체 정리

by 루에 2019. 2. 14.
반응형

process

애플리케이션 프로세스 실행 정보


env : 애플리케이션 실행 환경(실행 폴더, 소유자 정보 등등)

version : node.js 버젼

arch, platform : cpu와 플랫폼 정보

argv : 실행 명령 파라미터(eg. node xxx.js 3 5 -> process.argv[0] = node, [1] = xxx.js, [2] = 3, [3] = 5)


이벤트


exit : 애플리케이션 종료

beforeExit : 종료 되기 전에 발생

uncaughtException : 예외 처리되지 않은 예외 처리


함수


exit : 애플리케이션 종료

nextTick : 이벤트 루프 내 동작을 모두 실행 후 콜백 실행


타이머

Timeout

일정시간 뒤 호출

setTimeout(callback, delay, arg, ...) - arg : 콜백함수에 들어가는 파라미터들

clearTimeout()


e.g.) var t = setTimeout(sayHello, 3 * 1000, arg1, arg2,arg3);

clearTimeout(t);


반복

setInterval(callback, delay, arg, ...) - 형태는 setTImeout과 동일


콘솔

커스텀 콘솔

콘솔 타입 로딩 : var Console = require('console').Console;

콘솔 객체 생성 : new Console(stdout[, stderr]);

파라미터 : 출력 스트림

stdout : 표준 출력 스트림, info, log

stderr : 에러 출력, warn, error


파일로 로그 남기는 커스텀 콘솔

var output : fs.createWriteStream('./stdout.log');

var outputErr : fs.createWriteStream('./stderr.log');

var logger = new Console(output, outputErr);


실행 시간 측정

시작 시점 설정 : console.time(TIMER_NAME)

종료시점, 걸린 시간 계산해서 출력 : console.timeEnd(TIMER_NAME)


유틸리티

var util = require('util');

주요기능

문자열 포맷

상속

문자열 포맷

util.format(format[,...])

format : %s, %d, %j(json)

e.g. var str = util.format(%d + %d = %d, 1,2,(1+2)); - C 스타일

상속

util.inherits(constructor, superConstructor);

e.g.

function parent(){}, function child(){}

parent.prototype.Show = function(){console.log('show');}

util.inherits(child, parent); - 상속하면 자식이 부모클래스의 함수 사용 가능


=> var child = new child();    child.show(); => 상속되어 사용 가능


이벤트

EventEmitter


node.js 애플리케이션의 이벤트들

이벤트 예)

클라이언트의 접속 요청

소켓에 데이터 도착

파일 오픈/읽기 완료


이벤트 처리

비동기 처리

리스너 함수


이벤트 리스너 함수 등록

emitter.addListener(event, listener)

emitter.on(event, listener) - event : 문자열, listener : 리스너 함수(많이 쓰임)

emitter.once(event, listener) - 이벤트 발생 시 단 한 번만 발생


e.g) process.on('exit', function(){

console.log('exit event');

});


emitter.removeListener(event, listener)

    .removeAllListeners([event])


이벤트 발생시키기

emitter.emit(event[,arg1][,arg2][,...]) - event : 이벤트 이름, arg : 리스너 함수 파라미터


e.g.)

var myEvent = new event.EventEmitter();

myEvent.on('test', function(){

console.log('my event');

});

myEvent.emit('test');


상속하여 내가 만든 객체를 이벤트 객체로 사용


var Person = function(){};

//상속

var util = require('util');

var EventEmitter = require('events').EventEmitter;

util.inherits(Person, EventEmitter);


//객체

var p = new Person();

p.on('test',function -);


//발생

p.emit('test');


경로다루기

path

var pathUtil = require('path');

경로 정규화, 경로 생성, 디렉토리파일 이름 추출, 파일 확장자 추출

전역객체 : __filename, __dirname

같은 폴더 내 이미지 경로 : var path = __dirname + 'image 파일 이름';

경로다듬기 : path.normalize() e.g.) path.normalize('/user/tmp/../local///bin/); => /user/local/bin/

경로 구성 요소 얻기

path.basename() : 파일 이름, 경로 중 마지막 요소

path.extname(path) : 확장자 이름

경로 구성 객체

var info = path.parse('풀패스');

경로 만들기

path.sep(separator), path.join() - 붙이기 path.join(/a + b + c) => /a/b/c


파일시스템

fs

var fs = require('fs');

주요기능

파일 생성/읽기/쓰기/삭제

파일 접근성/속성

디렉토리 생성/읽기/삭제

파일스트림


특징

비동기, 동기 방식 함수 모두 제공

비도기식 : callback, 논-블럭방식

동기식 : 이름규칙 : + Sync, 블록방식(성능상 주의), 반환값 이용


파일다루기

FileDescription, 파일 경로

fs.read(fd, buffer, offset,....) - fileDesctiption

fs.readSync

fs.readFIle(filename[,options], callback) - 파일 경로

fs.readFileSync


var fd = fs.openSync(path, flags[, mode])


flag : r,w,a(읽기,쓰기,추가)


fs.close, fs.closeSync


파일 존재 확인

fs.access(Sync) - 파일 없으면 에러

fs.stat(Sync) - 상태 확인

fs.stats.isFile(), stats.isDirectory(), stats.size()

fs.stat(path, function(err, stats){

if(stats.isFile()){

stats.size...

.

.

})});


fs.writeFile(Sync)


기존 파일에 내용 추가

fs.appendFIle(Sync)

파일 없을 경우 새 파일 생성


파일 삭제

fs.unlink(path, callback), fs.unlinkSync 파일 없으면 에러


디렉토리 생성

fs.mkdir(path[,mode], callback), fs.mkdirSync - 디렉토리 존재하면 실패


디렉토리 삭제

fs.rmdir(path, callback), fs.rmdirSync - 디렉토리 비어있지 않으면 실패


디렉토리 내 파일 목록

fs.readdir(path, callback), ...Sync


스트림 만들기

fs.createReadStream, WriteStream(path[,options])


버퍼

파일에서 버퍼읽기

var fileBuffer = fs.readFileSync('image.jpg');

네트워크에서 얻기

socket.on('data', function(err, buffer){

}

버퍼만들기

new Buffer(size);

new Buffer(array);


버퍼 변환

buffer.toString([encoding][,start][,end]);


e.g.)

var but = new Buffer('hello world');

but.toString('utf-8);

but.toString('base64'); // seifnsiefndkds=

var str = 'senfisenfi';

str.length, Buffer.byteLength(str)


스트림

데이터 전송 흐름

콘솔 입력/출력, 파일 읽기/쓰기, 서버/클라이언트의 데이터 전송


Readable Stream

읽기 스트림 Readable


모드

flowing mode

데이터를 자동으로 읽는 모드

전달 데이터를 다루지 않으면 데이터 유실


paused mode

데이터가 도착하면 대기

read() 함수로 데이터 읽기


함수

읽기

readable.read(size)

readable.setEncoding(encoding)

.pause()

.resume()

쓰기

Writable Stream

writable.setDefaultEncoding()


URL 다루기

URL 구성요소

프로토콜(protocol)

호스트(Host)

포트번호(Post)

경로(Path)

쿼리(Query)

프래그먼트(Fragment)


http://www.google.com/search?q=iphone&format=json


URL모듈 및 파싱

var url = require('url');

var parse = url.parse(주소);


쿼리 문자열 파싱

url.parse('http://...., true);


URL만들기

var urlObj = {

protocol : 'http',

host : 'google.com',

pathname : 'aaa/vvv',

search : 'time=9pm&day=monday'

}


URL인코딩

urlencode 사용


쿼리 문자열 만들기(한글도 인코딩 해줌)

query string.stringify(queryObj);


클러스터(Cluster)

여러 시스템을 하나로 묶어서 사용하는 기술

-멀티 프로세스

-멀티 코어


Node.js클러스터

클러스터 사용시 포트 공유 - 서버 작성 편리

코어(프로세서)의 개수 만큼 사용


클러스터링 : 마스터, 워커 프로세스

마스터

메일 프로세스

워커 생성

워커

보조 프로세스


var cluster = require('cluster');

cluster.fork();


구분 : cluster.isMaster, cluster.isWorker


e.g.) if(cluster.isMaster){

cluster.fork();

}else{

// worker code

}


마스터 이벤트

fork : 워커 생성

online : 워커 생성 후 동작하는 이벤트

listening : 워커에 작성한 서버의 listen 이벤트

disconnect : 워커 연결 종료

exit : 워커 프로세스 종료


워커 이벤트

message : 메세지 이벤트

disconnect : 워커 연결 종료


워커 접근

cluster.worker


워커 식별자

worker.워커id


워커 종료

worker.kill


데이터 전달

마스터가 워커에게 데이터 전달 worker.send(data)

워커의 데이터 이벤트 worker.on('message', function()...)

워커가 마스터에게 데이터 전달 process.send(data)

마스터에서의 데이터 이벤트

var worker = cluster.fork();

worker.on('message', function(data){})


마스터와 워커 분리

별도의 파일로 분리

cluster.setupMaster(setting)

exec : 워커파일

args : 실행 파라미터


e.g.)

cluster.setupMaster({

exec : 'worker.js'

});


cluster.fork();

반응형

댓글