Node.js 모듈

1. 기본모듈

: Node.js 와 함께 설치

: 별도의 설치 과정 불필요

* 주요 기본 모듈

- 프로세스 환경

: os, process, cluster

- 파일과 경로, URL

: fs, path, URL, querystring, stream

- 네트워크 모듈

: http, https, net, dgram, dns

2. 전역 객체

: global 모듈에 속해 있는 것들 // global 생략가능

: 별도의 모듈 로딩 없이 사용

* 주요 전역 객체

: process, console, Buffer (클래스), require, _filename, _dirname, module exports, Timeout 함수

* 전역객체 : process

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

- env : 애플리케이션 실행 환경

- version : Node.js 버전

- arch, platform : CPU와 플랫폼 정보

- argv : 실행 명령 파라미터 

: 이벤트

- exit : 앱 종료 이벤트

- beforeExit : 종료전 발생 이벤트

- uncaughtException : 예외처리 되지 않는 예외 이벤트

: 함수

- exit : 앱 종료

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

3. 타이머 함수

: 지연동작 : setTimeout

: 반복동작 : setInterval

: 일정 시간 뒤 호출

: setTimeout(callback, delay, arg...)

: clearTimeout()

: 파라미터

: callback : 함수형태

: delay, arg

: 반복

: setInterval(callback, delay, arg)

4. 콘솔

* 콘솔

: 로그 남기기

: 실행 시간 측정

* 수준별 로그 남기기

: console.log, console.info, console.warn, console.error

* 객체형 출력

> console.log('obj:' + obj) // [object Object]

> console.log('obj:', obj) // {name : 'IU', job: 'Singer'} 

* 커스텀 콘솔

1. 콘솔 타입 로딩

2. 콘솔 객체 생성

3. 파라미터 : 출력 스트링

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

> 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)

5. 유틸리티

> var util = require('util')

: 문자열 포멧, 상속, is 함수(deprecated)

* 상속

: util.inherits(자식생성자, 부모 생성자)

6. 이벤트

: 이벤트 다루기 : EventEmitter

: 이벤트를 다루는 기능 제공

* Node.js 앱의 이벤트들

: 이벤트 예

: 클라이언트의 접속 요청

: 소켓에 데이터 도착

: 파일 오픈/읽기 완료

: 이벤트 처리

: 비동기 처리

: 리스너 함수

* 이벤트를 다룰 수 있는 타입 : Readline 모듈

* 타입에 정의된 이벤트 다루기

: 이벤트 리스너 함수 등록

> emitter.addListener(event, listener)

> emitter.on(event,listener)

> emitter.once(event,listener)

: 이벤트 리스너 함수 삭제

>emitter.removeListener

>emitter.removeAllListener

: 최대 이벤트 핸들러 개수(기본10개)

> 조정가능

* 이벤트 발생

: 이벤트 발생시키기

: emitter.emit(이벤트이름, arg...) // 호출결과 : true(이벤트 처리),false(이벤트처리안됨)

* 커스텀 이벤트

> var customEvent = new event.EventEmitter() // 이벤트 이미터에 on을 통해 추가해서 정의해두고, emit을 통해 이벤트를 활성화 시켜야함.

* 커스텀 이벤트, 상속

> var Person = function(){}

> var util = require('util')

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

> util.inherits(Person, EventEmitter)

* 꿀팁!

: 에러처리

: 이벤트 리스너의 콜백함수는 error, result로 구성되기 때문에, error코드에 대한 예외처리를 먼저 작성하고 result를 작성하는 구성이 적당하다

모듈2

1. 경로다루기

* path 모듈 : 파일경로 다루기

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

* 경로 정보

: 현재 실행파일 경로, 폴더 경로

: 전역객체 - _filename, _dirname

* 경로 다듬기

>path.normalize()

* 경로 구성 요소

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

: path.dirname() : 파일이 포함된 폴더 경로

: path.extname() : 확장자

: path.parse : 구성요소 객체를 얻을 수 있음

* 경로 만들기

: pathUtil.sep, pathUtil.join(), pathUtil.format()

2. 파일시스템 다루기

: 파일 시스템 모듈 : fs

* 주요기능

: 파일 생성/읽기/쓰기/삭제, 파일 접근성/속성, 디렉토리 생성/읽기/삭제, 파일 스트림

* 특징

: 비동기와 동기 방식 함수 모두 제공

* 비동기식/동기식 API

: 에러 처리 방법

: 동기식 - try-catch 사용

: 비동기식 - 콜백함수의 에러 파라미터를 사용

* 파일 다루기

: 파일 디스크립터

: fd를 사용

: fs.openSync를 통해 얻어온다.

: r,w,a플래그를 통해 속성정할 수 있음

: fs.close를 통해 닫아주어야 함.

: 파일 경로

: filename사용

* 파일 읽기

> fs.read(), fs.readFile(), fs.readFileSync()

* 파일 종류

: 문자열 읽기 - 인코딩해야함, 바이너리 읽기 - buffer

* 인코딩 설정안하면 buffer

* 파일 상태 확인

> fs.access(Sync) : 파일 접근 상태 얻기

> fs.stat(Sync)    :    파일 상태 얻기

: 파일 상태 확인 후 읽기 하는 방법을 쓰자

* 파일에 저장

> fs.write, fs.writeFile.... : 파일 생성해서 쓰기

> fs.appendFile : 파일에 추가, 없다면 생성

> fs.unlink, fs.unlinkSync : 파일 삭제, 파일이 없으면 에러

* 디렉토리 생성/삭제

> fs.mkdir // fs.rmdir

* 파일스트림

> fs.createReadStream

3. 버퍼

: 바이너리 데이터를 다루는 모듈이다.

: global 이므로 별도의 로딩 불필요

: var fileBuffer = fs.readFileSync('image.jpg'); // 파일에서 읽기

: socket.on(,function(data){data가 버퍼})

: 생성후 크기 변경 불가

: 버퍼를 통해 문자열을 다양한 형태로 인코딩할 수 있다.

: 버퍼에 쓸때에는 버퍼의 크기까지만 써진다.


모듈3

1. 스트림

: 데이터의 전송흐름

: 콘솔 입력/출력

: 파일 읽기/쓰기

: 서버/클라이언트 - 데이터 전송

: 스트림을 다루기 위한 추상 인터페이스

: 다양한 스트림을 같은 인터페이스로 다룰 수 있다.

: 읽기,쓰기,변환 스트림이 존재함.

* Readable Stream

: 읽기 스트림

: flowing mode

: 데이터를 자동으로 읽는 모드, 데이터 유실의 가능성 존재

: paused mode

: 데이터가 도착하면 대기, read()함수로 읽기

> readable.read / setEncoding / pause/ resume/ pipe/ unpipe

: 이벤트

: readable - 읽기가능, data - 읽을수 있는 데이터 도착, end, close, error

: flowing mode

: data 이벤트 구현, pipe 연결, resume 호출

* Writable Stream

: 데이터 출력

: http 클라이언트 요청을 보낼 때, http서버의 응답을 보낼때, 파일 쓰기 스트림, tcp소켓

: 이벤트

: drain - 모두 보냄, error, finish, pipe, unpipe

* 표준 입출력 스트림

: process.stdin : 콘솔 입력

: process.stdout : 콘솔 출력

* 스트림 연결

: 스트림 연결과 해체

: 연결 이벤트

: 스트림 연결


2. URL 다루기

* 네트워킹

: 네트워킹의 시작

: 서버의 주소, 요청 위치, 파일의 위치

* URL

: 프로토콜, 호스트, 포트번호, 경로, 쿼리, 프래그먼트 등등...

: URL 모듈

* URL 분석하기

: url.parse()

* URL과 쿼리 문자열

* URL 인코딩

: urlencode

3. 쿼리 스트링

: URL 외에도 사용, HTTP 메시지 바디로 정보를 전달할 떄도 사용

: require('querystring')

: 쿼리스트링의 배열    

: group = d & member = 5 & member = 5 ...

: 객체를 쿼리 스트링으로 만들 수 있음.

4. 클러스터

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

: 멀티 프로세스, 멀티 코어

: 노드 어플리케이션 : 1개의 싱글 쓰레드

: 멅티코어의 장점을 살리기 위해서는 클러스터를 사용해야 한다.

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

: 코어의 개수만큼 사용

* 클러스터

: 마스터, 워크 프로세스로 구성

: 마스터

: 메인 프로세스, 워커 생성

: 워커

: 보조 프로세스, 마스터가 생성

* 클러스터 모듈

: require('cluster')

: cluster.fork() // 클러스터 생성

: cluster.isMaster/isWorker 로 클러스터 확인

* 클러스터 이벤트

: 마스터의 이벤트

: fork, online, listening, disconnect, exit

: 워커의 이벤트

: fomessage, disconnect

* 마스터와 워커 분리

: 별도의 파일로 분리하기

> cluster.setupMaster

: exec: 워커파일




'프로그래밍 > Nodejs' 카테고리의 다른 글

HTTP 서버  (0) 2017.04.16
http 통신  (0) 2017.04.16
흐름제어 - 콜백, Async모듈, Promise  (0) 2017.04.15
NPM을 이용한 모듈관리  (0) 2017.04.15
Node.js 개요  (0) 2017.04.14

+ Recent posts