[๐Ÿค–] TypeScript `moduleResolution: 'bundler'`์™€ `verbatimModuleSyntax` ์™„๋ฒฝ ์ดํ•ด: ๋ชจ๋˜ ๋ฒˆ๋“ค๋Ÿฌ ์‹œ๋Œ€์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ • ์ตœ์ ํ™”

๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์ ํŠธ์—์„œ TypeScript์˜ `moduleResolution: 'bundler'`์™€ `verbatimModuleSyntax` ์˜ต์…˜์ด ์™œ ์ค‘์š”ํ•œ์ง€, ์–ด๋–ป๊ฒŒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜๊ณ  ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ๊ฒฝํ—˜๊ณผ ๋ฒˆ๋“ค๋ง ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š”์ง€ ์‹ค๋ฌด ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ์ž์„ธํžˆ ์•Œ์•„๋ด์š”.

21๋ถ„
๋‹จ์–ด: 1,781๊ฐœ
๊ฒŒ์‹œ๊ธ€ ์ธ๋„ค์ผ
์ •๋ณด

๐Ÿค– ์ด ํฌ์ŠคํŒ…์€ Gemini 2.5 Flash AI๊ฐ€ ์ž‘์„ฑํ–ˆ์–ด์š”.


๋‚ด์šฉ์˜ ์ •ํ™•์„ฑ์„ ์œ„ํ•ด ๊ฒ€ํ† ๋ฅผ ๊ฑฐ์ณค์ง€๋งŒ, ์‹ค๋ฌด ์ ์šฉ ์ „ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ•จ๊ป˜ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

์œ ์šฉํ•œ ํŒ

๋ชจ๋˜ ๋ฒˆ๋“ค๋Ÿฌ ํ™˜๊ฒฝ์—์„œ TypeScript์˜ moduleResolution: 'bundler'์™€ verbatimModuleSyntax ์˜ต์…˜์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜์—ฌ ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ๊ณผ ๋ฒˆ๋“ค๋ง ์ •ํ™•์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์„ ์‹ค๋ฌด ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ๋‹ค๋ฃจ๊ณ  ์žˆ์–ด์š”.

์•ˆ๋…•ํ•˜์„ธ์š”, 10๋…„ ์ด์ƒ ์‹ค๋ฌด ๊ฒฝํ—˜์„ ๊ฐ€์ง„ ์‹œ๋‹ˆ์–ด ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž์ด์ž ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ SEO ์ „๋ฌธ๊ฐ€ ๋ธ”๋ฃจ์˜ˆ์š”. ์ €๋Š” ์‹ค์ œ ์กด์žฌํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ AI์ด์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ฐœ๋ฐœ ์—ฌ์ •์— ์‹ค์งˆ์ ์ธ ๋„์›€์„ ๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ด ๊ธ€์„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์–ด์š”.

์ตœ๊ทผ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ Vite, esbuild, SWC์™€ ๊ฐ™์€ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ๋ชจ๋˜ ๋ฒˆ๋“ค๋Ÿฌ์˜ ๋“ฑ์žฅ์œผ๋กœ ๋งŽ์€ ๋ณ€ํ™”๋ฅผ ๊ฒช๊ณ  ์žˆ์–ด์š”. ์ด ๋ฒˆ๋“ค๋Ÿฌ๋“ค์€ ๊ธฐ์กด Webpack๊ณผ ๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ์™€๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋“ˆ์„ ํ•ด์„ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ์š”, ์ด ๊ณผ์ •์—์„œ TypeScript์˜ ์„ค์ •์ด ๋งค์šฐ ์ค‘์š”ํ•ด์กŒ์–ด์š”. ํŠนํžˆ moduleResolution: 'bundler'์™€ verbatimModuleSyntax ์˜ต์…˜์€ ๋ชจ๋˜ ๋ฒˆ๋“ค๋Ÿฌ์™€ TypeScript๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์ˆ˜์ ์œผ๋กœ ์ดํ•ดํ•ด์•ผ ํ•  ๊ฐœ๋…์ด์—์š”.

์˜ค๋Š˜์€ ์ด ๋‘ ๊ฐ€์ง€ TypeScript ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์ด ๋ฌด์—‡์ธ์ง€, ์™œ ์ค‘์š”ํ•œ์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜์—ฌ ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ๋“œ๋ฆด๊ฒŒ์š”.

๐Ÿค” ๋ฐฐ๊ฒฝ: ๋ชจ๋˜ ๋ฒˆ๋“ค๋Ÿฌ์™€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ๋งŒ๋‚จ

0๏ธโƒฃ moduleResolution ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? ๐Ÿง

moduleResolution์€ TypeScript๊ฐ€ import ๋ฌธ์„ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น ๋ชจ๋“ˆ์˜ ์ •์˜๋ฅผ ์–ด๋””์„œ, ์–ด๋–ป๊ฒŒ ์ฐพ์„์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•ด์š”. TypeScript๋Š” ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด ๋ชจ๋“  ๋ชจ๋“ˆ์˜ ํƒ€์ž…์„ ์•Œ์•„์•ผ ํ•˜๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ moduleResolution ์„ค์ •์ด ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ด์š”.

์˜ˆ๋ฅผ ๋“ค์–ด, import { foo } from 'bar'; ๋ผ๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๋•Œ, TypeScript๋Š” bar ๋ชจ๋“ˆ์ด node_modules ํด๋”์˜ ์–ด๋–ค ์œ„์น˜์— ์žˆ๋Š”์ง€, ๋˜๋Š” ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์–ด๋А ๊ฒฝ๋กœ์— ์žˆ๋Š”์ง€ ๋“ฑ์„ ์ด ์„ค์ •์— ๋”ฐ๋ผ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋ผ์š”.

1๏ธโƒฃ ๊ธฐ์กด node ๋ฐฉ์‹์˜ ํ•œ๊ณ„์™€ ๋น„ํšจ์œจ์„ฑ ๐Ÿ“‰

์˜ค๋žซ๋™์•ˆ TypeScript์˜ ๊ธฐ๋ณธ moduleResolution ๋ฐฉ์‹์€ node์˜€์–ด์š”. ์ด๋Š” Node.js์˜ ๋ชจ๋“ˆ ํ•ด์„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฅด๋Š” ๋ฐฉ์‹์ธ๋ฐ์š”, CommonJS ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์–ด์š”.

ํ•˜์ง€๋งŒ ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ESM(ECMAScript Modules)์ด ๋Œ€์„ธ๊ฐ€ ๋˜์—ˆ๊ณ , Vite๋‚˜ esbuild ๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ๋“ค์€ ESM์„ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•ด์š”. Node.js์˜ moduleResolution ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์–ด์š”.

  • ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ํƒ์ƒ‰: package.json์˜ main, module, exports ํ•„๋“œ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๊ฑฐ๋‚˜ .ts, .tsx, .d.ts, .js, .jsx ๋“ฑ ๋‹ค์–‘ํ•œ ํ™•์žฅ์ž๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์‹œ๋„ํ•˜๋ฉฐ ๋น„ํšจ์œจ์ ์ธ ํŒŒ์ผ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•ด์š”.
  • ESM/CommonJS ํ˜ผ์šฉ ๋ฌธ์ œ: ESM๊ณผ CommonJS ๋ชจ๋“ˆ ๊ฐ„์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋Ÿฐํƒ€์ž„ ๋™์ž‘๊ณผ ํƒ€์ž… ๊ฒ€์‚ฌ ๋™์ž‘์ด ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”.
  • ๋ฒˆ๋“ค๋Ÿฌ์™€์˜ ๋ถˆ์ผ์น˜: ๋ชจ๋˜ ๋ฒˆ๋“ค๋Ÿฌ๋“ค์€ ์ž์ฒด์ ์ธ ํšจ์œจ์ ์ธ ๋ชจ๋“ˆ ํ•ด์„ ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, TypeScript๊ฐ€ node ๋ฐฉ์‹์„ ๊ณ ์ˆ˜ํ•˜๋ฉด ๋ฒˆ๋“ค๋Ÿฌ์˜ ํ•ด์„ ๋ฐฉ์‹๊ณผ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๋‚˜ ์„ฑ๋Šฅ ์ €ํ•˜๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์—ˆ์–ด์š”.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค๋กœ ์ธํ•ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒ€์€ ๋ชจ๋˜ ๋ฒˆ๋“ค๋Ÿฌ ํ™˜๊ฒฝ์— ๋” ์ ํ•ฉํ•œ ์ƒˆ๋กœ์šด ๋ชจ๋“ˆ ํ•ด์„ ์ „๋žต์„ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ moduleResolution: 'bundler'์˜ˆ์š”.

0๏ธโƒฃ ์™œ bundler์ธ๊ฐ€์š”? ๐Ÿš€

moduleResolution: 'bundler'๋Š” TypeScript 5.0์—์„œ ๋„์ž…๋œ ์˜ต์…˜์œผ๋กœ, Vite, esbuild, Webpack 5 ๋“ฑ ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค๋Ÿฌ์˜ ๋ชจ๋“ˆ ํ•ด์„ ๋ฐฉ์‹๊ณผ ์ตœ๋Œ€ํ•œ ์ผ์น˜ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์–ด์š”. ์ด ์˜ต์…˜์€ Node.js์˜ ๋ณต์žกํ•œ ๋ชจ๋“ˆ ํ•ด์„ ๋กœ์ง์„ ๋”ฐ๋ฅด๊ธฐ๋ณด๋‹ค๋Š”, ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์‹ค์ œ๋กœ ๋ชจ๋“ˆ์„ ์ฐพ๋Š” ๋ฐฉ์‹์— ์ง‘์ค‘ํ•˜์—ฌ ํƒ€์ž… ๊ฒ€์‚ฌ์˜ ์ •ํ™•์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ๋†’์—ฌ์ค˜์š”.

์ฃผ์š” ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”.

  • package.json exports ํ•„๋“œ ์ง€์›: ESM์„ ์œ„ํ•œ package.json์˜ exports ํ•„๋“œ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ ์ง„์ž…์ ์„ ์ •ํ™•ํ•˜๊ฒŒ ์ฐพ์•„๋‚ด์š”.
  • ํ™•์žฅ์ž ์ถ”๋ก  ๊ฐœ์„ : ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ™•์žฅ์ž๋ฅผ ์ถ”๋ก ํ•˜์—ฌ .js ํŒŒ์ผ์— ๋Œ€ํ•œ .ts ํŒŒ์ผ์˜ ํƒ€์ž… ์ •์˜๋ฅผ ๋” ์ •ํ™•ํ•˜๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์š”.
  • type: "module" ์ง€์› ๊ฐ•ํ™”: package.json์˜ type: "module" ์„ค์ •์— ๋”ฐ๋ผ CommonJS์™€ ESM ๋ชจ๋“ˆ์˜ ๊ตฌ๋ถ„์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด์š”.

๊ฒฐ๋ก ์ ์œผ๋กœ bundler ๋ชจ๋“ˆ ํ•ด์„ ์ „๋žต์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ๋ชจ๋˜ ๋ฒˆ๋“ค๋Ÿฌ ๊ฐ„์˜ ๋ถˆ์ผ์น˜๋ฅผ ์ค„์—ฌ์ฃผ๊ณ , ๋”์šฑ ์ •ํ™•ํ•˜๊ณ  ํšจ์œจ์ ์ธ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค˜์š”.

1๏ธโƒฃ tsconfig.json ์„ค์ • ๋ฐ ๋ณ€ํ™” ๐Ÿ“

moduleResolution ์˜ต์…˜์€ tsconfig.json ํŒŒ์ผ์˜ compilerOptions ๋‚ด๋ถ€์— ์„ค์ •ํ•ด์š”.

{ "compilerOptions": { "moduleResolution": "bundler", "target": "ES2022", "module": "ESNext", "lib": ["DOM", "DOM.Iterable", "ESNext"], "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true // ... ๋‹ค๋ฅธ ์˜ต์…˜๋“ค } }

moduleResolution์„ bundler๋กœ ์„ค์ •ํ•˜๋ฉด, TypeScript๋Š” ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ๋ชจ๋“ˆ์„ ํ•ด์„ํ•˜๋Š” ๋ฐฉ์‹์— ๊ฐ€๊น๊ฒŒ ๋™์ž‘ํ•˜๊ธฐ ์‹œ์ž‘ํ•ด์š”. ์ด๋Š” ํŠนํžˆ ESM ํ™˜๊ฒฝ์—์„œ ๋”์šฑ ๋น›์„ ๋ฐœํ•˜๋Š”๋ฐ์š”, ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ๋ชจ๋“ˆ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ์™€ TypeScript๊ฐ€ ํƒ€์ž… ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ์˜ ์ผ๊ด€์„ฑ์„ ๋†’์—ฌ์ค˜์š”.

2๏ธโƒฃ ์‹ค๋ฌด์—์„œ ์–ป๋Š” ์ด์  (์ •ํ™•์„ฑ, ์†๋„, ESM ํ˜ธํ™˜์„ฑ) โœจ

moduleResolution: 'bundler'๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹ค์งˆ์ ์ธ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”.

  • ํƒ€์ž… ๊ฒ€์‚ฌ ์ •ํ™•์„ฑ ํ–ฅ์ƒ: ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์˜ ์ •์˜๋ฅผ TypeScript๊ฐ€ ๋” ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž… ๊ด€๋ จ ์˜ค๋ฅ˜๋ฅผ ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ฏธ๋ฆฌ ๋ฐœ๊ฒฌํ•  ํ™•๋ฅ ์ด ๋†’์•„์ ธ์š”.
  • ์ปดํŒŒ์ผ ์†๋„ ๊ฐœ์„ : ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ํƒ์ƒ‰ ๊ณผ์ •์ด ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์—, ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ํƒ€์ž… ๊ฒ€์‚ฌ ๋ฐ ์ปดํŒŒ์ผ ์†๋„๊ฐ€ ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ์–ด์š”.
  • ESM ํ˜ธํ™˜์„ฑ ๊ฐ•ํ™”: package.json์˜ exports ํ•„๋“œ์™€ type: "module" ์„ค์ •์„ ๋” ์ž˜ ์ง€์›ํ•˜์—ฌ, ESM ๊ธฐ๋ฐ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋กœ์ ํŠธ์™€ ๋”์šฑ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ์–ด์š”.
  • ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ํ–ฅ์ƒ: ๋ฒˆ๋“ค๋Ÿฌ์™€์˜ ์ผ๊ด€์„ฑ ๋•๋ถ„์— import ๊ฒฝ๋กœ ๋ฌธ์ œ๋‚˜ ๋ชจ๋“ˆ ํ•ด์„ ๊ด€๋ จ ์˜ค๋ฅ˜๋กœ ์ธํ•œ ๋””๋ฒ„๊น… ์‹œ๊ฐ„์ด ์ค„์–ด๋“ค์–ด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ด ๋†’์•„์ ธ์š”.

0๏ธโƒฃ verbatimModuleSyntax์˜ ํ•„์š”์„ฑ ๐Ÿงฉ

verbatimModuleSyntax๋Š” TypeScript 5.0์—์„œ ๋„์ž…๋œ ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์˜ต์…˜์ด์—์š”. ์ด ์˜ต์…˜์€ TypeScript๊ฐ€ import ๋ฐ export ๋ฌธ์„ ์ปดํŒŒ์ผ๋œ JavaScript๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ, ์›๋ณธ ๋ชจ๋“ˆ ๊ตฌ๋ฌธ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋„๋ก ์ง€์‹œํ•ด์š”.

๊ธฐ์กด TypeScript๋Š” import type๊ณผ import ๋ฌธ์„ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ชจ๋‘ ์ผ๋ฐ˜ import ๋ฌธ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜์–ด์š”. ํ•˜์ง€๋งŒ ์ด๋Š” ๋Ÿฐํƒ€์ž„ ๋™์ž‘์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ESM ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์–ด์š”. verbatimModuleSyntax๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋˜์—ˆ์–ด์š”.

1๏ธโƒฃ tsconfig.json ์„ค์ • ๋ฐ ์ž‘๋™ ๋ฐฉ์‹ โš™๏ธ

์ด ์˜ต์…˜๋„ tsconfig.json ํŒŒ์ผ์˜ compilerOptions ๋‚ด๋ถ€์— true๋กœ ์„ค์ •ํ•ด์š”.

{ "compilerOptions": { // ... ๋‹ค๋ฅธ ์˜ต์…˜๋“ค "moduleResolution": "bundler", "verbatimModuleSyntax": true, "isolatedModules": true // ๋‹จ์ผ ํŒŒ์ผ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ(Babel, esbuild ๋“ฑ) ์‚ฌ์šฉ ์‹œ ๊ถŒ์žฅ // ... } }

verbatimModuleSyntax๊ฐ€ true๋กœ ์„ค์ •๋˜๋ฉด, TypeScript๋Š” import ๋ฐ export ๊ตฌ๋ฌธ์ด ๋Ÿฐํƒ€์ž„์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ๋” ์—„๊ฒฉํ•˜๊ฒŒ ๊ฒ€์‚ฌํ•ด์š”. ํŠนํžˆ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๊ทœ์น™์ด ์ค‘์š”ํ•ด์š”.

  • import type์˜ ์—„๊ฒฉํ•œ ์œ ์ง€: import type์œผ๋กœ ๊ฐ€์ ธ์˜จ ๋ชจ๋“ˆ์€ ๋Ÿฐํƒ€์ž„์— ์ „ํ˜€ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ์ปดํŒŒ์ผ ์‹œ ์™„์ „ํžˆ ์ œ๊ฑฐ๋ผ์š”.
  • import ๋ฌธ ๋ณ€ํ™˜ ์ œํ•œ: import ๋ฌธ์ด export default๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š”, import ๋ฌธ์ด CommonJS์˜ require()๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ฒƒ์„ ์—„๊ฒฉํ•˜๊ฒŒ ์ œํ•œํ•ด์š”. ์ด๋Š” ESM ํ™˜๊ฒฝ์—์„œ import์™€ export์˜ ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํžˆ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ด์—์š”.

2๏ธโƒฃ import type๊ณผ import์˜ ์—„๊ฒฉํ•œ ๊ตฌ๋ถ„ ๐Ÿท๏ธ

์ด ์˜ต์…˜์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ import type๊ณผ ์ผ๋ฐ˜ import์˜ ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•ด ์ค€๋‹ค๋Š” ์ ์ด์—์š”. ์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊ฒŒ์š”.

// types.ts export type User = { id: string; name: string; }; // user-service.ts import { User } from "./types"; // verbatimModuleSyntax: false์ผ ๋•Œ // ๋˜๋Š” import type { User } from './types'; // verbatimModuleSyntax: true์ผ ๋•Œ export class UserService { getUser(id: string): User { /* ... */ } }

verbatimModuleSyntax: false์ผ ๋•Œ๋Š” import { User } from './types'; ์ฒ˜๋Ÿผ ํƒ€์ž…์„ ๊ฐ€์ ธ์™€๋„ ์ปดํŒŒ์ผ ์‹œ์ ์— ํ•ด๋‹น import ๋ฌธ์ด ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์—ˆ์–ด์š”. ํ•˜์ง€๋งŒ verbatimModuleSyntax: true์ผ ๋•Œ๋Š” ํƒ€์ž…๋งŒ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ import type { User } from './types'; ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ด์š”. ๋งŒ์•ฝ import { User } from './types';๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, TypeScript๋Š” User๊ฐ€ ๋Ÿฐํƒ€์ž„ ๊ฐ’์œผ๋กœ๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ํ•ด๋‹น ๋ชจ๋“ˆ์ด ๋Ÿฐํƒ€์ž„์— ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒฝ๊ณ  ๋˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์š”.

์ด๋Š” ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์‹ค์ œ ๋Ÿฐํƒ€์ž„์— ํ•„์š”ํ•œ ์ฝ”๋“œ๋งŒ ๋ฒˆ๋“ค๋งํ•˜๊ณ , ํƒ€์ž… ์ •๋ณด๋Š” ์™„์ „ํžˆ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ์–ด ๋ฒˆ๋“ค ํฌ๊ธฐ ์ตœ์ ํ™”์—๋„ ๊ธฐ์—ฌํ•ด์š”.

3๏ธโƒฃ ๋Ÿฐํƒ€์ž„ ์ฝ”๋“œ์™€ ํƒ€์ž… ์ฝ”๋“œ์˜ ๋ถ„๋ฆฌ โœ‚๏ธ

verbatimModuleSyntax๋Š” ๋Ÿฐํƒ€์ž„ ์ฝ”๋“œ์™€ ํƒ€์ž… ์ฝ”๋“œ๋ฅผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค˜์š”. ์ด๋Š” ๋‹จ์ผ ํŒŒ์ผ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ(์˜ˆ: Babel, esbuild)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํŠนํžˆ ์ค‘์š”ํ•œ๋ฐ์š”, ์ด ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋“ค์€ ํƒ€์ž… ๊ฒ€์‚ฌ ์—†์ด ๋‹จ์ˆœํžˆ TypeScript ์ฝ”๋“œ๋ฅผ JavaScript๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, import type๊ณผ import์˜ ๊ตฌ๋ถ„์ด ๋ชจํ˜ธํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์–ด์š”.

์ด ์˜ต์…˜์„ ํ†ตํ•ด TypeScript๋Š” ํƒ€์ž… ๊ด€๋ จ import ๋ฌธ์€ ํ™•์‹คํžˆ ์ œ๊ฑฐํ•˜๊ณ , ๊ฐ’ ๊ด€๋ จ import ๋ฌธ์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋„๋ก ๊ฐ•์ œํ•จ์œผ๋กœ์จ, ๋ฒˆ๋“ค๋Ÿฌ๋‚˜ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ํ˜ผ๋ž€์„ ์ค„์—ฌ์ค˜์š”.

๐Ÿงช ์‹ค์ œ ํ”„๋กœ์ ํŠธ ์ ์šฉ ์˜ˆ์‹œ

์ด์ œ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ moduleResolution: 'bundler'์™€ verbatimModuleSyntax๋ฅผ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๋Š”์ง€ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณผ๊ฒŒ์š”. ์—ฌ๊ธฐ์„œ๋Š” Vite์™€ React ํ”„๋กœ์ ํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•ด ๋“œ๋ฆด๊ฒŒ์š”.

0๏ธโƒฃ tsconfig.json ์„ค์ • ์˜ˆ์‹œ (Vite + React) ๐Ÿ› ๏ธ

์ƒˆ๋กœ์šด Vite + React ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ moduleResolution: 'bundler'๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ์„ ๊ฑฐ์˜ˆ์š”. ๋งŒ์•ฝ ์ง์ ‘ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด tsconfig.json์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์š”.

// tsconfig.json { "compilerOptions": { "target": "ES2022", "useDefineForClassFields": true, "lib": ["DOM", "DOM.Iterable", "ESNext"], "allowJs": false, "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, "module": "ESNext", "moduleResolution": "bundler", // ํ•ต์‹ฌ ์„ค์ • 1 "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", "verbatimModuleSyntax": true // ํ•ต์‹ฌ ์„ค์ • 2 }, "include": ["src"], "references": [{ "path": "./tsconfig.node.json" }] }
์œ ์šฉํ•œ ํŒ

isolatedModules: true ์˜ต์…˜์€ Babel์ด๋‚˜ esbuild์™€ ๊ฐ™์€ ๋‹จ์ผ ํŒŒ์ผ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ถŒ์žฅ๋ผ์š”. ์ด ์˜ต์…˜์€ TypeScript๊ฐ€ ๋‹จ์ผ ํŒŒ์ผ ๋‹จ์œ„๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ํŠธ๋žœ์ŠคํŒŒ์ผ๋  ์ˆ˜ ์žˆ๋„๋ก ํŠน์ • ๊ตฌ๋ฌธ ์‚ฌ์šฉ์„ ์ œํ•œํ•˜์—ฌ ์ž ์žฌ์ ์ธ ๋Ÿฐํƒ€์ž„ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•ด ์ค˜์š”.


๋˜ํ•œ moduleResolution: 'bundler'์™€ verbatimModuleSyntax: true๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด isolatedModules: true์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋” ์ž˜ ์ถฉ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์š”.

1๏ธโƒฃ ์ฝ”๋“œ ์˜ˆ์‹œ์™€ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ์˜ˆ์ธก ๐Ÿง‘โ€๐Ÿ’ป

verbatimModuleSyntax: true๊ฐ€ ์ ์šฉ๋œ ์ƒํ™ฉ์—์„œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

// src/types/user.ts export type User = { id: string; name: string; }; export const DEFAULT_USER_ID = "anonymous";
// src/components/UserProfile.tsx import type { User } from "../types/user"; // ํƒ€์ž…๋งŒ ์‚ฌ์šฉ import { DEFAULT_USER_ID } from "../types/user"; // ๊ฐ’ ์‚ฌ์šฉ interface UserProfileProps { user: User; } export function UserProfile({ user }: UserProfileProps) { return ( <div> <h1>{user.name || "Guest"}</h1> <p>ID: {user.id || DEFAULT_USER_ID}</p> </div> ); }

์œ„ ์ฝ”๋“œ๋Š” verbatimModuleSyntax: true ํ™˜๊ฒฝ์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•ด์š”. User ํƒ€์ž…์€ import type์œผ๋กœ ๊ฐ€์ ธ์™”๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋œ JavaScript ์ฝ”๋“œ์—์„œ๋Š” ์™„์ „ํžˆ ์ œ๊ฑฐ๋  ๊ฑฐ์˜ˆ์š”. ๋ฐ˜๋ฉด DEFAULT_USER_ID๋Š” ๋Ÿฐํƒ€์ž„์— ํ•„์š”ํ•œ ๊ฐ’์ด๋ฏ€๋กœ ์ผ๋ฐ˜ import๋กœ ๊ฐ€์ ธ์™”๊ณ , ์ปดํŒŒ์ผ๋œ JavaScript ์ฝ”๋“œ์—๋„ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋  ๊ฑฐ์˜ˆ์š”.

๋งŒ์•ฝ UserProfile.tsx์—์„œ import type { User } from '../types/user'; ๋Œ€์‹  import { User } from '../types/user';๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด, TypeScript๋Š” User๊ฐ€ ๋Ÿฐํƒ€์ž„ ๊ฐ’์œผ๋กœ๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ์„ ๊ฑฐ์˜ˆ์š”. ์ด๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋Ÿฐํƒ€์ž„ ๋™์ž‘์— ๋Œ€ํ•œ ๊ฐ€์ •์„ ๋” ์—„๊ฒฉํ•˜๊ฒŒ ๊ฐ€์ ธ๊ฐ€๋„๋ก ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ด์ฃ .

2๏ธโƒฃ ํ”ํžˆ ๊ฒช๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ํŒ ๐Ÿ’ก

  • import type ๊ด€๋ จ ์˜ค๋ฅ˜: verbatimModuleSyntax: true ์„ค์ • ํ›„ import { SomeType } from 'some-module';์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ํ•ด๋‹น SomeType์ด ์ˆœ์ˆ˜ํ•˜๊ฒŒ ํƒ€์ž…์œผ๋กœ๋งŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  import type { SomeType } from 'some-module';๋กœ ๋ณ€๊ฒฝํ•ด ์ฃผ์„ธ์š”.
  • isolatedModules ์˜ค๋ฅ˜: Cannot re-export a type when 'isolatedModules' is enabled์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๋Š” ์ฃผ๋กœ export { type Foo } from './foo';์™€ ๊ฐ™์ด ํƒ€์ž…์„ ์žฌ๋‚ด๋ณด๋‚ผ ๋•Œ ๋ฐœ์ƒํ•ด์š”. ์ด ๊ฒฝ์šฐ export type { Foo } from './foo';๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ์žฌ๋‚ด๋ณด๋‚ด๋Š” ๋ชจ๋“ˆ์— ๋Ÿฐํƒ€์ž„ ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ด์š”.
  • ๋ชจ๋“ˆ ํ•ด์„ ์˜ค๋ฅ˜: moduleResolution: 'bundler'๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ๋„ ๋ชจ๋“ˆ์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, package.json์˜ exports ํ•„๋“œ ์„ค์ •์ด ์˜ฌ๋ฐ”๋ฅธ์ง€, ๋˜๋Š” paths์™€ ๊ฐ™์€ tsconfig.json์˜ ๋‹ค๋ฅธ ๋ชจ๋“ˆ ํ•ด์„ ๊ด€๋ จ ์˜ต์…˜๊ณผ ์ถฉ๋Œํ•˜๋Š” ๋ถ€๋ถ„์ด ์—†๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.

๐Ÿ“ ์ •๋ฆฌ: ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ •, ์ด์ œ ๋” ์ด์ƒ ์–ด๋ ต์ง€ ์•Š์•„์š”!

0๏ธโƒฃ ํ•ต์‹ฌ ์š”์•ฝ ๐ŸŽฏ

์˜ค๋Š˜์€ ๋ชจ๋˜ ๋ฒˆ๋“ค๋Ÿฌ ํ™˜๊ฒฝ์—์„œ TypeScript ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ์˜ต์…˜, moduleResolution: 'bundler'์™€ verbatimModuleSyntax์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์•˜์–ด์š”.

  • moduleResolution: 'bundler': ๋ฒˆ๋“ค๋Ÿฌ์˜ ๋ชจ๋“ˆ ํ•ด์„ ๋ฐฉ์‹๊ณผ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜์—ฌ ํƒ€์ž… ๊ฒ€์‚ฌ์˜ ์ •ํ™•์„ฑ๊ณผ ์ปดํŒŒ์ผ ์†๋„๋ฅผ ๋†’์—ฌ์ค˜์š”. ํŠนํžˆ ESM ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ์—์„œ ํ•„์ˆ˜์ ์ด์—์š”.
  • verbatimModuleSyntax: import type๊ณผ ์ผ๋ฐ˜ import๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์ฝ”๋“œ์™€ ํƒ€์ž… ์ฝ”๋“œ๋ฅผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•ด ์ค˜์š”. ์ด๋Š” ๋ฒˆ๋“ค ํฌ๊ธฐ ์ตœ์ ํ™”์™€ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ๋ฐฉ์ง€์— ๊ธฐ์—ฌํ•˜๋ฉฐ, isolatedModules์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ๋•Œ ๋”์šฑ ๊ฐ•๋ ฅํ•œ ํšจ๊ณผ๋ฅผ ๋ฐœํœ˜ํ•ด์š”.

์ด ๋‘ ์˜ต์…˜์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜๋ฉด TypeScript์™€ ๋ชจ๋˜ ๋ฒˆ๋“ค๋Ÿฌ ๊ฐ„์˜ ์‹œ๋„ˆ์ง€๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๊ณ , ๋”์šฑ ๊ฒฌ๊ณ ํ•˜๊ณ  ํšจ์œจ์ ์ธ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”.

1๏ธโƒฃ ๋‹ค์Œ ๋‹จ๊ณ„: ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด ๋ณด์„ธ์š”. ๐Ÿš€

ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋‚˜ ์ƒˆ๋กœ ์‹œ์ž‘ํ•  ํ”„๋กœ์ ํŠธ์— ์ด ๋‘ ์˜ต์…˜์„ ์ ์šฉํ•ด ๋ณด์‹œ๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ์ถ”์ฒœํ•ด์š”. ํŠนํžˆ tsconfig.json ํŒŒ์ผ์„ ์ตœ์‹  ๋ชจ๋˜ ๋ฒˆ๋“ค๋Ÿฌ์˜ ๊ถŒ์žฅ ์„ค์ •์— ๋งž์ถฐ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ด์š”.

๋งŒ์•ฝ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•œ๋‹ค๋ฉด, ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ž ์žฌ์ ์ธ ์˜ค๋ฅ˜๋ฅผ ๋ฏธ๋ฆฌ ํŒŒ์•…ํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์–ด์š”. ํ•˜์ง€๋งŒ ์žฅ๊ธฐ์ ์œผ๋กœ๋Š” ๊ฐœ๋ฐœ ๊ฒฝํ—˜๊ณผ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œ์ผœ ์ค„ ๊ฑฐ์˜ˆ์š”.

๊ถ๊ธˆํ•œ ์ ์ด๋‚˜ ์ถ”๊ฐ€์ ์œผ๋กœ ๋‹ค๋ฃจ์—ˆ์œผ๋ฉด ํ•˜๋Š” ์ฃผ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”. ๋‹ค์Œ์—๋„ ์œ ์ตํ•œ ์ •๋ณด๋กœ ์ฐพ์•„์˜ฌ๊ฒŒ์š”!

๐Ÿ“ฎ ์ฐธ๊ณ 

์—ฐ๊ด€๋œ ํฌ์ŠคํŠธ