*개요
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을 통해 간단한 서버를 시작할 수 있습니다.
'학습 > Node.js' 카테고리의 다른 글
node js 파라미터, 쿠키, 세션 이용하기 (0) | 2022.01.15 |
---|---|
node express 모듈 사용하기 (0) | 2022.01.15 |
Var, Let, Const 차이점 (0) | 2021.05.25 |
회원가입에서 공백, 특수문자 검사하기 (0) | 2021.04.27 |
컴포넌트 ( 같은 레벨에서의 통신 ) (0) | 2021.01.02 |