[Node.js] require( ) & module.exports ๐Ÿ’ฏ๏ธ

jungeundelilahLEEยท2020๋…„ 12์›” 17์ผ
0

Node.js

๋ชฉ๋ก ๋ณด๊ธฐ
7/27

goal

  • module์‚ฌ์šฉ๋ฒ• ์ตํžˆ๊ธฐ
  • require๋™์ž‘์›๋ฆฌ ์ตํžˆ๊ธฐ
  • exports์™€ module.exports์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ

Node.js์— ๋Œ€ํ•ด์„œ (๊ฐ„๋‹จํ•˜๊ฒŒ>_<)

  • node.js๋Š” Server-side-Javascript. node.js๋กœ ๋ฐฑ์—”๋“œ ์˜์—ญ์—์„œ๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” ๋ชจ๋“ˆ ๊ธฐ๋Šฅ์ด ์—†๋Š”๋ฐ, node.js๋Š” ๋ชจ๋“ˆ๊ธฐ๋Šฅ์„ ํƒ‘์žฌํ•˜์—ฌ, ๋งค์šฐ ์œ ์šฉํ•œ ๋ชจ๋“ˆ๋“ค์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋Œ์–ด๋‹ค ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ, npm์„ ํ†ตํ•ด ๊ฐ„๋‹จํžˆ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
  • Node.js๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์˜ ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด๋‹ค.
  • ๊ธฐ์กด์˜ ์„œ๋ฒ„๋Š” thread ๊ธฐ๋ฐ˜์˜ ๋™๊ธฐ ๋ฐฉ์‹ / ์ž‘์—… ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค, thread๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค์–ด์„œ ๋™์‹œ์— ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ๋น„๋™๊ธฐ๋ฐฉ์‹์€ ์š”์ฒญํ•œ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•˜๋Š” thread๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋‚˜, ์‚ฌ์šฉ๋Ÿ‰์— ๋ณ€ํ™”๋ฅผ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

1. node.js module ์‚ฌ์šฉ๋ฒ• ๐Ÿ’ฏ๏ธ

  • node.js๋Š” ๋งŽ์€ ๋ถ€๋ถ„์˜ API๊ฐ€ ๋น„๋™๊ธฐ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค.
  • module index ๊ณตํ™ˆ ์ฐธ๊ณ 
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” <script>ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ ํ•„์š”ํ•œ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์™”๋‹ค๋ฉด, node.js์—์„œ๋Š” js์ฝ”๋“œ ๊ฐ€์žฅ ์œ„์— require์„ ์ด์šฉํ•ด์„œ ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
    • const fs = require('fs') // 'ํŒŒ์ผ์‹œ์Šคํ…œ' ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค
    • fs.readFile ์ฒ˜๋Ÿผ ๊ด€๋ จ๋œ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • npm์„ ํ†ตํ•ด์„œ ํ•ด๋‹น ๋ชจ๋“ˆ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
    • $ npm install ๐Ÿค”๏ธ

require( )

  • node.js์—์„œ๋Š” ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด์„œ require('๋ชจ๋“ˆ๋ช…') ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋„ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ๋กœ ์ธ์‹ํ•œ๋‹ค.
    • ๋ชจ๋“ˆ์˜ ํ™•์žฅ์ž๋Š” ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
  • require๋Š” object๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. = require๋กœ ๋ถˆ๋Ÿฌ์˜จ ๋ชจ๋“ˆ์€ ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.
  • require() ๋Š” module.exports๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
  • exports๋Š” module.exports๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
  • ์ธ์ˆ˜๋กœ ํŒŒ์ผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • node.js์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“ˆ์„ ๋กœ๋”ฉํ•  ๋•Œ๋Š” path๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • npm์„ ํ†ตํ•ด์„œ ์„ค์น˜ํ•œ ์™ธ๋ถ€ ํŒจํ‚ค์ง€ ๋ชจ๋“ˆ๋„ path๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • ์ด์™ธ์˜ ํŒŒ์ผ๋ชจ๋“ˆ๋“ค์€ path๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.
  • require("์ด ์•ˆ์— string type์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค")ํ•จ์ˆ˜์˜ ์†Œ์Šค์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. (์ฐธ๊ณ ๋งŒ)
// test.js
const foo = require('./foo.js');  // = require('./foo')
console.log(foo.a) // ?
-------------------------------------
// foo.js
const a = 100;
exports.a = a;
-------------------------------------
// test.js ์—์„œ require์˜ ์‹คํ–‰ ์ˆœ์„œ
var require = function('./foo.js'){                 
var fileAsStr = readFile('./foo.js')           
var module.exports = {}                   
eval(fileAsStr) // ๐Ÿ‘‡๏ธ์•„๋ž˜์™€ ๊ฐ™์€ ์ž‘์—…์„ ์‹คํ–‰๐Ÿ‘‡๏ธ
  // ์˜ˆ) foo.jsํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ์—ฌ๊ธฐ์— ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ 
  const a = 100;
  exports.a = a; // exports๊ฐ์ฒด์—(ํ˜„์žฌ ๋นˆ ๊ฐ์ฒด) ํ‚ค ๊ฐ’์€ a, ๋ฒจ๋ฅ˜ ๊ฐ’์€ 100 ํ• ๋‹น
return module.exports
}
-------------------------------------
// foo.js ์˜ ๋Ÿฐํƒ€์ž„
const foo = {a: 100};
console.log(foo.a) // 100
// exports์— ์‚ฝ์ž…๋œ ์†์„ฑ๋“ค์ด require() ํ•จ์ˆ˜์˜ output

exports & module.exports

  • module.exports์™€ exports๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ”๋ผ๋ณธ๋‹ค.
  • exports๋Š” ๋‹จ์ˆœํ•˜๊ฒŒ module.exports๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
    let exports = module.exports = { }
    • ๋˜‘๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰์— exportsํ•œ ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค.
    • ๊ฐ์ฒด๋Š” ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค
  • exports๊ฐ์ฒด๋Š” ํ”„๋กœํผํ‹ฐ or ๋ฉ”์†Œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, module.exports์—๋Š” ํ•˜๋‚˜์˜ ๊ฐ’(์›์‹œํƒ€์ž…, ํ•จ์ˆ˜, ๊ฐ์ฒด)์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.
const { PI } = Math;
exports.area = (r) => PI * r * r;
exports.circumference = (r) => 2 * PI * r;
-----------------------------------------------
const { PI } = Math;
module.exports = function (r) {
  return {
    area() { return PI * r * r; },
    circumference() { return 2 * PI * r}
  };

url ๋ชจ๋“ˆ ์˜ˆ์‹œ (๋‹ค์Œ ์˜ํ™”)

// bar.js
// ํ„ฐ๋ฏธ๋„
// url ๊ตฌ์กฐ ๋ฅผ ๋ณด๋ฉด์„œ ํŒŒ์‹ฑ๋œ url๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

profile
delilah's journey

0๊ฐœ์˜ ๋Œ“๊ธ€