์ด ํ์ด์ง์ ์ํ๋ AI ์ด์์คํดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์๋ฅผ ์์ฝํฉ๋๋ค
๋ฒ์ ๊ธฐ๋ก
- "์ด๊ธฐ ์ด๋ ฅ"v5.5.102025. 6. 29.
์ด ํ์ด์ง์ ์ฝํ ์ธ ๋ AI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ญ๋์์ต๋๋ค.
์์ด ์๋ณธ ๋ด์ฉ์ ์ต์ ๋ฒ์ ์ ๋ณด๊ธฐ์ด ๋ฌธ์๋ฅผ ๊ฐ์ ํ ์์ด๋์ด๊ฐ ์์ผ์๋ฉด GitHub์ ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํ์ฌ ์์ ๋กญ๊ฒ ๊ธฐ์ฌํด ์ฃผ์ธ์.
๋ฌธ์์ ๋ํ GitHub ๋งํฌ๋ฌธ์์ Markdown์ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
Intlayer ์๋ ๋ฐฉ์
๋ชฉ์ฐจ
๊ฐ์
Intlayer์ ์ฃผ์ ์์ด๋์ด๋ ์ปดํฌ๋ํธ๋ณ ์ฝํ ์ธ ๊ด๋ฆฌ๋ฅผ ์ฑํํ๋ ๊ฒ์ ๋๋ค. ์ฆ, Intlayer์ ์์ด๋์ด๋ ์ฝ๋๋ฒ ์ด์ค ์ด๋์์๋, ์ปดํฌ๋ํธ์ ๋์ผํ ๋๋ ํ ๋ฆฌ์์ ์ฝํ ์ธ ๋ฅผ ์ ์ธํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ด๋ฅผ ์ํด Intlayer์ ์ญํ ์ ํ๋ก์ ํธ์ ์กด์ฌํ๋ ๋ค์ํ ํ์์ ์ฝํ
์ธ ์ ์ธ ํ์ผ์ ๋ชจ๋ ์ฐพ์๋ด๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ (dictionary)์ ์์ฑํ๋ ๊ฒ์
๋๋ค.
๋ฐ๋ผ์ ๋ ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๊ฐ ์์ต๋๋ค:
- ๋น๋ ๋จ๊ณ
- ํด์ ๋จ๊ณ
์ฌ์ ๋น๋ ๋จ๊ณ
๋น๋ ๋จ๊ณ๋ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ํํ ์ ์์ต๋๋ค:
- CLI๋ฅผ ์ฌ์ฉํ์ฌ
npx intlayer build์คํ - vscode ํ์ฅ ์ฌ์ฉ
vite-intlayerํจํค์ง์ ๊ฐ์ ์ฑ ํ๋ฌ๊ทธ์ธ ๋๋ Next.js์ฉ ๋๋ฑํ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ. ์ด๋ฌํ ํ๋ฌ๊ทธ์ธ ์ค ํ๋๋ฅผ ์ฌ์ฉํ๋ฉด Intlayer๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์(๊ฐ๋ฐ)ํ๊ฑฐ๋ ๋น๋(ํ๋ก๋์ )ํ ๋ ์๋์ผ๋ก ์ฌ์ ์ ๋น๋ํฉ๋๋ค.
์ฝํ ์ธ ํ์ผ ์ ์ธ
- ์ฝํ ์ธ ํ์ผ์ TypeScript, ECMAScript, CommonJS ๋๋ JSON๊ณผ ๊ฐ์ ๋ค์ํ ํ์์ผ๋ก ์ ์ํ ์ ์์ต๋๋ค.
- ์ฝํ
์ธ ํ์ผ์ ํ๋ก์ ํธ ์ด๋์์๋ ์ ์ํ ์ ์์ด ์ ์ง ๊ด๋ฆฌ์ ํ์ฅ์ฑ์ด ํฅ์๋ฉ๋๋ค. ์ฝํ
์ธ ํ์ผ์ ํ์ผ ํ์ฅ์ ๊ท์น์ ์ค์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ธฐ๋ณธ ํ์ฅ์๋
*.content.{js|cjs|mjs|ts|tsx|json}์ด์ง๋ง, ์ค์ ํ์ผ์์ ์์ ํ ์ ์์ต๋๋ค.
์ฌ์ (dictionary)์์ฑ- ์ฌ์ ์ ์ฝํ
์ธ ํ์ผ์์ ์์ฑ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Intlayer ์ฌ์ ์ ํ๋ก์ ํธ์
.intlayer/dictionaries๋๋ ํ ๋ฆฌ์ ์์ฑ๋ฉ๋๋ค. - ์ด๋ฌํ ์ฌ์ ์ ๋ชจ๋ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ๋ค์ํ ํ์์ผ๋ก ์์ฑ๋ฉ๋๋ค.
- ์ฌ์ ์ ์ฝํ
์ธ ํ์ผ์์ ์์ฑ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Intlayer ์ฌ์ ์ ํ๋ก์ ํธ์
์ฌ์ ํ์ ์์ฑ
์ฌ์ ํ์ ์์ฑ
์ฌ์ (dictionary)์ ๊ธฐ๋ฐ์ผ๋ก Intlayer๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ ์ ์๋ ํ์ ์ ์์ฑํฉ๋๋ค.
์ฌ์ ํ์ ์ Intlayer์
์ฝํ ์ธ ์ ์ธ ํ์ผ(content declaration files)์์ ์์ฑ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Intlayer ์ฌ์ ํ์ ์ ํ๋ก์ ํธ์.intlayer/types๋๋ ํ ๋ฆฌ์ ์์ฑ๋ฉ๋๋ค.Intlayer ๋ชจ๋ ํ์ฅ(module augmentation)์ Intlayer์ ์ถ๊ฐ ํ์ ์ ์ ์ํ ์ ์๋ TypeScript ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ ๋๋ ํ์ํ ์ธ์๋ฅผ ์ ์ํ์ฌ ๊ฐ๋ฐ ๊ฒฝํ์ ํฅ์์ํต๋๋ค. ์์ฑ๋ ํ์ ์ค์์ Intlayer ์ฌ์ ํ์ ๋๋ ์ธ์ด ๊ตฌ์ฑ ํ์ ์ด
types/intlayer.d.tsํ์ผ์ ์ถ๊ฐ๋๊ณ ๋ค๋ฅธ ํจํค์ง์์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ์ํดtsconfig.jsonํ์ผ์ด ํ๋ก์ ํธ์types๋๋ ํ ๋ฆฌ๋ฅผ ํฌํจํ๋๋ก ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค.
์ฌ์ ํด์ ๋จ๊ณ
Intlayer๋ฅผ ์ฌ์ฉํ๋ฉด useIntlayer ํ
์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฝํ
์ธ ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ด ํ ์ ๋ก์ผ์ผ ๊ฐ์ง๋ฅผ ๊ด๋ฆฌํ๊ณ ํ์ฌ ๋ก์ผ์ผ์ ๋ํ ์ฝํ ์ธ ๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ํ ์ ์ฌ์ฉํ๋ฉด ๋งํฌ๋ค์ด ํด์, ๋ณต์ํ ๊ด๋ฆฌ ๋ฑ์ ์ํํ ์ ์์ต๋๋ค.
Intlayer์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ณด๋ ค๋ฉด ์ฌ์ ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด์ธ์.
์๊ฒฉ ์ฝํ ์ธ
Intlayer๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝํ ์ธ ๋ฅผ ๋ก์ปฌ์์ ์ ์ธํ ํ CMS๋ก ๋ด๋ณด๋ด์ด ๋น๊ธฐ์ ํ์ด ํธ์งํ ์ ์๋๋ก ํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ Git์ผ๋ก ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ๊ณผ ์ ์ฌํ ๋ฐฉ์์ผ๋ก CMS์์ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ฝํ ์ธ ๋ฅผ ํธ์ํ๊ณ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
CMS๋ฅผ ์ฌ์ฉํ๋ ์ธ๋ถ ์ฌ์ ์ ๊ฒฝ์ฐ, Intlayer๋ ์๊ฒฉ ์ฌ์ ์ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ณธ์ ์ธ fetch ์์ ์ ์ํํ๊ณ ์ด๋ฅผ ๋ก์ปฌ ์ฌ์ ๊ณผ ๋ณํฉํฉ๋๋ค. ํ๋ก์ ํธ์ ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ, Intlayer๋ ์ ํ๋ฆฌ์ผ์ด์ ์์(๊ฐ๋ฐ) ๋๋ ๋น๋(ํ๋ก๋์ ) ์ CMS์์ ์ฝํ ์ธ ๋ฅผ ์๋์ผ๋ก ๊ฐ์ ธ์ค๋ ์์ ์ ๊ด๋ฆฌํฉ๋๋ค.
์๊ฐ์ ํธ์ง๊ธฐ
Intlayer๋ ์ฝํ
์ธ ๋ฅผ ์๊ฐ์ ์ผ๋ก ํธ์งํ ์ ์๋ ์๊ฐ์ ํธ์ง๊ธฐ๋ ์ ๊ณตํฉ๋๋ค. ์ด ์๊ฐ์ ํธ์ง๊ธฐ๋ ์ธ๋ถ intlayer-editor ํจํค์ง์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.

- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์์ ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝํ
์ธ (์:
dictionaries๋ฐ ๊ตฌ์ฑ)๋ฅผ ๊ฒ์ํ์ฌ ํด๋ผ์ด์ธํธ ์ธก์์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฐ๋จํ Express ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ํํธ, ํด๋ผ์ด์ธํธ๋ ์๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ์ ์ํธ์์ฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ React ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์์ ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์
dictionaries์ ๊ฐ์ ์ฝํ ์ธ ๋ฐ ๊ตฌ์ฑ์ ๊ฐ์ ธ์ ํด๋ผ์ด์ธํธ ์ธก์์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฐ๋จํ Express ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. - ๋ฐ๋ฉด ํด๋ผ์ด์ธํธ๋ ์๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฝํ
์ธ ์ ์ํธ์์ฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ React ์ ํ๋ฆฌ์ผ์ด์
์
๋๋ค.
useIntlayer๋ฅผ ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ๋ฅผ ํธ์ถํ๊ณ ํธ์ง๊ธฐ๊ฐ ํ์ฑํ๋๋ฉด, ์๋์ผ๋ก ๋ฌธ์์ด์IntlayerNode๋ผ๋ Proxy ๊ฐ์ฒด๋ก ๊ฐ์๋๋ค. ์ด ๋ ธ๋๋window.postMessage๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฐ์ ํธ์ง๊ธฐ ์ธํฐํ์ด์ค๊ฐ ํฌํจ๋ ๋ํ๋ iframe๊ณผ ํต์ ํฉ๋๋ค.
ํธ์ง๊ธฐ ์ธก์์๋ ์ด๋ฌํ ๋ฉ์์ง๋ฅผ ์์ ํ์ฌ ์ค์ ์ฝํ ์ธ ์ ์ํธ์์ฉํ๋ ๊ฒ์ฒ๋ผ ์๋ฎฌ๋ ์ด์ ํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ ๋ด์์ ์ง์ ํ ์คํธ๋ฅผ ํธ์งํ ์ ์๋๋ก ํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๋น๋ ์ต์ ํ
์ ํ๋ฆฌ์ผ์ด์
์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ต์ ํํ๊ธฐ ์ํด Intlayer๋ ์ ํ๋ฆฌ์ผ์ด์
๋น๋๋ฅผ ์ต์ ํํ๋ ๋ ๊ฐ์ง ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํฉ๋๋ค: @intlayer/babel ๋ฐ @intlayer/swc ํ๋ฌ๊ทธ์ธ.
์ ํ๋ฆฌ์ผ์ด์
๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ต์ ํํ๊ธฐ ์ํด Intlayer๋ @intlayer/babel ๋ฐ @intlayer/swc ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํฉ๋๋ค.
Babel ๋ฐ SWC ํ๋ฌ๊ทธ์ธ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(Abstract Syntax Tree, AST)๋ฅผ ๋ถ์ํ์ฌ Intlayer ํจ์ ํธ์ถ์ ์ต์ ํ๋ ์ฝ๋๋ก ๋์ฒดํ๋ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. ์ด ๊ณผ์ ์ ์ค์ ๋ก ์ฌ์ฉ๋๋ ์ฌ์ ๋ง ๊ฐ์ ธ์ค๋๋ก ํ์ฌ ์ฒญํน(chunking)์ ์ต์ ํํ๊ณ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์์ผ๋ก์จ ํ๋ก๋์
์์ ์ต์ข
๋ฒ๋ค์ ๋ ๊ฐ๋ณ๊ฒ ๋ง๋ญ๋๋ค.
๊ฐ๋ฐ ๋ชจ๋์์๋ Intlayer๊ฐ ์ฌ์ ์ ์ค์ ์ง์ค์ ์ ์ ๊ฐ์ ธ์ค๊ธฐ๋ก ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ ๊ฒฝํ์ ๋จ์ํํฉ๋๋ค.
์ค์ ์์ importMode = "dynamic" ์ต์
์ ํ์ฑํํ๋ฉด Intlayer๋ ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ ์ ๋ก๋ํฉ๋๋ค. ์ด ์ต์
์ ์ ํ๋ฆฌ์ผ์ด์
๋ ๋๋ง ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋์ด ์์ต๋๋ค.
@intlayer/babel๋vite-intlayerํจํค์ง์ ๊ธฐ๋ณธ์ผ๋ก ํฌํจ๋์ด ์์ต๋๋ค.
@intlayer/swc๋ Next.js์์ SWC ํ๋ฌ๊ทธ์ธ์ด ์์ง ์คํ์ ์ด๋ฏ๋กnext-intlayerํจํค์ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋์ด ์์ง ์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๋น๋๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ณด๋ ค๋ฉด ์ค์ ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด์ธ์.
ํจํค์ง
Intlayer๋ ๋ฒ์ญ ํ๋ก์ธ์ค์์ ํน์ ์ญํ ์ ํ๋ ์ฌ๋ฌ ํจํค์ง๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ค์์ ์ด ํจํค์ง ๊ตฌ์กฐ์ ๊ทธ๋ํฝ ํํ์ ๋๋ค:
intlayer
intlayer ํจํค์ง๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฝํ
์ธ ํ์ผ ๋ด์ ์ฝํ
์ธ ๋ฅผ ์ ์ธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
react-intlayer
react-intlayer ํจํค์ง๋ Intlayer ์ฌ์ ์ ํด์ํ์ฌ React ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
next-intlayer
next-intlayer ํจํค์ง๋ react-intlayer ์์ ๋ ์ด์ด๋ก ์๋ํ์ฌ Intlayer ์ฌ์ ์ Next.js ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. ๋ฒ์ญ ๋ฏธ๋ค์จ์ด, ๋ผ์ฐํ
, ๋๋ next.config.js ํ์ผ ๊ตฌ์ฑ๊ณผ ๊ฐ์ Next.js ํ๊ฒฝ์์ Intlayer๊ฐ ์๋ํ๋๋ก ํ์ ๊ธฐ๋ฅ์ ํตํฉํฉ๋๋ค.
vue-intlayer
vue-intlayer ํจํค์ง๋ Intlayer ์ฌ์ ์ ํด์ํ์ฌ Vue ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
nuxt-intlayer
nuxt-intlayer ํจํค์ง๋ Nuxt ๋ชจ๋๋ก์ Intlayer ์ฌ์ ์ Nuxt ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. ์ด ํจํค์ง๋ ๋ฒ์ญ ๋ฏธ๋ค์จ์ด, ๋ผ์ฐํ
, nuxt.config.js ํ์ผ ๊ตฌ์ฑ ๋ฑ Nuxt ํ๊ฒฝ์์ Intlayer๊ฐ ์๋ํ๋ ๋ฐ ํ์ํ ํ์ ๊ธฐ๋ฅ์ ํตํฉํฉ๋๋ค.
svelte-intlayer (์์ ์ค)
svelte-intlayer ํจํค์ง๋ Intlayer ์ฌ์ ์ ํด์ํ์ฌ Svelte ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
solid-intlayer (์์ ์ค)
solid-intlayer ํจํค์ง๋ Intlayer ์ฌ์ ์ ํด์ํ์ฌ Solid.js ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
preact-intlayer
preact-intlayer ํจํค์ง๋ Intlayer ์ฌ์ ์ ํด์ํ์ฌ Preact ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
angular-intlayer (์์ ์ค)
angular-intlayer ํจํค์ง๋ Intlayer ์ฌ์ ์ ํด์ํ์ฌ Angular ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
express-intlayer
express-intlayer ํจํค์ง๋ Express.js ๋ฐฑ์๋์์ Intlayer๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
react-native-intlayer
react-native-intlayer ํจํค์ง๋ Metro ๋ฒ๋ค๋ฌ์ ํจ๊ป ์๋ํ๋๋ก Intlayer ํ๋ฌ๊ทธ์ธ์ ํตํฉํ๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
lynx-intlayer
lynx-intlayer ํจํค์ง๋ Lynx ๋ฒ๋ค๋ฌ์ ํจ๊ป ์๋ํ๋๋ก Intlayer ํ๋ฌ๊ทธ์ธ์ ํตํฉํ๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
vite-intlayer
Vite ๋ฒ๋ค๋ฌ์ Intlayer๋ฅผ ํตํฉํ๊ธฐ ์ํ Vite ํ๋ฌ๊ทธ์ธ๊ณผ ์ฌ์ฉ์์ ์ ํธ ๋ก์ผ์ผ ๊ฐ์ง, ์ฟ ํค ๊ด๋ฆฌ, URL ๋ฆฌ๋๋ ์ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฏธ๋ค์จ์ด๋ฅผ ํฌํจํฉ๋๋ค.
react-scripts-intlayer
react-scripts-intlayer ๋ช
๋ น์ด์ ํ๋ฌ๊ทธ์ธ์ ํฌํจํ๋ฉฐ, Create React App ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ Intlayer๋ฅผ ํตํฉํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํ๋ฌ๊ทธ์ธ๋ค์ craco๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, Webpack ๋ฒ๋ค๋ฌ์ ๋ํ ์ถ๊ฐ ๊ตฌ์ฑ์ ํฌํจํฉ๋๋ค.
intlayer-editor
intlayer-editor ํจํค์ง๋ ์๊ฐ์ ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํจํค์ง๋ ์ ํ ์ฌํญ์ผ๋ก, ์ ํ๋ฆฌ์ผ์ด์
์ ์ค์นํ ์ ์์ผ๋ฉฐ react-intlayer ํจํค์ง์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ด ํจํค์ง๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
ํด๋ผ์ด์ธํธ๋ react-intlayer์์ ์ฌ์ฉ๋ UI ์์๋ฅผ ํฌํจํฉ๋๋ค.
Express๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ฒ๋ ์๊ฐ์ ํธ์ง๊ธฐ ์์ฒญ์ ์์ ํ๊ณ ์ฝํ ์ธ ํ์ผ์ ๊ด๋ฆฌํ๊ฑฐ๋ ์์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
intlayer-cli
intlayer-cli ํจํค์ง๋ npx intlayer dictionaries build ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ ์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. intlayer๊ฐ ์ด๋ฏธ ์ค์น๋์ด ์๋ค๋ฉด CLI๋ ์๋์ผ๋ก ์ค์น๋๋ฉฐ ์ด ํจํค์ง๋ ํ์ํ์ง ์์ต๋๋ค.
@intlayer/core
@intlayer/core ํจํค์ง๋ Intlayer์ ์ฃผ์ ํจํค์ง์
๋๋ค. ์ด ํจํค์ง๋ ๋ฒ์ญ ๋ฐ ์ฌ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํฌํจํ๊ณ ์์ต๋๋ค. @intlayer/core๋ ๋ค์ค ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, ๋ค๋ฅธ ํจํค์ง์์ ์ฌ์ ํด์์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
@intlayer/config
@intlayer/config ํจํค์ง๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ด, Next.js ๋ฏธ๋ค์จ์ด ๋งค๊ฐ๋ณ์ ๋๋ ํตํฉ ํธ์ง๊ธฐ ์ค์ ๊ณผ ๊ฐ์ Intlayer ์ค์ ์ ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
@intlayer/webpack
@intlayer/webpack ํจํค์ง๋ Webpack ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ด Intlayer์ ํจ๊ป ์๋ํ๋๋ก Webpack ๊ตฌ์ฑ์ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํจํค์ง๋ ๊ธฐ์กด Webpack ์ ํ๋ฆฌ์ผ์ด์
์ ์ถ๊ฐํ ์ ์๋ ํ๋ฌ๊ทธ์ธ๋ ์ ๊ณตํฉ๋๋ค.
@intlayer/cli
@intlayer/cli ํจํค์ง๋ Intlayer ๋ช
๋ น์ค ์ธํฐํ์ด์ค์ ๊ด๋ จ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ NPM ํจํค์ง์
๋๋ค. ์ด ํจํค์ง๋ ๋ชจ๋ Intlayer CLI ๋ช
๋ น์ด์ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์ด ํจํค์ง๋ ํนํ intlayer-cli ๋ฐ intlayer ํจํค์ง์์ ์ฌ์ฉ๋ฉ๋๋ค.
@intlayer/mcp
@intlayer/mcp ํจํค์ง๋ Intlayer ์ํ๊ณ์ ๋ง์ถ AI ๊ธฐ๋ฐ IDE ์ง์์ ์ ๊ณตํ๋ MCP(Model Context Protocol) ์๋ฒ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ์๋ฒ๋ ๋ฌธ์๋ฅผ ์๋์ผ๋ก ๋ก๋ํ๋ฉฐ Intlayer CLI์ ํตํฉ๋ฉ๋๋ค.
@intlayer/dictionaries-entry & @intlayer/unmerged-dictionaries-entry & @intlayer/dynamic-dictionaries-entry
@intlayer/dictionaries-entry, @intlayer/unmerged-dictionaries-entry ๋ฐ @intlayer/dynamic-dictionaries-entry ํจํค์ง๋ Intlayer ์ฌ์ ์ ์ง์
๊ฒฝ๋ก๋ฅผ ๋ฐํํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์์ ํ์ผ ์์คํ
์ ๊ฒ์ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, Webpack์ด๋ Rollup๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ ์ ์ง์
๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ด ํจํค์ง๋ค์ ๋ณ์นญ(alias)์ผ๋ก ์ค๊ณ๋์ด Vite, Webpack, Turbopack ๋ฑ ๋ค์ํ ๋ฒ๋ค๋ฌ์์ ๋ฒ๋ค๋ง ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
@intlayer/engine
@intlayer/engine ํจํค์ง๋ ์ฝํ
์ธ ํ์ผ์ ๋ชจ๋ํฐ๋งํ๊ณ ์์ ๋ ๋๋ง๋ค ๋ณ๊ฒฝ๋ ์ฌ์ ์ ์ฌ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
@intlayer/editor
@intlayer/editor ํจํค์ง๋ ์ฌ์ ํธ์ง๊ธฐ์ ๊ด๋ จ๋ ์ ํธ๋ฆฌํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํนํ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ Intlayer ํธ์ง๊ธฐ๋ฅผ ์ฐ๊ฒฐํ๋ API์ ์ฌ์ ์ ์กฐ์ํ๋ ์ ํธ๋ฆฌํฐ๋ฅผ ํฌํจํฉ๋๋ค. ์ด ํจํค์ง๋ ํฌ๋ก์ค ํ๋ซํผ์
๋๋ค.
@intlayer/editor-react
@intlayer/editor-react ํจํค์ง๋ React ์ ํ๋ฆฌ์ผ์ด์
๊ณผ Intlayer ํธ์ง๊ธฐ๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ํ, ์ปจํ
์คํธ, ํ
๋ฐ ์ปดํฌ๋ํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
@intlayer/babel
@intlayer/babel ํจํค์ง๋ Vite ๋ฐ Webpack ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ ๋ฒ๋ค๋ง์ ์ต์ ํํ๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
@intlayer/swc
@intlayer/swc ํจํค์ง๋ Next.js ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ ๋ฒ๋ค๋ง์ ์ต์ ํํ๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
@intlayer/api
@intlayer/api ํจํค์ง๋ ๋ฐฑ์๋์ ์ํธ์์ฉํ๊ธฐ ์ํ API SDK์
๋๋ค.
@intlayer/design-system
@intlayer/design-system ํจํค์ง๋ CMS์ ์๊ฐ์ ํธ์ง๊ธฐ ๊ฐ์ ๋์์ธ ์์๋ฅผ ๊ณต์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
@intlayer/backend
@intlayer/backend ํจํค์ง๋ ๋ฐฑ์๋ ์ ํ์ ๋ด๋ณด๋ด๋ฉฐ, ํฅํ ๋
๋ฆฝํ ํจํค์ง๋ก ๋ฐฑ์๋๋ฅผ ์ ๊ณตํ ์์ ์
๋๋ค.
์ค๋งํธ ๋ฌธ์์ ์ฑํ ํ๊ธฐ
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
๋น๋ ํ์์ ๋น๋๋ฉ๋๋ค. ๋ฒ๋ค๋ฌ ํ๋ฌ๊ทธ์ธ ๋๋ npx intlayer build๊ฐ .content.ts ํ์ผ์ ์ค์บํ์ฌ .intlayer ํด๋์ ์ฌ์ ์ผ๋ก ์ปดํ์ผํ๊ณ ํด๋นํ๋ TypeScript ํ์
์ ์์ฑํฉ๋๋ค. ๋ฐํ์ ์ ์ปดํฌ๋ํธ๋ ๊ฒฐ๊ณผ๋ฌผ๋ง ์ฝ์ผ๋ฏ๋ก ์์ฒญ ๊ฒฝ๋ก์์ ํ์ฑ์ด๋ ํ์ผ ๋ก๋ฉ์ด ์ ํ ๋ฐ์ํ์ง ์์ต๋๋ค.
๋ค์์คํ์ด์ค ๊ธฐ๋ฐ ์ค์ ๋ณด๋ค ํจ์ฌ ์ ์ต๋๋ค. ํ์ด์ง๋ ๋ ๋๋งํ์ง ์๋ ์ธ์ด์ ์นดํ๋ก๊ทธ๋ฅผ ์ ๋ ๋ค์ด๋ก๋ํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋ฒ ๋ ๋๋ง ๋งํฌ์
์ ์๋ฒ์์ ์ฝํ
์ธ ๋ฅผ ํ์ธํ๊ณ , ๋น๋ ํ์ ์ปดํ์ผ๋ฌ๋ useIntlayer ํธ์ถ์ ์ปดํฌ๋ํธ๊ฐ ์ฌ์ฉํ๋ ์ ํํ ์ฌ์ ํญ๋ชฉ์ผ๋ก ๋์ฒดํ๋ฏ๋ก ์ฌ์ฉ๋์ง ์๋ ํค์ ์ธ์ด๋ ์ ๊ฑฐ๋ฉ๋๋ค. ๋์ ์ฌ์ ์ ํตํด ๋ก์ผ์ผ๋ณ๋ก ๋ถํ ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๋์๋ค๊ณผ ๋น๊ตํ์ ๋ Intlayer๋ ๋ฒ๋ค ๋ฐ ํ์ด์ง ํฌ๊ธฐ๋ฅผ ์ต๋ 50%๊น์ง ์ค์ฌ์ค๋๋ค. ๋ฒ๋ค ์ต์ ํ์ ๋ฒค์น๋งํฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ค, ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. i18next ๋ง์ด๊ทธ๋ ์ด์
๊ฐ์ด๋ ๋๋ next-intl ๋ง์ด๊ทธ๋ ์ด์
๊ฐ์ด๋๋ฅผ ๋ฐ๋ผ ์ ์ง์ ์ผ๋ก ์ด์ ํ ์ ์์ต๋๋ค. ๋๋ ํ์ฌ API๋ฅผ ์์ ํ ์ ์งํ ์๋ ์์ต๋๋ค: ํธํ ์ด๋ํฐ(compat adapters)๋ i18next, react-i18next, next-intl, next-i18next, react-intl, use-intl, vue-i18n ๋ฐ Lingui์ ์์ ํ ๋์ผํ API๋ฅผ ๋
ธ์ถํ๋ฉด์ Intlayer ์ฌ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ฏ๋ก, import ๊ตฌ๋ฌธ๋ง ๋ณ๊ฒฝํ๊ณ ์ปดํฌ๋ํธ ์ฝ๋๋ ๊ทธ๋๋ก ์ ์งํ ์ ์์ต๋๋ค.
๋ค. sync JSON ํ๋ฌ๊ทธ์ธ์ /messages/{locale}/{namespace}.json ํ์ผ์ ๋จ์ผ ์ง์ค ๊ณต๊ธ์(source of truth)์ผ๋ก ์ ์งํ๋ฉด์ ์๋ฐฉํฅ์ผ๋ก Intlayer ์ฌ์ ์ ์์ฑํฉ๋๋ค. sync PO ํ๋ฌ๊ทธ์ธ์ gettext ์นดํ๋ก๊ทธ์ ๋ํด ๋์ผํ ์์
์ ์ํํ๋ฉฐ, ๋ก์ผ์ผ๋ณ ํ์ผ์ ํตํด ๋ก์ผ์ผ์ ํ ํ์ผ์ ๋ชจ์ผ๋ ๋์ ์ธ์ด๋ณ๋ก ์ฝํ
์ธ ๋ฅผ ๋ถํ ํ ์๋ ์์ต๋๋ค.
์๋๋๋ค. npx intlayer extract๋ฅผ ์คํํ๋ฉด Intlayer๊ฐ ์์ค ํ์ผ์ ์ฝ๊ณ ์ฌ์ฉ์ ๋๋ฉด ๋ฌธ์์ด์ ์ถ์ถํ์ฌ ๊ฐ ์ปดํฌ๋ํธ ์์ .content ํ์ผ์ ์์ฑํ๋ฏ๋ก ์นดํ๋ก๊ทธ์ ์ผ์ผ์ด ๋ณต์ฌํ ํ์ ์์ด diff๋ง ๊ฒํ ํ๋ฉด ๋ฉ๋๋ค. extract ๋ช
๋ น์ ์ฐธ์กฐํ์ธ์.
์์ ์๋ํ๋ ํ์ดํ๋ผ์ธ์ ์ํด Intlayer ์ปดํ์ผ๋ฌ๋ ๋น๋ ํ์์ JSX, TSX, Vue ๋ฐ Svelte ์์ค์์ ๋์ผํ ์์ ์ ์ํํ์ฌ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ฌ์ ์ ์์ฑํ๊ณ HMR์ ํตํด ๋๊ธฐํํ๋ฏ๋ก ์๋์ผ๋ก ํค๋ฅผ ๊ด๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค. ์ ์ ๋ถ์์ผ๋ก ์๋ํ๋ฏ๋ก ๋ฐํ์์๋ง ์กด์ฌํ๋ ๋ฌธ์์ด์ ์ ์ธ๋๋ฉฐ, ์ฌ์ฉ์ ํ ์คํธ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์ฃผ์์ด ํ์ํฉ๋๋ค.
5๊ฐ์ง ๋๊ตฌ๊ฐ ๋ชจ๋ ์ ํ ์ฌํญ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค:
- VS Code ํ์ฅ ํ๋ก๊ทธ๋จ:
useIntlayerํค์์ ์ด๋ฅผ ์ ์ธํ ์ฝํ ์ธ ํ์ผ๋ก ๋ฐ๋ก ์ด๋ํ๊ณ , ์ปดํฌ๋ํธ์์ ์ฝํ ์ธ ๋ฅผ ์ถ์ถํ๋ฉฐ, ๋ช ๋ น ํ๋ ํธ๋ ์ ์ฉ Intlayer ํญ์์ build, fill, test, push, pull์ ์คํํ ์ ์์ต๋๋ค. - LSP ์๋ฒ: LSP๋ฅผ ์ง์ํ๋ ๋ชจ๋ ์๋ํฐ์์ ์ ์๋ก ์ด๋, ๋ชจ๋ ์ฐธ์กฐ ์ฐพ๊ธฐ, ๋ฒ์ญ ๊ฐ ๋ง์ฐ์ค ์ค๋ฒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ํค ๋ฐ ํ๋ ์๋ ์์ฑ, ์ ์ธ๋์ง ์์ ํค์ ๋ํ ๊ฒฝ๊ณ ๋ฑ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๋ํ
i18next,react-i18next,next-intl,use-intlํธ์ถ๋ ํด์ํ๋ฏ๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ ์ ์ฉํฉ๋๋ค. - MCP ์๋ฒ: Cursor, VS Code, Claude Desktop, Claude Code, ChatGPT์ Intlayer ๋ฌธ์์ CLI๋ฅผ ๋
ธ์ถํ์ฌ AI ์ด์์คํดํธ๊ฐ ์ต์ ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํํ ๋ต๋ณํ๊ณ
intlayer fill๋ฑ์ ๋ช ๋ น์ ์ง์ ์คํํ ์ ์๊ฒ ํฉ๋๋ค. - Agent Skills:
intlayer-config,intlayer-cli,intlayer-content๋ฐ ๊ฐ ํ๋ ์์ํฌ ์ ์ฉ ์คํฌ์ ํตํด AI ์์ด์ ํธ์๊ฒ ๋ผ์ฐํ ์ค์ ๊ณผ ์ฝํ ์ธ ๋ ธ๋ ํ์ ์ ํ์ต์ํต๋๋ค. - ESLint ํ๋ฌ๊ทธ์ธ:
no-raw-text๊ท์น์ผ๋ก ํ๋์ฝ๋ฉ๋ ๋ฌธ์์ด์ ํ์ํ๊ณ , ์ ์ ์ฌ์ ํค ๋ฐ ์ฌ์ฉ๋์ง ์๋ ์ฝํ ์ธ ์ ๋ํ ์ถ๊ฐ ๊ท์น์ ์ ๊ณตํฉ๋๋ค.
