프론트엔드

Node.js 기초부터 튼튼히 (2) 내장 모듈

CyberI 2017. 5. 11. 17:39

 

Node.js 기초부터 튼튼히

(2)내장 모듈

 

안녕하세요!! 다들 5월 황금연휴는 잘 보내셨는지요. 노동절, 석가탄신일, 어린이날 줄줄이 붙어있다니~ 캬 ^0^/

다들 잘 쉬었다면 백 투더 일상으로 돌아와서 저와 함께 노드JS의 내장되어있는 모듈들을 공부해요~  

 

 

Node.js는 다양한 모듈을 지원합니다. Node.js 문서를 참고하여 직접 실행해보면서 사용법을 익히도록 합시다.

↓↓↓↓↓↓최신 문서를 참고하시고 싶으신 분은 아래 링크로 이동 ↓↓↓↓↓

https://nodejs.org/docs/latest/api/index.html

자, 시작해볼까요?

음.... 본격적으로 내장 모듈을 알아보기 전에 내장 모듈 호출하는 법부터 익힙시다.

require( {모듈명} )

require()로 내장된 모듈 또는 객체를 부를 수 있습니다. 어? 이전글에서 분명 require함수에 js파일을 불러올 때 사용하지 않았습니까? 하실 수 있는데 Node.js에서는 하나의 자바스크립트 파일을 하나의 모듈로 인식합니다. 아래와 같이 모듈을 호출하시면 됩니다. 



  // os 모듈을 호출합니다.
  var os = require('os');

그럼 각 모듈에서 사용할 수 있는 함수들에 대해 알아보겠습니다.

 

os 모듈 

(https://nodejs.org/docs/latest/api/os.html)

os모듈은 사용하시는 운영체제와 관련된 값 또는 수치를 제공하는 메서드입니다.

<  OS 모듈 함수  >

   
   hostname()
   type()
   platfrom()
   arch()
   release()
   uptime()
   loadavg()
   totalmem()
   freemem
   cpus
   getNetworkInterfaces()
   


운영체제의 호스트명을 반환합니다.
운영체제의 종류를 반환합니다.
운영체제의 플랫폼을 반환합니다.
운영체제의 아키텍처를 반환합니다.
운영체제의 버전을 반환합니다.
운영체제의 실행시간을 반환합니다.
로드 에버리지 정보를 담은 배열을 반환합니다.
시스템 총 메모리를 반환합니다.
사용 가능한 메모리를 반환합니다.
CPU의 정보를 담은 객체를 반환합니다.
네트워크 인터페이스의 정보를 담은 배열을 반환합니다.

os모듈의 함수는 간단히 값을 반환하는 메서드로 console.log()를 이용하여 확인해보실 수 있습니다.

(cpu 정보와 NetworkInterface관련 정보는 너무 길어서 캡쳐 생략)

 

url 모듈

(https://nodejs.org/docs/latest/api/url.html)

 url모듈을 통해서 URL 문자열을 객체로 바꾸거나 URL 객체를 문자열로 변환 가능하며 파싱과 조합을 사용하여 URL과 관련된 정보를 가져올 수 있습니다.

<  url 모듈 함수  >

   
   parse(urlStr, [, parseQueryString=false, slashesDenoteHost=false]))
   format(urlObj)
   resolve(from, to)
   


URL 문자열을 URL 객체로 변환하여 리턴합니다.
URL 객체를 URL 문자열로 변환하여 리턴합니다.
매개변수를 조합하여 URL 문자열을 생성하여 리턴합니다.

 

parse함수를 사용해 어떻게 url 객체로 변환되는지 파악해 보기위해 구글에 'nodejs' 라고 검색한 창의 주소를 사용하여 실행해보겠습니다.

 



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


 // 구글에 nodejs라고 검색한 주소를 파싱
var parsedURL = url.parse('https://www.google.co.kr/search?q=nodejs&oq=nodejs&aqs=chrome.0.69i59l3j69i60l3.968j0j8&sourceid=chrome&ie=UTF-8');

 

엔터를 똭 치면

 

node js의 문서에 들어가보면 다음과 같이 나와있다. 예제로 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash' 주소를 객체로 쪼게어 본다면 다음과 같다고 한다.

┌─────────────────────────────────────────────────────────────────────────────┐
│                                    href                                     │
├──────────┬┬───────────┬─────────────────┬───────────────────────────┬───────┤
│ protocol ││   auth    │      host       │           path            │ hash  │
│          ││           ├──────────┬──────┼──────────┬────────────────┤       │
│          ││           │ hostname │ port │ pathname │     search     │       │
│          ││           │          │      │          ├─┬──────────────┤       │
│          ││           │          │      │          │ │    query     │       │
"  http:   // user:pass @ host.com : 8080   /p/a/t/h  ?  query=string   #hash "
│          ││           │          │      │          │ │              │       │
└──────────┴┴───────────┴──────────┴──────┴──────────┴─┴──────────────┴───────┘
(all spaces in the "" line should be ignored -- they are purely for formatting)

 

이렇게 파싱된 url객체를 잘 활용할 수 있을 뿐더러, resolve, format함수를 통해 조합하고 다시 url 객체로 변경할 수 도 있으니 요긴하게 사용될 것 같은 모듈이다.

 

Query String 모듈
(https://nodejs.org/docs/latest/api/querystring.html)

 

URL 객체의 쿼리와 관련된 모듈로 위에서 했던 url 모듈처럼 쿼리의 객체를 문자열로 변환하거나 반대로 문자열을 쿼리 객체로 변환하는 기능을 수행합니다.

 

<  Query String 모듈 함수  >

   
   stringify(obj[, sep='&', eq='='])
   parse(str[, sep='&', eq='='])
   


쿼리 객체를 쿼리 문자열로 변환합니다.
쿼리 문자열을 쿼리 객체로 변환합니다.

열을 쿼위에 nodejs를 검색한 주소를 파싱한 값을 사용하여 그 안의 쿼리문의 값을 변환 시켜 보겠습니다.



 // queryStrig 모듈 호출
var qs = require('querystring');


var objQuery = qs.parse(parsedURL.query);
var strQuery = qs.stringify(objQuery);


console.log(objQuery);
console.log(strQuery);

 

쿼리문이 object형태로 표시되는것과 문자열로 다시 변환되어 일자로 나오는 것을 확인하실 수 있습니다.

 

 

Util 모듈
(https://nodejs.org/docs/latest/api/util.html)

 

<  Util 모듈 함수  >



   utill.format()
   utill.debug()
   utill.log()
   


매개변수로 입력한 문자열을 조합해 반환합니다.
프로그램의 실행을 멈추고 입력값을 출력합니다.
timesteamp 시관과 함께 메시지를 출력한다.

이 외에도 다른 유용한 메서드들이 많으니 문서에 꼭 들어가 참고하기 바란다. util의 format함수는 문자열로 반환하는 기능을 하기에 익숙한 인자 %s, %d, %j, % 를 이용한다

 



 // util모듈 호출
var util= require('util');
var data = util.format('%d%s %d%s',5, '월', 5, '일 어린이날')'


console.log(data);

원하는 결과값이 출력되는걸 확인할 수 있다.

 

 

Crypto 모듈
(https://nodejs.org/docs/latest/api/crypto.html)

 

crypto 모듈은 해시와 암호화 기능이 있습니다. 간단히 해시를 생성하여 암호화와 복호화 하는 부분만 보고 넘어가겠습니다. 자세하게 알고 싶으신 분들은 api 문서를 참조하시면 됩니다.

 



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


// 해시 생성
var shasum = crypto.createHash('sha1');
shasum.update('crypto_hash');
var output = shasum.digest('hex');


console.log(output)


var key = '비밀'; // 비밀키값
var input = 'password486'


//암호화
var cipher = crypto.createCipher('aes192', key);
cipher.update(input, 'utf8', 'base64');
var cipheredOutput = cipher.final('base64');


//암호화 해제
var decipher = crypto.createDecipher('aes192', key);
decipher.update(cipheredOutput,'base64', 'utf8');
var decipheredOutput = decipher.final('utf8');
     
      console.log(input)                          // 출력값 : password486
      console.log(cipheredOutput)            // 출력값 : 7OVfng/ujIZ8RkfxBIJAaA==
      console.log(decipheredOutput )        // 출력값 : password486
 
   
 
 

 

File System 모듈
(https://nodejs.org/docs/latest/api/fs.html)

 

FileSystem을 줄여서 fs모듈이라 하는데요 파일 처리와 관련된 작업을 합니다. 굉장히 많은 메소드가 있어 위에 링크따라 들어가셔러 언급되지 않은 메소드들도 함께 보면 좋을것 같습니다.

대부분의 메소드들이 동기/비동기로 나뉘어지는데, 동기방식을 사용하는 메소드에는 Sync라는 키워드가 붙어잇다고 보시면 좋을 것 같습니다.

비동기 방식은 callback함수를 마지막에 추가하시면 되는데 파일을 읽어오는 함수 readFile(비동기)/readFileSync(동기)로 설명하자면  동기방식은 (파일 경로, 인코딩)이라면 fs.readFileSync( 'test.txt' , 'utf8' );

비동기 방식은 마지막 인자에 callback 함수를 추가해주시면됩니다.

 

fs.readFile('test.txt', 'utf8'. function(error, data){ console.log(data); });

파일 처리를 하면서 중요한 부분 중 하나는 예외처리인데요. 시스템이 비정상적으로 종료되지 않게 하기 위한 필수 사항입니다만 동기/비동기에 따라 예외처리하는 법이 다릅니다. 위에서 예상하실 수 있듯이, 비동기 방식에서는 callback함수에 예외처리가 가능합니다. 동기 방식에서는 try/catch 문으로 예외처리 하시면 됩니다.

 

그럼 예외처리까지해서 비동기 방식의 파일을 읽고 쓰기를 실행해보겠습니다.

 

비동기 방식

  
  // 모듈을 호출합니다.
  var fs = require('fs');


  // 파일 쓰기
  fs.writeFile( 'test.txt' , 'testing~' , 'utf8', function (error) {
   if(error){
       console.log(error);
   }else{
        console.log('파일 작성 완료');
   }
  });


  // 파일 읽기
  fs.readFile( 'test.txt' , 'utf8' , function (error, data){ 
   if(error){
       console.log(error);
   }else{
        console.log(data);
   }
  });

 

작성하시면, 

텍스트 파일이 생성되고  파일 읽기를 통해 console창에 test.txt에 적혀있는 'testing~' 이 출력됩니다.

동기방식은 크게 다를거 없이 callback함수를 지우시고 전체를 try문으로 감싼 후 catch문에 error가 발생했을 경우의 처리 방식을  작성하시면 됩니다.

 

(ex)



try{
fs.writeFileSync('test.txt', 'hello summer', 'utf8');
}catch(e){
console.log(e);
}

 

이 외에도 파일에 내용을 추가하는 appendFile/appendFileSync 파일이 존재하는지 확인하는 exists 파일의 이름을 재정의 하는 rename/renameSync 등등 다양한 메소드들을 제공하니 꼭 api문서에 들어가보시길 권장합니다.

 

그리고 가장 중요한 것은 복습!복습! 또 복습입니다!

막상 이렇게 쉽게 따라하다가도 갑자기 '어쩌구저쩌구' 파일을 읽고 거기안에 있는 글을 url객체로 바꾸고 쿼리문을 string으로 또바꿔서 마지막에 s를 추가해봐' 라든지 하게 되면 멘붕이 올 수 있다.

 

스스로 퀴즈를 내어서 api문서나 책을 참고하지 않고 소스를 작성해보는 것 또한 좋은 공부방법이 되실 겁니다.

그럼 다음 번에는 이벤트 관련된 내용으로 찾아오겠습니다!!!

 

 


Node.js 시리즈 3편에 대한 내용을 살펴보고 싶다면, 아래 링크를 클릭해주세요.

▶ Node.js 기초부터 튼튼히 (3) 이벤트