기본 내장 모듈

절대! 절대! 절대 외울 생각은 하지 마라!

중요한 건 "어떻게 모듈의 기능을 인터넷에서 찾을 것인가?"

[목차]


1. 기본 내장 모듈 사용하기

기본 내장 모듈을 사용하기 위해서는 2단계의 과정이 필요하다.

  1. require() 함수로 모듈을 추출한 후 변수에 담는다.
  2. 추출한 변수 뒤에 메서드를 붙여서 사용한다.

[os 모듈 사용하는 코드]

// 모듈 추출
var os = require('os');

// 모듈 사용
console.log(os.hostname());    // 운영체제의 호스트 이름 리턴
console.log(os.type());        // 운영체제의 이름 리턴
console.log(os.platform());    // 운영체제의 플랫폼을 리턴
console.log(os.arch());        // 운영체제의 아키텍처를 리턴

2. url 모듈

url 모듈에는 url을 분석하고 파싱하는 유틸리티가 포함되어 있다.

// 모듈 추출
var url = require('url');

[주요 메서드]

메서드 이름 설명
url.parse(urlStr[, parseQueryString=false][, slashesDenoteHost=false]) URL 문자열을 URL 객체로 변환해 리턴한다.
url.format(urlObj) URL 객체를 URL 문자열로 변환해 리턴한다.
url.resolve(from, to) 매개변수를 조합해 완전한 URL 문자열을 생성해 리턴한다.

[urlModule.js 파일 코드]

// 모듈 추출
var url = require('url');

// 모듈 사용
// 1. parse 메서드 - 가장 자주 사용
var parsedObject = url.parse('http://www.hanbit.co.kr/store/books/look.php?p_code=B4250257160');
console.log(parsedObject);

// 2. format 메서드
var formatedObject = url.format(parsedObject);
console.log("\n"+formatedObject);

[urlModule.js 실행]

$ node main.js
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'www.hanbit.co.kr',
  port: null,
  hostname: 'www.hanbit.co.kr',
  hash: null,
  search: '?p_code=B4250257160',
  query: 'p_code=B4250257160',
  pathname: '/store/books/look.php',
  path: '/store/books/look.php?p_code=B4250257160',
  href: 'http://www.hanbit.co.kr/store/books/look.php?p_code=B4250257160' }

http://www.hanbit.co.kr/store/books/look.php?p_code=B4250257160

3. Query String 모듈

이 모듈은 URL 객체의 쿼리 문자열을 다루는 유틸리티를 제공한다.

// 모듈 추출
var querystring = require('querystring');

[주요 메서드]

메서드 이름 설명
querystring.stringify(obj[, sep='&'][, eq='='][, options]) 쿼리 객체를 쿼리 문자열로 변환해 리턴한다.
querystring.parse(str[, sep='&'][, eq='='][, options]) 쿼리 문자열을 쿼리 객체로 변환해 리턴한다.

[Query String 파일 코드]

// 모듈 추출
var url = require('url');
var querystring = require('querystring');

// 모듈 사용
var parsedObject = url.parse('http://www.hanbit.co.kr/store/books/look.php?p_code=B4250257160');
// URL 객체로 변환된 내용중 query의 키 값을 가진 부분을 분해해 리턴한다.
console.log(querystring.parse(parsedObject.query));

[실행]

$ node main.js
{ p_code: 'B4250257160' }

Query String 모듈은 실제로 많이 사용되지 않는다. url 모듈에 기능이 통합되어 있기 때문이다. url.parse() 메서드의 두번째 매개변수를 사용하면 위와 같은 효과를 얻을 수 있다.

[url.parse() 두번째 매개변수 사용 코드]

// 모듈 추출
var url = require('url');

// 모듈 사용
// url.parse(urlStr[, parseQueryString=false][, slashesDenoteHost=false]);
var parsedObject = url.parse('http://www.hanbit.co.kr/store/books/look.php?p_code=B4250257160', true);
console.log(parsedObject);

[실행]

$ node main.js
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'www.hanbit.co.kr',
  port: null,
  hostname: 'www.hanbit.co.kr',
  hash: null,
  search: '?p_code=B4250257160',
  query: { p_code: 'B4250257160' },    // <--------- 위의 결과와 동일하다!!
  pathname: '/store/books/look.php',
  path: '/store/books/look.php?p_code=B4250257160',
  href: 'http://www.hanbit.co.kr/store/books/look.php?p_code=B4250257160' }

4. util 모듈

이 모듈은 Node.js의 보조적인 기능을 모아둔 모듈이다. 간단히 동작하지만 자주 사용한다.

// 모듈 추출
var util = require('util');

[주요 메서드]

메서드 이름 설명
util.format(format[, ...]) 매개변수로 입력한 자열을 조합해 리턴한다. console.log() 메서드와 비슷하게 동작한다.

[util 모듈 코드]

// 모듈 추출
var util = require('util');

// 모듈 사용
var data = util.format('%d + %d = %d', 52, 273, 52 + 273);
console.log(data);

[실행]

$ node main.js
52 + 273 = 325

5. crypto 모듈

이 모듈은 해시 생성암호화를 수행하는 모듈이다.

해시(Hash)

  1. 키와 값을 갖는 자료형 : 대표적으로 JavaScript의 객체가 해시이다.
  2. 전자 지문 : 원래 문자열 값으로 되돌릴 수 없다.

암호 : 암호는 원래 문자열로 값을 되돌릴 수 있다.

// 모듈 추출
var crypto = require('crypto');

[코드1 - 해시 생성]

// 모듈 추출
var crypto = require('crypto');

// 해시 생성
// crypto.createHash(String 알고리즘);
var shasum = crypto.createHash('sha256');
shasum.update('crypto_hash');
var output = shasum.digest('hex');

// 출력
console.log('crypto_hash: ', output);

[실행1 - 해시 생성]

$ node main.js
crypto_hash:  820f329baab52f75e1e3844b61b7bfcaa4035d881c6f1fbd42dc29b024638c05

[코드2 - 암호화]

var crypto = require('crypto');

// 변수 선언
var key = '아무도 알지 못하는 나만의 비밀 키';
var input = 'PASSWORD';

// 암호화
// crypto.createCipher(알고리즘, 비밀번호) :: 알고리즘 부분은 미리 정해져 있는 듯하다.
var cipher = crypto.createCipher('aes192', key);
// .update(data, 인풋 인코딩, 아웃풋 인코딩);
cipher.update(input, 'utf8', 'base64');
var cipheredOutput = cipher.final('base64');

// 복호화
// crypto.createDecipher(알고리즘, 비밀번호)
var decipher = crypto.createDecipher('aes192', key);
decipher.update(cipheredOutput, 'base64', 'utf8');
// .final(아웃풋 인코딩)
var decipheredOutput = decipher.final('utf8');

// 출력
console.log('원래 문자열 : ' + input);
console.log('암호화 : ' + cipheredOutput);
console.log('복호화 : ' + decipheredOutput);

[실행2 - 암호화]

$ node main.js
원래 문자열 : PASSWORD
암호화 : JVFgMKBOz21IcJY7es33qQ==
복호화 : PASSWORD

6. File System 모듈

파일 처리와 관련된 모듈로써 다른 모듈과 함께 활용해 웹 서버를 구현한다.

// 모듈 추출
var fs = require('fs');

[주요 메서드 - 입출력 관련]

메서드 이름 설명
fs.readFile(file, encoding, callback) 파일을 비동기적으로 읽는다.
fs.readFileSync(file, encoding) 파일을 동기적으로 읽는다.
fs.writeFile(file, data, encoding, callback) 파일을 비동기적으로 쓴다.
fs.writeFileSync(file, data, encoding) 파일을 동기적으로 쓴다.

6.1 파일 읽기

- readFileSync() 메서드

[코드 0 - textfile.txt]

이것은 textfile.txt 파일입니다.

[코드 1 - readFileSync()]

var fs = require('fs');

var text = fs.readFileSync('textfile.txt', 'utf8');
console.log(text);

[실행 1 - readFileSync()]

$ node main.js
이것은 textfile.txt 파일입니다.

- readFile() 메서드

readFileSync() 메서드를 비동기적으로 구현한 메서드이다. readFile() 메서드를 만나는 순간 이벤트 리스너를 등록하고, 파일을 모두 읽게 만들어 이벤트 리스너를 실행한다.

[코드 2 - readFile()]

var fs = require('fs');

// 콜백 함수의 두번째 파라미터에 문자열 타입으로 읽은 데이터가 전달된다.
fs.readFile('textfile.txt','utf8', function (error, data) {
    console.log(data);
});

[실행 2 - readFile()]

$ node main.js
이것은 textfile.txt 파일입니다.

6.2 파일 쓰기

- writeFileSync() 메서드

[코드 1 - writeFileSync()]

var fs = require('fs');

var data = "Hello World...!";

// Hello World...! 내용이 들어간 TextFileOtherWriteSync.txt 파일을 생성한다.
fs.writeFileSync('TextFileOtherWriteSync.txt', data, 'utf8');
console.log("WRITE FILE SYNC COMPLETE");

- writeFile() 메서드

[코드 2 - writeFile()]

var fs = require('fs');

var data = "Hello World...!";

// Hello World...! 내용이 들어간 TextFileOtherWrite.txt 파일을 생성한다.
fs.writeFile('TextFileOtherWrite.txt', data, 'utf8', function (error){
    console.log("WRITE FILE COMPLETE");
});

6.3 예외 처리

반드시 기억하세요!!

파일 입출력은 오류가 발생하기 쉬운 프로세스이다. 개발자가 컨트롤 할 수 없는 부분에서 오류가 날 수 있기 때문이다.

[코드 1 - 동기 처리를 하는 메서드의 예외 처리]

var fs = require('fs');

// 동기식으로 파일 읽기
try {
    var data = fs.readFileSync('textfile.txt','utf8');
    console.log (data);
} catch (e) {
    console.log (e);
}

// 동기식으로 파일 쓰기
try {
    fs.writeFileSync ('textfile.txt', 'Hello World...!', 'utf8');
    console.log("FILE WRITE COMPLETE");
} catch (e) {
    console.log(e);
}

[코드 2 - 동기 처리를 하는 메서드의 예외 처리]

var fs = require('fs');

// 파일 읽기
fs.readFile('textfile.txt', 'utf8', function (error, data) {
    // 만약 예외가 발생하지 않았다면 매개변수 error에 어떤 값도 들어가지 않으므로 undefined가 된다.
    // Boolean(undefined)는 무조건 false를 리턴한다.
    if (error) {
        console.log(error);
    } else {
        console.log(data);
    }
});

// 파일 쓰기 - 조기리턴 방식 사용 (코드 라인을 줄이기 위해 사용)
fs.writeFile('textfile.txt', 'Hello World...!', 'utf8', function (error) {
    // 오류가 발생하면 곧바로 리턴한다.
    if (error) { return console.log(error); }
    // 원하는 처리 부분
    console.log("FILE WRITE COMPLETE");
});

results matching ""

    No results matching ""