[Node.js] 모듈 사용하기

효율적 코딩을 위한 모듈

하나의 함수 안에 모든 기능을 넣는 것보다 여러 개의 함수로 나눈 후 필요한 함수만 가져와 사용하면 다른 곳에서도 함수를 재사용할 수 있기 때문에 효율적인 코딩이 가능하다. 또한 각각의 기능을 나누어 프로그램 관리가 쉬워진다. 코드를 하나의 파일이 아니라 여러 개의 파일로 나누어 만들 때에도 이런 장점을 그대로 살릴 수 있다.

메인 파일의 코드 중에서 독립적인 기능은 별도 파일로 분리할 수 있으며, 메인 파일에서는 전체적인 실행 순서, 흐름만을 제어한다. 이렇게 분리된 파일을 노드에서는 모듈이라고 부른다. 모듈이란 별도의 파일로 분리된 독립 기능의 모음이라서 모듈을 만들어 놓으면 다른 파일에서 모듈을 불러와 사용할 수 있다.

exports 전역 객체

각각의 기능을 분리시킬 때 단순히 별도의 파일에 코드를 나눈다고 끝나는 것이 아니다. 분리되어 있는 모듈 파일을 불러와서 사용할 수 있는 방법도 함께 만들어 주어야 한다. 노드는 CommonJS 표준 스펙을 따라 모듈을 사용할 수 있게 하는데, 이 과정에서 exports 전역 객체를 사용한다.

main.js
var module1 = require('module1');
module1.함수이름();
cs

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

모듈을 만들 때는 module1.js처럼 별도의 자바스크립트 파일을 만든 후 그 코드에서 exports 객체를 사용한다. 그러면 main.js에서 불러와 사용할 수 있다.

모듈을 불러올 때에는 require() 메소드를 사용하며, 모듈을 만들어 둔 파일의 이름을 이 메소드의 파라미터로 전달한다. require() 메소드를 호출하면 모듈 객체가 반환되는데, 모듈에서 exports 객체에 설정한 속성들은 이 모듈 객체를 통해 접근할 수 있다.

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

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

<exports를 사용한 경우 - module1.js>

var calc = {};
calc.add = function(a,b){
    return a+b;
};
calc.mul = function(a,b){
    return a*b;
};
 
module.exports = calc;
cs

<module.exports를 사용한 경우 - module2.js>

함수를 모듈로 간단히 분리하기

간단한 더하기 함수를 모듈로 분리해보자.

var calc = {};
calc.add = function(a, b){
    return a + b;
}
 
console.log('모듈로 분리 전 - 호출 결과: %d', calc.add(1010));
cs

모듈로 분리 전이다. 브라켓에서 [Ctrl + Shirt + N]키로 파일으 실행하면 콘솔에 20이 표시될 것이다. 이제 exports를 통해 모듈로 분리해보자.

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

test.js
var calc = require('./calc');
console.log('모듈로 분리 후 - 호출 결과: %d', calc.add(1010));
cs

calc.js와 test.js를 한 폴더에 작성한 후 test.js를 실행하면 정상적으로 모듈이 분리되어 호출된 것을 확인할 수 있다. 파일 이름 앞에 ./를 붙이면 파일 이름을 상대 패스로 지정한다. 만약 calc.js 파일이 존재하지 않는다면, calc 디렉토리가 있는지 찾고 그 안의 index.js를 불러들인다.

module.exports로 메인 파일에 함수 호출하기

이번에는 exports가 아닌 module.exports를 사용해보자.

calc2.js
var calc = {};
 
calc.add = function(a,b){
    return a + b;
}
 
module.exports = calc;
cs

test.js
var calc2 = require('./calc2');
console.log('모듈로 분리 후 - 호출 결과: %d', calc2.add(1010));
cs

module.exports를 사용하여 모듈을 분리했다. require() 함수로 calc2.js 모듈 파일을 불러오면 이때 반환되는 객체는 모듈 파일 안에서 module.exports에 할당했던 객체가 된다.

댓글 없음:

Powered by Blogger.