티스토리 뷰

Node.js

[node.js]Node 에서 모듈 사용하기

감자형 2017. 9. 15. 02:19
  • 파일의 분리
메인 파일의 코드중에서 독립적인 기능은 별도 파일로 분리 가능, 메인 파일에서 전체적인 순서나 흐름만 제어 한다. 이렇게 분리된 파일을 노드에서는 모듈 이라고 부른다.
  • export 전역객체
각각의 기능을 분리 시킬 떄는 단순히 별도의 파일에 코드를 나누어 놓는게 끝나는것이 아니다. 모듈 파일을 불러와서 사용할 수 있는 방법도 함께 만들어 준다.
노드는 CommonJs의 표준 스펙에 따라 모듈을 사용할 수 있게 한다. 이때 사용하는것이 export
  • Node.js에서 모듈 사용하는 대표적인방식
Main.js VS module1.js

1. Main.Js
var module1 = require('module1');
module1.함수 이름();


2. module1.js
exports.함수이름 = 함수 정의;


=> 모듈을 만들 떄는 module1.js처럼 별도의 자바스크립트 파일을 만든후 그 코드에서 exports 객체를 사용하는데, exports 객체의 속성으로 변수나 함수를 지정하면 그 속성을 main.js와 같은 메인 자바스크립트 파일에서 불러와 사용할 수 있다.
모듈을 불러 올때는 require() 메소드 사용한다
모듈로 만들어 둔 파일의 이름을 이 메소드의 파라미터로 전달 한다. require() 메소드를 호출하면 모듈 객체가 반환되는데, 모듈에서 exports 객체에 설정한 속성들은 이 모듈 객체를 통해 접근 할 수 있다.

*주의 할점*

exports 외에 module.exports를 사용 할 수도 있다. exports에서는 속성을 추가 할 수 있어 여러 개의 변수나 함수를 각각의 속성으로 추가 할 수 있음. 이에 반해 
module.exports에는 하나의 변수나 함수 또는 객체를 직접 할당 해야 한다. 일반적으로는 객체를 그대로 할당하며, 이렇게 할당한 객체안에 넣어둔 변수나 함수를 메인파일에서도 사용 할 수 있다.

예) module1.js VS module2.js

<module1.js 파일>
// 변수나 함수를 직접 할당 하지 않아도 된다.
exports.add(function(a,b){
return a+b;
}
exports.multiply = function(a,b){
return a * b;
}

<module2.js 파일>
var calc = {};            // 변수나 함수를 직접 할당
calc.add = function(a,b){
return a+b;
}

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


  • 언제 exports를 쓰고 module.exports를 쓸까?
exports와 module.exports 라는것을 사용한다 라는것을 일단 알고 있고, '어떤것을 사용하느냐에 따라 메인파일에서 모듈을 불러와 사용하는 방식이 약간 다를 수 있다.' 라는것만 알고 가면 된다(추후 공부 내용)
  • 자바 스크립트의 함수 호출 방법
예) var calc = {};
calc.add = function(a,b){
return a + b;
}
console.log('호출 : %d", calc.add(10,20));

호출 방법 => (객체). 함수 이름 . 소괄호(파라미터);

  • 위의 예제를 모듈 분리를 해서 만들어 볼까요?
<cal.js 파일>
exports.add = function(a,b){
    return a+b;
}

<main.js 파일>

var calc = require('./cal'); 
// cal.js 파일을 require()함수의 파라미터로 모듈 파일의 이름을 전달하는데, 파일 의 이름 전체를 다 사용하지 않고, 확장자를 뺸 cal라는 이름만 사용한다. ./ 를 붙인것을 보면 파일 이름은 상대패스로 지정하였음.이렇게 불러들인 모듈은 calc 변수에 할당!

console.log('모듈로 분리한후 - calc.add 함수 호출 결과 : %d',calc.add(10,10));        

// ./cal의 모듈이 추가되었으므로 add 메소드를 사용 할수 있게 되었다 따라서, calc 변수에 있는 모듈의 객체인 add()메소드를 사용해서 올바른 결과값이 나오는것을 확인할 수 있다.


  • module.exports로 메인 파일에 더하기 함수를 호출하면 어떤 차이점이 있을까? (위에와 비교 해보자)
<cal2.js>
var cal = {};       
 // 직접 변수나 함수에 할당해줘야하므로 변수 선언이 되었다 var cal = {};

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

module.exports = cal;
        // 할당된 변수를 module.exports에 할당 시킨다.

<main.js>
var calc = require('./cal2');
console.log('모듈로 분리한후 - calc.add 함수 호출 결과 : %d',calc.add(10,10));

// cal2에 있는 js 파일의 모듈을 읽어 들여 calc 변수에다 할당 시킨다. cal2의 파일에 있는 모듈을 할당 받았으므로 add 메서드를 사용할 수 있다. calc의 변수에 담긴 add를 사용 하면 된다.

  • 외장 모듈 사용 하기
외장 모듈이란? 이미 다른 사람이 시스템 환경 변수를 접근 할 수 있는 모듈을 만들어 두었으므로 우리는 그 모듈을 불러와서 간편하게 사용 가능.
앞서 해결 하지 못했던 OS 환경 변수 접근 문제를 모듈로 해결 해볼것이다.

시스템 환경변수에 접근 할 수 있는 모듈의 이름은?
require('nconf');

예)
var nconf = require('nconf');
nconf.env();
console.log('OS 환경 변수의 값을 : %s',nconf.get('OS'));

이렇게 사용하면 os 환경변수의 값을 출력할 수 있다. 여기서 주의 할점은 
$npm install nconf 패키지를 설치해주어야 한다. 아니면 패키지가 없다고 오류가 날것이다. 
  • json 파일 생성해보기
$npm init 
명령어를 사용해서 nconf 폴더에다가 init명령어를 입력하면 입력값을 입력하면 그 폴더에 package.json 파일이 생성 될 것이다.

pakage.json 파일 안에는 프로젝트에 대한 기본 정보가 들어 있고, nconf 모듈을 삭제한후 다시 설치하는데, 다시 설치 할때에는 npm명령어에 --save 옵션을 추가 하면 된다.

$npm install 명령어 사용시 package.json 파일에 있는것을 다른폴더로 옮긴후 npm install 안에 있는 패키지가 한번에 설치 된다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함