TIL

23/11/21 TIL __ ESM๊ณผ CommonJs ์ฐจ์ด ๋ฐ ESM๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ ์‹คํŒจ.

GABOJOK 2023. 11. 22. 00:02

 

 

๐Ÿฃ์ƒํ™ฉ

 

์˜ค๋Š˜๋ถ€ํ„ฐ ๋‰ด์Šคํ”ผ๋“œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๋‹ค.

์ฒซ๋‚ ์ด๋ผ ์ดˆ๊ธฐ ์…‹ํŒ…๊ณผ ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ํšŒ์˜๋ฅผ ์˜ค๋ž˜ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ,

์ง€๋‚œ๋ฒˆ ๊ณผ์ œ๋“ค์—์„œ require๋ฅผ ์ด์šฉํ•ด express์™€ sequelize ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—,

์ด๋ฒˆ ๊ณผ์ œ์—์„œ๋Š” ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ด ๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค.

 

 

 

 

๐Ÿฃ์•ก์…˜

 

๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ–‰๋™์„ ํ–ˆ๋‹ค.

  1. package.json ํŒŒ์ผ์— type:module ์„ ์„ค์ •ํ–ˆ๋‹ค.
  2. index.json ํŒŒ์ผ์— ์žˆ๋Š” require ๋กœ ์‚ฌ์šฉํ•œ ์• ๋“ค์„ ๋ชจ๋‘  export๋กœ ๋ฐ”๊ฟจ๋‹ค. 
  3. config.json ํŒŒ์ผ์—์„œ dotenv๋ฅผ ๊ฐ€์ ธ์˜ฌ๋•Œ export๋กœ ๊ฐ€์ ธ์™€ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค.
  4. config.js ํŒŒ์ผ๋กœ ํŒŒ์ผ ํ˜•์‹์„ ๋ฐ”๊พผ ๋’ค์—, ์•ˆ์— ๋‚ด์šฉ๋ฌผ์„ js ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ์˜ˆ์ƒ๊ณผ ๋‹ฌ๋ฆฌ DB๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์•˜๋‹ค. 

npx sequelize db:create

 

 

 

๊ตฌ๊ธ€ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์ฝ”๋“œ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ดค์ง€๋งŒ, ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜๋‹ค. 

์‹œํ€„๋ผ์ด์ฆˆ์—์„œ๋Š” module์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๊ฑธ๊นŒ? 

์•„๋ž˜์˜ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋งŒ ๋‚ด๋ฟœ๊ณ  ์žˆ์—ˆ๋‹ค.

 

 

ERROR: Error reading "config/config.cjs". Error: Error [ERR_MODULE_NOT_FOUND]: Cannot find module

 

 

๊ณต์‹๋ฌธ์„œ์—์„œ๋Š” ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ„์ „์— ํ•ด๋‹นํ•˜๋Š” 6 ๋ฒ„์ „์— ๋Œ€ํ•œ ์˜ˆ์ œ๋ฅผ require๋ฅผ ํ†ตํ•ด ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์—ˆ๋‹ค.

๊ทธ๋ ‡์ง€๋งŒ ๋‹ค๋ฅธ ๋™๊ธฐ๋ถ„๋“ค์ค‘  module๋กœ ๋ฐ”๊พธ์‹  ๋ถ„์ด ๊ณ„์‹œ๋‹ค๋Š”๊ฑธ ์•Œ๊ณ  ์žˆ์—ˆ๊ธฐ์— ๋ถ„๋ช… ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

 

ํ•ด๋‹น ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฒ€์ƒ‰ํ•˜๋˜ ์ค‘, ESM ๋ฐฉ์‹๊ณผ CJS ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ฐจ์ด๋ฅผ ์ œ๋Œ€๋กœ ๋ชจ๋ฅด๊ณ  ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. 

๊ทธ๋Ÿฌ๋‹ค ์ข‹์€ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ด์„œ ์ข€๋” ์ •๋ฆฌ๊ฐ€ ๋˜์—ˆ๋Š”๋ฐ, (ํ•ด๊ฒฐ์€ ๋ชปํ–ˆ์ง€๋งŒ ๊ณต๋ถ€๋Š” ๋˜์—ˆ๋‹ค.)

 

๐Ÿš  ESM ๋ฐฉ์‹, CJS ๋ฐฉ์‹

  • CJS ๋ฐฉ์‹์—์„œ require()์€ ๋™๊ธฐ์  ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. 
  • ESM ๋ฐฉ์‹์—์„œ๋Š” ๋น„๋™๊ธฐ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•œ๋‹ค.
  • (ํŒŒ์ผ์„ ๋น„๋™๊ธฐ๋กœ ๋‹ค์šด ๋ฐ ํŒŒ์‹ฑ ํ›„, import๋œ ์Šคํฌ๋ฆฝํŠธ ๊ฐ€์ ธ์˜จ ํ›„_๋ณ‘๋ ฌ๋‹ค์šด๋กœ๋“œ, ์ค€๋น„ ์™„๋ฃŒ๋˜๋ฉด ์‹คํ–‰ํ•œ๋‹ค._์ˆœ์ฐจ์  ์‹คํ–‰ )
  • CJS๋Š” ์—ฌ์ „ํžˆ ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.
  • ESM ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, .mjs๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜, 'type: module'์„ ์„ค์ •ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

 

 

์ฐธ๊ณ ํ•œ ์‚ฌ์ดํŠธ 

https://yceffort.kr/2020/08/commonjs-esmodules

 

CommonJS์™€ ES Modules์€ ์™œ ํ•จ๊ป˜ ํ•  ์ˆ˜ ์—†๋Š”๊ฐ€?

๋…ธ๋“œ14 ์—์„œ๋Š” ์˜›๋‚  ์Šคํƒ€์ผ์˜ CommonJS์™€ (์ดํ•˜ CJS) ์ƒˆ๋กœ์šด ์Šคํƒ€์ผ์˜ ESM Scripts (์ดํ•˜ MJS) ๋‘๊ฐœ๊ฐ€ ๊ณต์กดํ•˜๊ณ  ์žˆ๋‹ค. CJS์˜ ๊ฒฝ์šฐ require()์™€ module.exports๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ESM์€ import์™€ export๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ESM๊ณผ CJS๋Š”

yceffort.kr

 

๊ทธ๋Ÿฌ๋‹ค ๋“œ๋””์–ด ์ž‘๋™ํ–ˆ๋Š”๋ฐ,,,,

์‚ฌ์‹ค ํ•ด๊ฒฐ์„ ํ•œ๊ฒŒ ์•„๋‹ˆ์˜€๋‹ค.  

 

 

๐Ÿš   babel-register

babel-register

 

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค.

.js ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ .cjs ํŒŒ์ผ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

import๋กœ ํ•œ ํŒŒ์ผ๋“ค์„ ๋ชจ๋‘ require๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

 

๊ทธ๋Ÿฌ์ž... ์ž‘๋™์ด ์‹œ์ž‘ํ–ˆ๋‹ค..

๊ทธ์น˜๋งŒ ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์—†์—ˆ๋‹ค.

์ € ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค๋Š” ๋™๊ธฐ์˜ ์กฐ์–ธ์œผ๋กœ ์ผ๋‹จ ์‹œ๋„ํ•ด๋ณธ ๋ฐฉ๋ฒ•์ด์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•œ ์ด์œ ๊ฐ€ ์•Œ๊ณ ์‹ถ์–ด, ๋‹ค์‹œ ๊ฒ€์ƒ‰์„ ์‹œ์ž‘ํ–ˆ๋‹ค.

๋„๋Œ€์ฒด ์ € ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š” ์• ์ผ๊นŒ?

 

 

๊ฐœ๋…์„ ์ž˜ ์„ค๋ช…ํ•ด์ฃผ๋Š” ์ฐฉํ•œ GPT์—๊ฒŒ ๋ฌผ์–ด๋ดค๋”๋‹ˆ ๋‹ต๋ณ€์€ ์ด๋žฌ๋‹ค.

 

  • Babel์„ ์‚ฌ์šฉํ•ด ES6 ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ ๋„์›€์„ ์ฃผ๋Š” ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
  • node ์—์„œ ES6 ๋ชจ๋“ˆ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์—์„œ๋„ ํ•ด๋‹น ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

์ฆ‰.. 

module ๋กœ ์ž‘์„ฑํ–ˆ์ง€๋งŒ ์ € babel-register ๋ผ๋Š” ์• ๊ฐ€ ๋‹ค์‹œ CJS ๋กœ ๋ณ€๊ฒฝ์„ ํ•ด์ค€๋‹ค๋Š” ๋ง์ด๋‹ค..

๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ์“ธ๊ฑฐ๋ฉด ์˜๋ฏธ๊ฐ€ ์—†๋Š”๋“ฏ ๋Š๊ปด์กŒ๋‹ค..

์™œ๋ƒ๋ฉด module ์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ–ˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

 

๊ทธ๋Ÿฐ๋ฐ, ๋‹ค๋ฅธ ๋™๊ธฐ๋ถ„์—๊ฒŒ ์ด ์ƒํ™ฉ์„ ๋ง์”€๋“œ๋ฆฌ๋‹ˆ, babel-register ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ module๋กœ ์‚ฌ์šฉํ•˜์…จ๊ธธ๋ž˜

๋‹ค์‹œ ๊ถ๊ธˆ์ฆ์ด ์‹œ์ž‘๋˜์—ˆ๋‹ค.

๋ญ๊ฐ€ ๋‹ค๋ฅธ๊ฑธ๊นŒ ์‹ถ์–ด์„œ, ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ์ฃผ์‹ค ์ˆ˜ ์žˆ๋ƒ๊ณ  ์—ฌ์ญค๋ดค๊ณ , ํ”์พŒํžˆ ๋ณด์—ฌ์ฃผ์…ง๋‹ค.

์‹œํ€„๋ผ์ด์ฆˆ ๋ฒ„์ „๋„ ๋™์ผํ–ˆ๊ณ , ์ •๋ง  babel-register ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ๋„ ์ž‘๋™ํ–ˆ๋‹ค.

 

์ด์œ ๊ฐ€ ๊ถ๊ธˆํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๋‚ด vsCode ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ ํ•ด๋ดค๋‹ค. 

๊ทธ๋Ÿฐ๋ฐ...?! ์ž‘๋™ํ•˜์ง€ ์•Š์•˜๋‹ค.

์˜์‹ฌ๊ฐ€๋Š” ๋ถ€๋ถ„์ด ์ƒ๊ฒผ๋‹ค. ๋ฒ„์ „์ฐจ์ด 

 

์ž‘๋™ํ•œ ์ฝ”๋“œ์™€ ๋™์ผํ•˜๊ณ , ์…‹ํŒ…๋„ ๋™์ผํ•œ๋ฐ, ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š”๊ฑด

๋ฒ„์ „ ์ฐจ์ด์ผ ํ™•๋ฅ ์ด ์ปค๋ณด์˜€๋‹ค.

๊ทธ๋ž˜์„œ node ํ™˜๊ฒฝ์„ ์—ฌ์ญค๋ณด๋‹ˆ 16๋ฒ„์ „์„ ์ด์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

๋‚˜์˜ node ํ™˜๊ฒฝ์€ 20๋ฒ„์ „์ด์˜€๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ฒ€์ฆ์„ ์œ„ํ•ด์„œ๋Š” ๋ฒ„์ „์„ ๋‚ฎ์ถฐ์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ด์•ผ ํ–ˆ์ง€๋งŒ, 

ํŒ€ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์„ ์œ„ํ•ด ๋” ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด ๊ฒ€์ฆํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

 

๋‚ด์ผ module์„ ์‚ฌ์šฉํ•˜์‹  ๋‹ค๋ฅธ ๋ถ„์—๊ฒŒ ์‚ฌ์šฉํ•œ node์˜ ๋ฒ„์ „ ๋ฐ ์ฝ”๋“œ๋ฅผ ๋น„๊ตํ•ด ๋ด์•ผ๊ฒ ๋‹ค.