모듈이란 다양한 기능을 하는 함수들 중 연관된 기능을 하는 함수들을 한 곳에 묶어 파일로 관리하는 것이다.
npm (Node Package Manager)
Node.js로 만들어진 모듈을 웹에서 받아서 설치하고 관리해주는 모듈 패키지 관리 도구로 모듈의 관리를 도와준다.
연관을 가진 함수들을 파일 하나하나 모듈로 묶어 놓아 관리하기 때문에 개발효율성과 유지보수성이 향상된다.
common.js는 JavaScript를 브라우저에서뿐만 아니라, 서버사이드 애플리케이션이나 데스크톱 애플리케이션에서도 사용하려고 조직한 자발적 워킹 그룹이다.
이 그룹은 JavaScript를 범용적으로 사용하기 위해 필요한 '명세(Specification)'를 만드는 일을 한다.
Kevin은 JavaScript가 브라우저용 언어를 넘어 범용적으로 쓰이려면, Ruby나 Python과 같은 체계가 필요하다고 주장했다. Kevin이 제기한 핵심 문제를 정리하면 다음과 같다.
앞에서 언급한 문제점들은 결국 모듈화로 귀결된다. 그리고 CommonJS의 주요 명세는 바로 이 모듈을 어떻게 정의하고, 어떻게 사용할 것인가에 대한 것이다.
모듈화는 아래와 같이 세 부분으로 이루어진다.
먼저 모듈은 자신만의 독립적인 실행 영역이 있어야 한다. 따라서 전역변수와 지역변수를 분리하는 것이 매우 중요하다.
서버사이드 JavaScript의 경우에는 파일마다 독립적인 파일 스코프가 있기 때문에 파일 하나에 모듈 하나를 작성하면 간단히 해결된다.
-참고 사이트-
Common JS 공식사이트
JavaScript 표준을 위한 움직임
<html>
<body>
<script src="text.js"></script>
</body>
</html>
위 코드의 예시대로 html과 javascript파일을 연결시켜주는 script메소드를 이용하여 연결한다.
Node.js도 html처럼 서로 다른 자바스크립트 파일들을 참조하고 호출하는 방법이 필요한데
노드에서 자바스크립트 파일은 하나의 모듈이 될 수 있으며 모듈을 정의하고 외부로 공개해주는 module.exports 또는 exprots 객체와 공개된 모듈을 가져오는 require함수가 있다.
// counter.js
let count = 0
function increase(){
return count++
}
function getCount(){
return count
}
module.exports.getCount = getCount; //module 내보내기
module.exports.increase = increase; //module 내보내기
//app.js
const counter = require("./counter.js");
counter.increase();
console.log(counter.getCount()) // 1
require 함수 사용시 module을 명시하지 않은 경우 module.exports정의된 module 파일들을 불러온다.
// app.js
const myModule = require('./module');
// module/index.js
module.exports = {
calc : require('./calc')
print : require('./print')
};
module.exports 와 exports의 차이점
전역 객체란 어디에서나 사용할 수 있는 객체를 말한다.
자바스크립트에서 window나 document와 같은 객체를 전역 객체라고 말한다.
alert( ) = window.alert( )
우리가 사용하는 자바스크립트 함수에는 위의 예시처럼 전역객체가 숨겨져 있다.
require('./module') = global.require('./module')
이처럼 Node.js에서도 global이라는 전역 객체가 있고 모듈을 불러 올 때
require( ),setTimeout( ), console.log( ) 등이 있다.