Node.js 모듈

김보훈·2021년 6월 17일
0
post-thumbnail

모듈이란

모듈이란 다양한 기능을 하는 함수들 중 연관된 기능을 하는 함수들을 한 곳에 묶어 파일로 관리하는 것이다.

  • 외장 모듈
    • 일반 Node.js 개발자들이 만들어 놓은 모듈이다.
    • 외장 모듈을 사용하기 위해서는 npm (Node Package Manager)을 사용한다.
  • 내장 모듈
    • Node.js 내부에 이미 제공하는 모듈이다.
    • 내장 모듈은 이미 있으므로 npm (Node Package Manager)을 사용하지 않아도 된다.

npm (Node Package Manager)
Node.js로 만들어진 모듈을 웹에서 받아서 설치하고 관리해주는 모듈 패키지 관리 도구로 모듈의 관리를 도와준다.

장점

연관을 가진 함수들을 파일 하나하나 모듈로 묶어 놓아 관리하기 때문에 개발효율성과 유지보수성이 향상된다.

Common.js 와 Node.js 모듈화

Common.js란

common.js는 JavaScript를 브라우저에서뿐만 아니라, 서버사이드 애플리케이션이나 데스크톱 애플리케이션에서도 사용하려고 조직한 자발적 워킹 그룹이다.

이 그룹은 JavaScript를 범용적으로 사용하기 위해 필요한 '명세(Specification)'를 만드는 일을 한다.

서버사이드 JavaScript의 주요 쟁점

Kevin은 JavaScript가 브라우저용 언어를 넘어 범용적으로 쓰이려면, Ruby나 Python과 같은 체계가 필요하다고 주장했다. Kevin이 제기한 핵심 문제를 정리하면 다음과 같다.

  • 서로 호환되는 표준 라이브러리가 없다.
  • 데이터베이스에 연결할 수 있는 표준 인터페이스가 없다.
  • 다른 모듈을 삽입하는 표준적인 방법이 없다.
  • 코드를 패키징해서 배포하고 설치하는 방법이 필요하다.
  • 의존성 문제까지 해결하는 공통 패키지 모듈 저장소가 필요하다.

핵심은 모듈화

앞에서 언급한 문제점들은 결국 모듈화로 귀결된다. 그리고 CommonJS의 주요 명세는 바로 이 모듈을 어떻게 정의하고, 어떻게 사용할 것인가에 대한 것이다.

모듈화는 아래와 같이 세 부분으로 이루어진다.

  • 스코프(Scope): 모든 모듈은 자신만의 독립적인 실행 영역이 있어야 한다.
  • 정의(Definition): 모듈 정의는 exports 객체를 이용한다.
  • 사용(Usage): 모듈 사용은 require 함수를 이용한다.

먼저 모듈은 자신만의 독립적인 실행 영역이 있어야 한다. 따라서 전역변수와 지역변수를 분리하는 것이 매우 중요하다.
서버사이드 JavaScript의 경우에는 파일마다 독립적인 파일 스코프가 있기 때문에 파일 하나에 모듈 하나를 작성하면 간단히 해결된다.

-참고 사이트-
Common JS 공식사이트
JavaScript 표준을 위한 움직임

require( ) , module.exports

<html>
	<body>
    	<script src="text.js"></script>
    </body>
</html>

위 코드의 예시대로 html과 javascript파일을 연결시켜주는 script메소드를 이용하여 연결한다.

Node.js도 html처럼 서로 다른 자바스크립트 파일들을 참조하고 호출하는 방법이 필요한데

노드에서 자바스크립트 파일은 하나의 모듈이 될 수 있으며 모듈을 정의하고 외부로 공개해주는 module.exports 또는 exprots 객체와 공개된 모듈을 가져오는 require함수가 있다.

파일 경로

module.exports

module - module 생성 및 내보내기

// counter.js

let count = 0

function increase(){
  return count++
}

function getCount(){
  return count
}

module.exports.getCount = getCount; //module 내보내기
module.exports.increase = increase; //module 내보내기

require - module 받아오기

//app.js

const counter = require("./counter.js");

counter.increase();
console.log(counter.getCount()) // 1

module 한번에 받아오기

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( ) 등이 있다.

0개의 댓글