프로그래밍/Nodejs

[정리] 모던 웹을 위한 Node.js 프로그래밍 3/4장

seungdols 2018. 2. 8. 23:23

Node.js 스터디

3장 Node.js의 전역 객체

웹브라우저의 최상위 객체는 window객체이지만, node에는 window 객체가 존재 하지 않고, 전역 변수와 전역 함수를 갖는다.

단, global 객체가 존재하지만, __filename , __dirname 과 전역함수 require() 함수는 global 객체에 포함되지 않으므로 최상위 객체는 없다고 가정한다.

문자열 자료형의 전역 변수

console.log('filename', __filename);
console.log('dirname', __dirname);

전역 객체

객체 이름설명
console콘솔 화면과 관련된 기능을 담당하는 객체
exports모듈과 관련된 기능을 다루는 객체
process프로그램과 관련된 기능을 다루는 객체

Console 객체

log(); //출력 - info(), debug(), error();
time(); //시간 측정 시작
timeEnd(); //시간 측정 종료

console.time('time');

var output = 1;
for (var i = 1; i <= 10; i++) {
   output *=i;
}

console.log('Result : ', output);

console.timeEnd('time');

특수문자
%d -- 숫자
%s -- 문자열
%j -- JSON

console.log('output: %d', 822);

Q) 특수 문자 포맷과 인자 갯수가 다를경우에는 어떻게 출력이 될까?

Process 객체

프로그램과 관련 된 정보를 나타내는 객체로, Node.js 에만 존재하는 객체이다.

Process 객체의 속성
속성이름설명
argv실행 매개변수를 나타냅니다.
env컴퓨터 환경과 관련된 정보를 나타낸다.
versionNode.js 버전을 나타냅니다.
versionsNode.js와 종속된 프로그램 버전을 나타냅니다.
arch프로세서의 아키텍처를 나타냅니다.
platform플랫폼 정보를 나타냅니다.
console.log('- process.env', process.env);
console.log('- process.version', process.version);
console.log('- process.versions', process.versions);
console.log('- process.arch', process.arch);
console.log('- process.platform', process.platform);
console.log('- process.memoryUsage()', process.memoryUsage());
console.log('- process.uptime()', process.uptime());

Process 객체의 메서드
메서드 이름설명
exit([exitCode = 0])프로그램을 종료합니다.
memoryUsage()메모리 사용 정보 객체를 리턴합니다.
uptime()현재 프로그램이 실행된 시간을 리턴합니다.
process.argv.forEach(function (item, index){
   console.log(index + ' : ' + typeof (item) + ' : ', item);

   if(item == '--exit') {
       var exitTime = Number(process.argv[index + 1]);

       setTimeout(function () {
           process.exit();
      }, exitTime)
  }
});

exports 객체와 모듈

Node.js는 모듈을 사용해서 기능을 확장합니다.

모듈은 기능을 쉽게 사용하고자 메서드와 속성을 미리 정의해 모아 놓은 것입니다.

모듈을 생성하려면, 별도의 자바스크립트 파일을 생성해야 합니다. 모듈을 생성할 때는 exports 객체를 사용합니다.

exports.seungdols = function () {
 return 'seungdols company';
}
----
var seungdols_module = require('./seungdols.js');

console.log(seungdols_module.seungdols());

그리고 외부에서 해당 모듈을 사용할 경우, require로 해당 모듈을 로드해주어야 하고, 모듈이 저장된 경로를 입력해주어야 합니다. (아마 축약하는 부분이 존재할거라 생각됨.)


4장 기본 내장 모듈

os 모듈

var os = require('os');

console.log(os.hostname()); //운영체제 호스트 이름 리턴
console.log(os.type()); //운영체제 이름 리턴
console.log(os.platform()); //운영체제 플랫폼 정보 리턴
console.log(os.arch()); // 운영체제 아키텍처 정보 리턴
console.log(os.release()); // 운영체제 버전 정보 리턴
console.log(os.uptime()); //운영체제가 실행 된 시간 리턴
console.log(os.loadavg()); // 로드 에버리지 정보를 담은 배열 리턴
console.log(os.totalmem()); //총 사용중인 메모리 정보 리턴
console.log(os.freemem()); // 사용 가능한 메모리 정보 리턴
console.log(os.cpus()); //CPU 정보 객체 리턴
console.log(os.networkInterfaces()); //네트워크 인터페이스 정보

url 모듈

API 문서 참조

var url = require('url');

var parsedObj = url.parse('http://www.hanbit.co.kr/store/books/look.php?p_code=B4250257160');
console.log(parsedObj);

Query String 모듈

실제로는 잘 사용하지 않고, url모듈에도 기능이 있어 해당 모듈을 사용하는것이 편리하다.

var url = require('url');
var queryStr = require('querystring');

var parsedObj = url.parse('http://www.hanbit.co.kr/store/books/look.php?p_code=B4250257160');
console.log(queryStr.parse(parsedObj.query));

util 모듈

Node.js의 보조적인 기능을 모아둔 모듈이다.

format(); //해당 메소드는 console.log와 비슷하나, 차이점은 문자열을 리턴한다는 점만 다르다.

Crypto 모듈

이름만 들어도 암호화인것 같은데, 정답이다. 해시 생성과 암호화를 한다.

var crypto = require('crypto');

var shasum = crypto.createHash('sha256');
shasum.update('crypto_hash');
var output = shasum.digest('hex');

console.log(output);

File System

var fs = require('fs');

readFile(file,encoding,callback);
readFileSync(file, encoding);
writeFile(file,data,encoding,callback);
writeFileSync(file,data,encoding);

Q) 실습 해봅시다!

예외처리

try {
 //....statement
} catch (e) {
 // exception handling
}

일반적인 JavaScript의 예외처리와 같다. 별다른 설명을 할만한게 없다고 한다.

비동기처리의 경우 예외처리

var fs = require('fs');

fs.readFile('file.txt', 'utf8', function(error, data) {
 if (error) {
   //
} else {
   //
}
});

조기리턴

var fs = require('fs');

fs.readFile('file.txt', 'utf8', function(error, data) {
 if (error) {
   return console.log(error);
}
 
 //정상 동작 구문
});

반응형