본문 바로가기

Node.js & Javascript

module 관리

오늘은 Module 관리에 대해서 알려드리겠습니다.



module은 자신이 코딩한 파일을  외부에 두어서 하나의 라이브러리 처럼 관리하는 것을 의미합니다.



가져 오는 부분에서는 es5 버전에선 require("상대경로") ; 이며 es6에서는 import ' export로 보낸 이름 ' from ' 상대경로 ' ; 

이렇게 됩니다.  (require은 es6에서도 사용됩니다!)


그렇다면 간단한 계산기 코드를 먼저 확인해보겠습니다. 




[ Calculator.js ] 


 var calculator = {};


calculator.add = function (a, b) {
return a + b;
};

calculator.minus = function (a, b) {
return a - b;
};

calculator.divide = function (a, b) {
return a / b;
};

calculator.multiply = function (a, b) {
return a * b;
};

module.exports = calculator;


다음은 내보낼 것을 객체로 만들어서 보내는 코드입니다.  

객체로 외부에 내보내려 할 경우 , module을 사용해서 다음과 같이 내보냅니다.

calculator = { } ; 로 선언한 것은 객체를 선언한 것이고 add , minus , divide , multiply 는 본 객체의 키가 되고 

값은 뒤에 함수로 정의한 부분입니다.


이는 require 또는 import 로 받아와서 곧장 사용할 수 있습니다. 



var calculate = require("./modules/calculates");
console.log(calculate.add(1,2));
console.log(calculate.divide(1,2));
console.log(calculate.minus(1,2));
console.log(calculate.multiply(1,2));



다음과 같이 사용하여 불러 올 수 있습니다.

이를 익명 함수로 만들어서 바로 내보낼 수도 있습니다. 


exports.add = function (a, b) {
return a + b;
};

exports.minus = function (a, b) {
return a - b;
};

exports.divide = function (a, b) {
return a / b;
};

exports.multiply = function (a, b) {
return a * b;
};



다음은 외부에서 사용할 함수 이름으로 선언 한 뒤 익명으로 진행할 내용을 정의한 것입니다.

이처럼 코드는 다양하게 정의하여 외부로 내보낼 수 있습니다. 



이번엔 내부 모듈에 대해서 간단하게 알아보고 가겠습니다.

내부 모듈이란 이 전에 개발자 분들이 사용하는 데에 조금 더 편리하게 만들고자 미리 만들어 둔 모듈로

fs 모듈 , path 모듈 , os 모듈 등 여러가지가 많습니다.


그 중 path 모듈을 집고 넘어가겠습니다.

path 모듈은 경로를 나타내는 모듈로 주로 join() 함수를 이용해서 경로에 또 다른 경로를 붙이거나 파일을 붙이는 등의 작업에 사용됩니다.

현재 경로에서 test.js 파일을 붙인다고 생각하면 다음과 같이 붙이게 됩니다. 


var path = require("path");

var filePath = path.join(__dirname,'test.js'); 

console.dir(filePath);


다음과 같이 join을 활용하는데 , __dirname 이라는 전역 변수를 사용했습니다. 이는 현재 경로를 나타내는 변수이니 많이 사용될 것입니다.

이번엔 모듈로 빼는 것을 심화해서 알아보겠습니다.


// 운영체제 확인 내장 모듈
var os = require('os');
console.log('hostname : ' + os.hostname);
console.log('memory : ' + os.freemem);

// path 내장 모듈
var path = require("path");
var directories = ["clubs", "school", "project"];
var dirStr = directories.join(); // join : ',' 를 기반으로해서 문자열로 합쳐짐
console.log("dir :" + dirStr);

var dirStr2 = directories.join(path.sep); // 구분자를 join 내부에 둘 수 있음.
console.log("dir2 : " + dirStr2); // 경로의 구분

path.join(__dirname, "users/school/test.js"); // 경로를 합쳐주는데 파일 seprator인 '/' 를 붙여줌
exports.internModule = function () {
return {
os : os,
dirStr : dirStr,
dirStr2 : dirStr2
}
};



1.  os 모듈을 활용해서 os 의 hostname과 사용 가능한 메모리를 불러옵니다. (원래는 os.hostname() , os.freemem() 이 맞습니다. 근데 import나 require로 가져오는 부분에서 그렇게 작업할 것이기 때문에 여기서는 무관합니다.)


2.  아무 구분자 없이 join을 활용한다면 directories 배열에서 ',' 를 기준으로 합쳐지게 됩니다. (하나의 문자열로)

 : clubs,school,project 


3.  join 시에 path 모듈의 구분자를 가지고 와서 붙입니다. path 모듈의 구분자는 '\' 입니다. 


이렇게 외부의 js 파일을 하나 만들어서 다음과 같이 코딩을 한 다음에 [ exports.외부에서 사용할 함수 이름 ] 다음과 같이 내보내게 됩니다.

이 때, return 값으로 Key , Value로 묶어서 반환했습니다.


외부에서 받을 때에는 require로 가지고 온 변수에 외부에서 사용할 함수 이름을 가지고 온 다음에 그것의 키 값들을 호출하면 

value로 앞서 (1,2,3) 정의한 내용들이 나오게 될 것입니다.






var internModules = require("./modules/intern_modules");
console.log(internModules.internModule().os.hostname());
console.log(internModules.internModule().os.freemem());
// console.log(os.freeme);

console.log(internModules.internModule().dirStr);
console.log(internModules.internModule().dirStr2);



다음과 같이 진행하면 결과물이 올바르게 나올 것입니다. 


참조

https://github.com/Haamseongho/Node-js/tree/master/Module

반응형

'Node.js & Javascript' 카테고리의 다른 글

자바스크립트 개념정의  (1) 2024.01.06
S3 사용법  (2) 2018.04.06
자바스크립트 함수(1)  (0) 2018.03.08
자바스크립트 변수(2)  (2) 2018.03.07
Javascript 변수  (0) 2018.03.06