학습 목표
1. Node.js의 모듈 시스템을 이해할 수 있습니다.2. 전역 객체를 알고 사용할 수 있습니다.
3. 콘솔, 유틸리티 모듈을 사용할 수 있습니다.
4. 이벤트가 동작하는 원리를 이해할 수 있습니다.
1. 기본 모듈
◎ 기본 모듈- Node.js와 함께 설치
- 별도의 설치 과정 불필요
◎ 홈페이지 > 도큐 먼트
◎ 주요 기본 모듈
◎ 프로세스 환경
- os, process, cluster
◎ 파일과 경로, URL
- fs, path, URL, querystring, stream
◎ 네트워크 모듈
- http, https, net, dgram, dns
2. 전역 객체
◎ 전역 객체(global)
- 별도의 모듈 로딩없이 사용
- global 모듈
global.console.log() - global 생략 가능
console.log()
◎ 주요 전역 객체
- process
- console
- Buffer(클래스)
- require
- __filename, __dirname
- module
- exports
- Timeout 함수
◎ 전역객체 : process
▷ 애플리케이션 프로세스 실행 정보
- env : 애플리케이션 실행 환경
- version : Node.js 버전
- arch, platform : CPU 와 플랫폼 정보
- argv : 실행 명령 파라미터
▷ 이벤트
- exit : 애플리케이션 종료 이벤트
- beforeExit : 종료 되기 전에 발생하는 이벤트
- uncaughtException : 예외 처리되지 않은 이벤트
▷ 함수
- exit : 애플리케이션 종료
- nextTick : 이벤트 루프 내 동작을 모두 실행 후 콜백 실행
▷ 프로세스 실행 정보
- process.env : {TERM_PROGRAM:'iTerm.app',
SHELL:'/bin/bash',
TERM:'xterm-256color',
PWD:'/Users/wannabewize/Projects/TAcademy/Node-
Samples/BasicModules',
ITERM_PROFILE:'Default',
HOME:'/Users/wannabewize',
LOGNAME:'wannabewize',
LC_CTYPE:'UTF-8'} - process.arch:x64
- process.platform: darwin
◎ 프로세스 실행 환경
▷ 실행파라미터 얻기
- process.arv
▷ 실행 환경
- $ node processAdd.js 3 5
▷ 결과
- // 0, 1은 node, processAdd.js
var i = process.argv[2];
var j = process.argv[3];
var sum = parseInt(i) + parseInt(j);
console.log(sum); // 8
3. 타이머
◎ 타이머 함수
- 지연 동작 : settTimeout
- 반복 동작 : setInterval
◎ Timeout
▷ 일정 시간 뒤 호출
- setTimeout(callback, delay, arg, ...)
- clearTimeout()
▷ 파라미터
- callback : 함수 형태
- delay : 초(milli second)
- arg : callback 함수의 파라미터
▷ 예제 코드
function.sayHello() { console.log('Hello World'); } // 3초뒤 실행 setTimeout(sayHello, 3*1000);
▷ 타이머 취소
var t = setTimeout(sayHello, 10); clearTimeout(t);
▷ 반복
setInterval(callback, delay, arg, ...) clearInterval()
▷ 예제 코드
function sayGoodbye(who) { console.log('Good bye', who); } setInterval(sayGoodbye, 1*1000, 'Friend');
4. 콘솔
- 로그 남기기
- 실행 시간 측정
◎ 수준별 로그 남기기
- console.info()
- console.log()
- console.warn()
- console.error
◎ 로그 남기기
▷ 로그 남기기 예
- console.log('log', 'log message');
- console.info('info', 'info message');
- console.warn('warn', 'warn message');
- console.error('error', 'error message');
▷ 값 출력
var intValue = 3; console.log('int Value ' + 3);
▷ 객체형 출력
var obj = { name : 'IU', job : 'Singer' } console.log('obj: ' + obj); console.log('obj: ', obj);
◎ 커스텀 콘솔
▷ 콘솔 타입 로딩
▷ 콘솔 타입 로딩
- var Console = require('console').Console;
▷ 콘솔 객체 생성
- new Console(stdout[, stderr])
▷ 파라미터 : 출력 스트림
- stdout : 표준 출력 스트림, infor, log
- stderr : 에러 출력, warn, error
▷ 파일로 로그 남기는 커스텀 콘솔
- var output = fs.createWriteStream('./stdout.log');
- var errorOutput = fs.createWriteStream('./stderr.log');
- var logger = new Console(output, errorOutput);
◎ 실행 시간 측정
▷ 콘솔 객체로 실행 시간 측정하기
▷ 시작 시점 설정하기
- console.time(TIMER_NAME)
▷ 종료 시점, 걸린 시간 계산해서 출력
- console.timeEnd(TIMER_NAME)
▷ 예제 코드
◎ 모듈 로딩
console.time('SUM'); var sum = 0; for(var i = 1; i < 100000 ; i++) { sum += i; } console.log('sum : ', sum); // 시간 측정 시작 console.timeEnd('SUM');
5. 유틸리티
◎ 유틸리티 모듈◎ 모듈 로딩
- var util = require('util');
◎ 주요 기능
- 문자열 포맷
- 상속
- is 함수(deprecated)
◎ 유틸리티 - 포맷
▷ 문자열 포맷
- util.format(format[, ...])
▷ placeholder(형식문자열)
- %s : String
- %d : Number
- %j : JSON
▷ 예제 코드
var str1 = util.format('%d + %d = %d', 1, 2, (1+2));
=> 1 + 2 = 3
var str2 = util.format('%s %s', 'Hello', 'World');
=> Hello World
◎ 유틸리티 - 상속
▷ 상속 : inherits
- util.inherits(constructor, superConstructor)
▷ 사용 방법
- util.inherits(ChildClassFunction, ParentClassFunction);
▷ 예제 코드
finction Parent() { } function Child() { } util.inherits(Child, Parent);
▷ 예제 코드
finction Parent() { } Parent.prototype.sayHello = function() { console.log('Hello. from Parent Class'); } function Child() { } util.inherits(Child, Parent); var child = new Child(); child.sayHello();
6. 이벤트
◎ 이벤트 모듈
- 이벤트 다루기 : EventEmitter
- 이벤트를 다루는 기능 제공
◎ Node.js 애플리케이션의 이벤트들
▷ 이벤트의 예
- 클라이언트의 접속 요청
- 소켓에 데이터 도착
- 파일 오픈/읽기 완료
▷ 이벤트 처리
- 비동기 처리
- 리스너 함수
◎ 이벤트를 다룰 수 있는 타입 : Readline 모듈
▷ Class : Interface
- rl.close()
- rl.pause()
▷ Events
- Event : 'close'
- Event : 'line'
- Event : 'pause'
- Event : 'resume'
- Event : 'SIGCONT'
- Event : 'SIGINT'
◎ 타입에 정의된 이벤트 다루기
▷ 이벤트 리스너 함수 등록
▷ 이벤트 리스너 함수 등록
- emitter.addListener(event, listener)
- emitter.on(event, listener)
- emitter.once(event, listener)
◎ 이벤트 리스너 등록
▷ 이벤트 리스너 등록 예
process.on('exit', function() { console.log('occur exit event'); }); // 한번만 동작 process.once('exit', function() { console.log('occur exit event'); });
◎ 이벤트 리스너 함수 삭제
- emitter.removeListener(event, listener)
- emitter.removeAllListeners([event])
◎ 최대 이벤트 핸들러 개수(기본 10개)
- emitter.setMaxListener(n)
- emitter.getMaxListener()
◎ 실습
▷ 애플리케이션 종료 이벤트
- process.on('exit', function(code))
▷ 예외처리 되지 않는 상황 - 앱 죽는 상황!
- process.on('uncaughtException', uncaughtExceptionListener);
◎ 이벤트 발생
▷ 이벤트 발생 시키기(emit)
- emitter.emit(event[, arg1][, arg2][, ...])
- event : 이벤트 이름
- arg : 리스너 함수의 파라미터
- emit 함수 호출 결과 : true(이벤트 처리), false(이벤트 처리 안됨)
▷ 예
process.emit('exit'); process.emit('exit', 0); // 리스너 함수의 파라미터로 0 전달
◎ 커스텀 이벤트
▷EventEmitter 객체에 커스텀 이벤트
▷EventEmitter 객체에 커스텀 이벤트
var customEvent = new event.EventEmitter(); customEvent.on('tick' function() { console.log('occur custom event'); }); customEvent.emit('tick');
customEvent가 EventEmitter 객체가 아니라면 on 이라는 함수가 정의되지
않았기 때문에 에러가 나게 되면서 프로그램이 crash되게 됨.
◎ 커스텀 이벤트, 상속
▷ util 모듈을 이용해서 EventEmitter 상속
않았기 때문에 에러가 나게 되면서 프로그램이 crash되게 됨.
◎ 커스텀 이벤트, 상속
▷ util 모듈을 이용해서 EventEmitter 상속
var Person = fuction(); // 상속 var util = require('util'); var EventEmitter = require('events').EventEmitter; util.inherits(Persion, EventEmitter); // 객체 var p = new Persion(); p.on('howAreYou', function() { console.log('Fine, Thank you and you?') }); // 이벤트 발생 p.emit('howAreYou');
여기서 잠깐!
※ 리스너 함수, 에러
◎ 모든 리스너 함수의 첫 번재 파라미터 : 에러
▷ 에러 처리
◎ 모든 리스너 함수의 첫 번재 파라미터 : 에러
▷ 에러 처리
emitter.on('event', function(error, result) { if(error) { // 에러 처리 } else { // 정상 처리 } }
학습정리
◎ 지금까지 'Node.JS의 기본모듈!'에 대해 살펴보았습니다.
기본 모듈
별도의 설치 과정 없이 사용할 수 있는 모듈로 Node.js와 함께 설치된다.
전역객체
global 모듈에 속하는 객체와 함수로 모듈 로딩 과정 없이 사용할 수 있다. console,
timeout, __dirname, process 등이 있다.
타이머
타이머 함수인 setTimeout()이나 setInterval() 함수를 이용해서 일정 시간 뒤에
동작하거나, 주기적으로 동작하는 기능을 작성할 수 있다.
콘솔
콘솔(Console)을 이용해서 콘솔 화면에 내용을 출력할 뿐만 아니라 실행 시간을
측정할 수 있다.
유틸리티
유틸리티 모듈을 이용해서 형식 문자열을 작성할 수 있었다. 그리고 클래스 간에
상속 관계를 만들 수 있다.
이벤트
이벤트를 다루는 EventEmitter의 특징과 이벤트를 다루는 방법을 알아봤다. 그리고
유틸리티 모듈의 상속을 통해서 커스텀으로 작성한 타입에서도 이벤트를 다룰 수
있다.
기본 모듈
별도의 설치 과정 없이 사용할 수 있는 모듈로 Node.js와 함께 설치된다.
전역객체
global 모듈에 속하는 객체와 함수로 모듈 로딩 과정 없이 사용할 수 있다. console,
timeout, __dirname, process 등이 있다.
타이머
타이머 함수인 setTimeout()이나 setInterval() 함수를 이용해서 일정 시간 뒤에
동작하거나, 주기적으로 동작하는 기능을 작성할 수 있다.
콘솔
콘솔(Console)을 이용해서 콘솔 화면에 내용을 출력할 뿐만 아니라 실행 시간을
측정할 수 있다.
유틸리티
유틸리티 모듈을 이용해서 형식 문자열을 작성할 수 있었다. 그리고 클래스 간에
상속 관계를 만들 수 있다.
이벤트
이벤트를 다루는 EventEmitter의 특징과 이벤트를 다루는 방법을 알아봤다. 그리고
유틸리티 모듈의 상속을 통해서 커스텀으로 작성한 타입에서도 이벤트를 다룰 수
있다.
댓글 없음:
댓글 쓰기