본문 바로가기
학습/Node.js

node js 기본 모듈

코동이 2022. 1. 15.

*개요

 

node js 기본 모듈을 공부합니다. 모듈들은 npm의 express를 기반으로 package.json에 dependencies에 모듈들을 등록합니다.(하지만 기본 모듈이므로 따른 설정은 필요없습니다.) 원하는 파일에서 require() 를 통해 호출하면 해당 기능을 사용할 수 있습니다. 강의에서는 많은 부분을 소개하였지만, 필요시에 추후 보기로하고 중요하거나 흥미롭다고 생각되는 부분들을 뽑았습니다.

 

 

1. assert

 

deepEqual : 타입 무시하고 값이 같은지 검사한다.

notDeepEqual : 타입무시하고 다른지 검사한다.

 

deepStrictEqual : 타입 검사하고 모든 내용이 같은 객체인지 비교한다.

notDeepStrictEqual : 타입 무시하고 다른 부분이 있는 객체인지 비교한다.

 

var assert = require("assert");
var v1 = 10;
var v2 = 20;
var v3 = 30;

assert(v1 < v3);
console.log("v1은 v3보다 작습니다.");

assert(v1 == v3);
console.log("v1은 v3과 같습니다.");

assert(v1 - v2);
console.log("v1 - v2는 0이 아닙니다.");

//타입 무시
assert.equal(v1, v2);
console.log("v1과 v2는 같습니다.");

//strictEqual - 타입 검사

//결과 값이 같으면 오류가 발생(타입 무시)
assert.notEqual(v1, v3);
console.log("v1와 v3은 다릅니다.");

//결과 값이 같으면 오류가 발생(타입 검사)
assert.notStrictEqual(v1, v3);
console.log("v1와 v3은 다릅니다.");

 

2. cluster

 

node.js의 병렬처리를 위해 제공되는 모듈이다. 작업 하나의 단위를 worker라고 부른다.

cluster 모듈 생성 후 fork 모듈을 호출하면 worker를 생성한다.

필요한만큼 worker를 생성해서 병렬처리하면 된다.

보통 cpu 코어 개수만큼 worker를 발생시켜 병렬처리한다.

 

var cluster = require("cluster");

//Round Robin
cluster.schedualingPolicy = cluster.SCHED_RR;

if(cluster.isMaster == true) {
    cluster.fork();
    cluster.fork();
    cluster.fork();

    cluster.on('online', function(worker){
        for(var i=0; i<10; i++) {
            console.log(worker.process.pid, "동작");
        }
    });
}

 

3. dns

 

지정된 도메인의 dns 정보를 알아올 수 있다.

지정된 도메인의 ip주소 정보를 알아올 수 있다.

lookup : 지정된 도메인 정보를 알아온다.

 

var dns = require("dns");

dns.lookup("google.com", function(err, address, family){
    console.log("IP주소", address);
    console.log("IP버전", family);
});

var op1 = {
    family : 4
}

dns.lookup("google.com", op1, function(err, address, family){
    console.log("IP주소 v4", address);
});

var op2 = {
    family : 6
}

dns.lookup("google.com", op2, function(err, address, family){
    console.log("IP주소 v6", address);
});

 

4. http

 

http 모듈은 웹 어플리케이션을 개발할 수 있도록 환경을 제공한다.

일반적인 웹서버와 동일하게 동작한다.

http 모듈은 웹 서버의 기능을 할 수 있는 모듈이다.

createServer : 웹 서버 객체를 만든다.

listen : 웹 서버를 작동시킨다.

 

var http = require("http");
var url = require("url");

var server= http.createServer(function(req, res){
    // res.write("Hello World");
    //res.writeHead(200, {"content-type" : "audio/mp3"});
    var q = url.parse(req.url, true);
    
    res.writeHead(200, {"content-type" : "text/html"});

    res.write("<!DOCTYPE html>");
    res.write("<html>");
    res.write("<head>");
    res.write("<meta charset='utf-8'>");
    res.write("<body>");

    switch(q.pathname) {
        case "/":
            res.write("<h1>root 입니다</h1>");
            res.write("<a href='test1?data1=111'>test1</a><br/>");
            res.write("<a href='test2?data1=222'>test2</a><br/>");
            break;
        case "/test1":
            res.write("<h1>test1 입니다</h1>");
            res.write("<h1>data :" + q.query.data1 + "<br/>");
            break;
        case "/test2":
            res.write("<h1>test2 입니다</h1>");
            res.write("<h1>data :" + q.query.data1 + "<br/>");
            break;
    }
    
    res.write("</body>");
    res.write("</html>");
    res.end();
});

server.listen(1234);
console.log("서버 가동");

 

 

5. path

 

path 모듈은 경로에 관련된 기능을 제공한다.

경로에 대해 여러 작업이 필요한 경우 사용한다.

 

var path = require("path");
const { extname } = require("path/posix");

var basename1 = path.basename("c:\\abc\\abc.txt");
console.log("basename1 : ", basename1);

var basename2 = path.basename("c:/abc/abc.txt");
console.log("basename2 : ", basename2);

var basename3 = path.basename("abc.txt");
console.log("basename3 : ", basename3);

var dirname1 = path.dirname("c:/abc/abc.txt");
console.log("dirname1 : ", dirname1);

var dirname2 = path.dirname("abc.txt");
console.log("dirname2 : ", dirname2);

var extname1 = path.extname("c:/abc/abc.txt");
console.log("extname2 : ", extname1);

var extname2 = path.extname("abc.txt");
console.log("extname2 : ", extname2);

//절대경로인지 검사 (true, false)
var isAbsolute1 = path.isAbsolute("c:/abc/abc.txt");
var isAbsolute2 = path.isAbsolute("abc.txt");
var isAbsolute3 = path.isAbsolute("c:\\abc\\abc.txt");
console.log("isAbsolute1 : ", isAbsolute1);
console.log("isAbsolute1 : ", isAbsolute2);
console.log("isAbsolute1 : ", isAbsolute3);

var join = path.join("aaa", "bbb", "ccc.txt");
console.log("join :", join);

//경로 정리
var normalize = path.normalize("c:/aaa/../bbb/ccc.txt");
console.log(normalize);


========

basename1 :  abc.txt
basename2 :  abc.txt
basename3 :  abc.txt
dirname1 :  c:/abc
dirname2 :  .
extname2 :  .txt
extname2 :  .txt
isAbsolute1 :  true
isAbsolute1 :  false
isAbsolute1 :  true
join : aaa\bbb\ccc.txt
c:\bbb\ccc.txt

 

 

6. exports 생성모듈

 

내가 만든 파일에 exports를 사용해서 직접 모듈처럼 활용시킬 수 있다.

다른 모듈과 마찬가지로 require를 이용해 사용한다.

 

//second.js
exports.f2 = function() {
    console.log("f2 함수 호출");
};

===========

//main.js
var second = require("./second.js");

function f1() {
    console.log("a1 함수 호출");
}

f1();
second.f2();

 

 

* 정리

 

nodejs의 기본모듈들의 종류와 사용법을 간단히 알아보았습니다. 이외에도 crypto, Buffer, fs, OS 등이 있습니다.

require를 호출한다는 점, 안에 정의된 함수방식대로 이용하면 된다는 점을 알았습니다.특히 http는 express 기반 nodejs의 중요한 모듈이므로 좀 더 신경써서 확인이 필요합니다.createServer와 listen을 통해 간단한 서버를 시작할 수 있습니다.

 

 

반응형