기본 내장 모듈
절대! 절대! 절대 외울 생각은 하지 마라!
중요한 건 "어떻게 모듈의 기능을 인터넷에서 찾을 것인가?"
[목차]
- Node.js API 전체 문서 위치 : http://nodejs.org/dist/latest-v4.x/docs/api/
1. 기본 내장 모듈 사용하기
기본 내장 모듈을 사용하기 위해서는 2단계의 과정이 필요하다.
- require() 함수로 모듈을 추출한 후 변수에 담는다.
- 추출한 변수 뒤에 메서드를 붙여서 사용한다.
[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)
- 키와 값을 갖는 자료형 : 대표적으로 JavaScript의 객체가 해시이다.
- 전자 지문 : 원래 문자열 값으로 되돌릴 수 없다.
암호 : 암호는 원래 문자열로 값을 되돌릴 수 있다.
// 모듈 추출
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");
});