이 블로그는 광고 클릭 수익으로 운영됩니다!
괜찮으시다면 광고 차단을 풀어주세요 ㅠㅠ

게시글

강좌16 - NodeJS - 일 년 전 등록 / 8달 전 수정

Node 모듈 시스템

조회수:
0
이 블로그는 광고 클릭 수익으로 운영됩니다!
괜찮으시다면 광고 차단을 풀어주세요 ㅠㅠ
이 블로그는 광고 클릭 수익으로 운영됩니다!
괜찮으시다면 광고 차단을 풀어주세요 ㅠㅠ

안녕하세요. 이번 시간에는 Node.js 모듈 시스템에 대해 알아보겠습니다.

우선 모듈은 독립적인 하나의 소프트웨어입니다. Node.js는 파일 하나하나가 모듈로 기능하는데요. 브라우저에서는 script 태그로 스크립트를 불러오면 다른 스크립트에서도 이전 스크립트의 변수를 사용할 수 있었지만, Node.js는 명시적으로 이전 스크립트의 변수를 사용하겠다고 선언해주어야 합니다. 이러한 특성 때문에 Node.js에서는 모듈 시스템을 이해하는 것이 중요합니다.

요즘 ES2015가 대세라서 ES2015의 모듈 시스템을 사용해본 분들이 많을텐데요. Node.js의 모듈 시스템은 비슷하긴 하지만 조금 다릅니다. Node.js 버전 6부터는 ES2015를 지원하긴 하지만 하나 도입하지 않은 게 바로 ES2015의 모듈 시스템입니다. 아마도 Node.js는 자신의 모듈 시스템을 그대로 가져갈 모양입니다.

지금까지 Node.js에서 모듈을 만들 때 module.exports를 사용했었죠? 대표적인 모듈 생성 방법입니다. 하지만 사실 모듈을 만드는 방법이 하나 더 있습니다. 이번 시간에는 그 방법에 대해서도 알아보겠습니다.

calc.js

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

main.js

const add = require('./calc.js');
console.log(add(1, 2)); // 3

위의 calc.js는 흔히 볼 수 있는 모듈입니다. add 함수가 여러 번 재사용 될 때, 개별적인 파일로 만들고 마지막에 다른 파일에서 사용할 변수를 module.exports에 대입해주면 됩니다. 저렇게 모듈로 만들면 쉽게 재사용할 수 있죠. 다른 파일(main.js)에서는 해당 파일 경로를 require 해주면 calc.js의 add 함수를 사용할 수 있습니다..

만약 calc.js에 빼기나 곱하기, 나누기같은 기능들을 추가하고 싶다면 어떻게 해야 할까요?

calc.js

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

function substract(a, b) {
  return a - b;
}

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

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

module.exports = {
  add: add,
  substract: substract,
  multiply: multiply,
  divide: divide,
};

main.js

const add = require('./calc.js').add;
const multiply = require('./calc.js').multiply;

console.log(multiply(add(1,2), add(2,3)); // 15

하면 됩니다. 객체를 만들어서 안에 내보내고 싶은 것들을 넣고 통째로 export하는 겁니다. require을 하게 되면 객체를 통째로 가져오기 때문에 따로 .add나 .multiply로 속성에 접근해야 합니다. 그런데 위와 비슷하지만 조금 다른 방법이 있습니다. 바로 exports 객체를 사용하는 방법입니다.

calc.js

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

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

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

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

main.js는 이전과 같습니다. exports를 사용해 따로따로 추가할 수 있습니다. 사실 exports는 module.exports와 같습니다. 참조 관계이기 때문이죠. 하지만 주로 module.exports는 한 번에 export할 때 사용하고, exports는 여러 개의 객체를 따로 export할 때 사용합니다. 문법적 특성 때문입니다.

주의해야 할 점은 exports 자체에는 절대로 다른 값을 대입하면 안 된다는 겁니다. 항상 exports 객체의 속성에 값을 넣어주어야 합니다.

exports = divide;

이렇게 하는 순간 더는 모듈로 기능하지 않습니다. exports는 module.exports참조하고 있는데 다른 것을 대입해버리면 참조 관계가 깨지기 때문이죠. exports는 속성으로 추가할 때만 사용해야 합니다.

ES2015는 위와 개념은 비슷하지만 문법이 조금 달라졌습니다. 아쉽게도 Node.js에서는 ES2015 모듈은 사용하지 못 합니다. ES2015 모듈 시스템에 대해 알고싶으시면 이 강좌 를 참고하세요!

투표로 게시글에 관해 피드백을 해주시면 많은 도움이 됩니다. 오류가 있다면 어떤 부분에 오류가 있는지도 알려주세요! 잘못된 정보가 퍼져나가지 않도록 도와주세요.
Copyright © 2016- 무단 전재 및 재배포 금지

댓글

3개의 댓글이 있습니다.
2달 전
안녕하세요?
앞으로 express로 조그만한 개인 프로젝트 해볼 생각입니다.
다른 웹 프레임워크들은 정형화된 mvc 패턴 구조가 있는데 express만의 자주 사용하는 mvc 패턴 구조가 있을까요?
찾아보니 express generator라는 것이 있는데 개인 사용자들뿐만 아니라 기업에서도 사용하는지 궁금합니다.
감사합니다.
2달 전
익스프레스는 그냥 노드하는 사람은 거의 다 쓴다고 보시면 됩니다. 코아랑 하피도 있는데 거의 안 쓰고요. 구조는 워낙 자유라 정해진 건 없지만 제너레이터 구조 많이 씁니다.
일 년 전
마지막까지 잘봤습니다 ㅎㅎ 기사시험이랑 하느라 시간이좀 걸렸네여 ㅎ
일 년 전
node.js 강좌는 여기가 마지막인가요?
일 년 전
더 써야 하는데 소재 고갈이네요 ㅠㅠ 어떤 게 더 있을까요