본문 바로가기
반응형

Node.js에서는 475,000개에 달하는 정말 많은 모듈이 존재합니다.
그중에서 제가 사용해 봤던 몇몇 유용한 모듈을 소개할까 합니다.

1. url (표준모듈)

url 모듈은 상대URL절대URL로 변경 해주는 등 url 사용에 대한 다양한 기능을 제공하고 있습니다.

간단한 기능 API는 아래와 같습니다.

url.resolve(from, to) // 상대경로를 절대경로로 변경하여 줍니다.
url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) // url 문자열(urlStr)을 url 객체로 변환하여 리턴합니다.
url.format(urlObj) // urlObj객체를 URL문자열로 변환하여 리턴합니다.

1.1. 설치

표준모듈이라 Node.js에 포함되어 있으므로 별도의 설치는 필요없습니다.

1.2. 간단한 사용예제

var url = require('url');

// 상대 URL을 절대 URL로 변경
url.resolve('/one/two/three', 'four')                               // '/one/two/four'
url.resolve('http://example.com/one', '/two')                       // 'http://example.com/two'
url.resolve('http://example.com/depth1/depth2/one', '/one')         // 'http://example.com/one'
url.resolve('http://example.com/depth1/depth2/one', '../two')       // 'http://example.com/depth1/two'
url.resolve('http://example.com/depth1/depth2/one', '../../tree')   // 'http://example.com/tree'

2. fs (표준모듈)

fs (File System) 모듈은 node.js에서 파일과 폴더를 다루는 모듈입니다. 일반적으로 파일을 읽고 쓰고, 폴더를 생성하고 삭제하는 등의 일을 합니다.

fs는 기능이 상당히 많은데 주로 사용되는 기능등은 아래와 같습니다.

fs.readFile(filename, [options], callback)          // 비동기식 파일 읽기
fs.readFileSync(filename, [options])                // 동기식 파일 읽기
fs.writeFile(filename, data, [options], callback)   // 비동기식 파일 쓰기
fs.writeFileSync(filename, data, [options])         // 동기식 파일 쓰기
fs.mkdir(path, [mode], callback)                    // 비동기식 폴더 생성하기
fs.mkdirSync(path, [mode])                          // 동기식 폴더 생성하기
fs.rmdir(path, callback)                            // 비동기식 폴더 삭제하기
fs.rmdirSync(path)                                  // 동기식 폴더 삭제하기
...

비동기식과 동기식의 차이는…
비동기식의 경우 해당기능의 명령어를 수행하고 결과를 기다리지 않고 다음 명령어를 쭉쭉쭉~ 실행해 나갑니다. 그러다가 해당기능의 명령어의 결과값이 오면 callback함수에서 설정한 기능을 수행하는 식으로 명령어가 진행됩니다.
동기식의 경우callback함수를 별도로 지정하지 않고 해당기능의 명령어를 수행하고 결과가 오기를 기다렸다가 결과를 처리하고 다음 명령어를 수행하는 식으로 명령어가 진행됩니다.
경우에 따라서 비동기식이 편할 때가 있고 동기식이 편할 때가 있으므로 명령어를 분리하여 사용하면 됩니다.
fs모듈의 경우 동기식의 명령어는 명령어 뒤에 Sync가 붙습니다.

2.1. 설치

표준모듈이라 Node.js에 포함되어 있으므로 별도의 설치는 필요없습니다.

2.2. 간단한 사용예제

var fs = require('fs');

// 파일 읽기
fs.readFile('/etc/passwd', (err, data) => {
  if (err) throw err;
  console.log(data);
});

// 파일 쓰기
fs.writeFile('message.txt', 'Hello Node.js', 'utf8', (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
});

3. http (표준모듈)

http 모듈은 Node.js의 웹 모듈이며 HTTP 웹 서버를 생성하고 웹페이지를 불러오는 등.. 웹에 관련된 기능을 수행합니다.

크게 3가지의 객체로 나눌 수 있으며 간단한 역활은 아래와 같습니다.

  • server 객체 : 서버를 생성하는 객체 입니다. http 모듈에서 가장 중요하다고 할 수 있는 객체입니다.
  • response 객체 : 요청에 대해 응답을 해주는 객체 입니다.
  • request 객체 : 요청을 하는 객체 입니다.

3.1. 설치

표준모듈이라 Node.js에 포함되어 있으므로 별도의 설치는 필요없습니다.

3.2. 간단한 사용예제

var http = require('http');

// 웹서버 생성
// req (request)  : 웹 요청 매개변수
// res (response) : 웹 응답 매개변수
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'}); // 응답 헤더 작성
    res.end('Hello World'); // 응답 본문 작성
}).listen(1337, '127.0.0.1'); // 포트와 호스트 지정

console.log('Server running at http://127.0.0.1:1337/');

4. cheerio-httpcli

cheerio-httpcli는 스크래핑을 위한 모듈입니다. 스크래핑이란 원하는 URL의 내용을 긁어와서 원하는 요소의 정보를 획득하는 것으로 cheerio-httpcli는 jQuery의 선택자 형식으로 요소를 획득을 할 수 있게 해 줍니다.

4.1. 설치

npm install cheerio-httpcli

4.2. 구글 검색 결과에서 링크가 있는 제목과 링크값을 추출하는 예제

var client = require('cheerio-httpcli');
var url = "http://www.google.com/search";
var param = { q: 'node.js' };

client.fetch(url, param, function (err, $, res, body) {
    if (err) {
        console.log("Error:", err);
        return;
    }
    console.log(res.headers);
    console.log($('title').text());
    $('a').each(function (idx) {
        console.log($(this).attr('href'));
    });
});

4.3. 구글 검색엔진에서 새 이미지를 추출하는 예제

var client = require('cheerio-httpcli');
var URL    = require('url');

// 다운로드
var url = "https://www.google.co.kr/search?q=" + encodeURIComponent("새");
var param = {};

client.fetch(url, param, function(err, $, res) {
  if (err) { console.log("error"); return; }

  // 링크를 추출하여 표시
  $("img").each(function(idx) {
    var src = $(this).attr('src');
    src = URL.resolve(url, src);
    console.log(src);
  });
});

더 많은 API 정보는 github페이지를 참조하세요.

UX 공작소

UX와 UI에 관해 내가 알게된 다양한 이야기를 공유해요~