์ด ํ์ด์ง์๋ ์ ํ๋ฆฌ์ผ์ด์ ํ ํ๋ฆฟ์ด ์ ๊ณต๋ฉ๋๋ค.
์ด ํ์ด์ง๋ ํ ํ๋ฆฟ์ ๋ผ์ด๋ธ ๋ฐ๋ชจ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
์ด ํ์ด์ง์ ์ํ๋ AI ์ด์์คํดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์๋ฅผ ์์ฝํฉ๋๋ค
๋ฒ์ ๊ธฐ๋ก
- "Solid useIntlayer API ์ฌ์ฉ๋ฒ์ ์ง์ ์์ฑ ์ก์ธ์ค๋ก ์
๋ฐ์ดํธ"v8.9.02026. 5. 4.
- "init ๋ช
๋ น์ด ์ถ๊ฐ"v7.5.92025. 12. 30.
- "Astro ํตํฉ, ์ค์ ๋ฐ ์ฌ์ฉ๋ฒ ์
๋ฐ์ดํธ"v6.2.02025. 10. 3.
์ด ํ์ด์ง์ ์ฝํ ์ธ ๋ AI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ญ๋์์ต๋๋ค.
์์ด ์๋ณธ ๋ด์ฉ์ ์ต์ ๋ฒ์ ์ ๋ณด๊ธฐ์ด ๋ฌธ์๋ฅผ ๊ฐ์ ํ ์์ด๋์ด๊ฐ ์์ผ์๋ฉด GitHub์ ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํ์ฌ ์์ ๋กญ๊ฒ ๊ธฐ์ฌํด ์ฃผ์ธ์.
๋ฌธ์์ ๋ํ GitHub ๋งํฌ๋ฌธ์์ Markdown์ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
Intlayer๋ฅผ ์ฌ์ฉํ์ฌ Astro + React ์ฌ์ดํธ ๋ฒ์ญํ๊ธฐ | ๊ตญ์ ํ (i18n)
๋ชฉ์ฐจ
๋์๋ณด๋ค Intlayer๋ฅผ ์ ํํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
'astro-i18n' ๋๋ 'i18next'์ ๊ฐ์ ์ฃผ์ ์๋ฃจ์ ๊ณผ ๋น๊ตํ ๋ Intlayer๋ ๋ค์๊ณผ ๊ฐ์ ํตํฉ ์ต์ ํ๊ฐ ์ ๊ณต๋๋ ์๋ฃจ์ ์ ๋๋ค.
Intlayer๋ ๋ค๊ตญ์ด ๋ผ์ฐํ , ์ฌ์ดํธ๋งต ๋ฐ ๊ตญ์ ํ ํ์ฅ(i18n)์ ํ์ํ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ Astro์ ์๋ฒฝํ๊ฒ ์๋ํ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค.
๋์ฉ๋ JSON ํ์ผ์ ํ์ด์ง์ ๋ก๋ํ๋ ๋์ ํ์ํ ์ฝํ ์ธ ๋ง ๋ก๋ํ์ธ์. Intlayer๋ ๋ฒ๋ค ๋ฐ ํ์ด์ง ํฌ๊ธฐ๋ฅผ ์ต๋ 50% ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ฝํ ์ธ ์ ๋ฒ์๋ฅผ ์ง์ ํ๋ฉด ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ง ๊ด๋ฆฌ๊ฐ ์ฉ์ดํด์ง๋๋ค. ์ ์ฒด ์ฝํ ์ธ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ฒํ ํด์ผ ํ๋ ์ ์ ์ ๋ถ๋ด ์์ด ๋จ์ผ ๊ธฐ๋ฅ ํด๋๋ฅผ ๋ณต์ ํ๊ฑฐ๋ ์ญ์ ํ ์ ์์ต๋๋ค. ๋ํ Intlayer๋ ์์ ํ ์ ํ๋์ด ์ฝํ ์ธ ์ ์ ํ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
์ฝํ ์ธ ๋ฅผ ๊ฐ์ ์์น์ ๋ฐฐ์นํ๋ฉด LLM(๋ํ ์ธ์ด ๋ชจ๋ธ)์ ํ์ํ ์ปจํ ์คํธ๊ฐ ์ค์ด๋ญ๋๋ค. Intlayer์๋ ๋๋ฝ๋ ๋ฒ์ญ์ ํ ์คํธํ๊ธฐ ์ํ CLI, LSP, MCP ๋ฐ agent skills, AI ์์ด์ ํธ๋ฅผ ์ํ ๊ฐ๋ฐ์ ๊ฒฝํ(DX)์ ๋์ฑ ์ํํ๊ฒ ๋ง๋ญ๋๋ค.
AI ๊ณต๊ธ์์ ๋น์ฉ์ผ๋ก ์ ํํ LLM์ ์ฌ์ฉํ์ฌ CI/CD ํ์ดํ๋ผ์ธ์ ๋ฒ์ญํ๋ ค๋ฉด ์๋ํ๋ฅผ ์ฌ์ฉํ์ธ์. Intlayer๋ ๋ํ ์ฝํ ์ธ ์ถ์ถ์ ์๋ํํ๋ ์ปดํ์ผ๋ฌ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฒ์ญ์ ๋๋ ์น ํ๋ซํผ์ ์ ๊ณตํฉ๋๋ค.
๋๊ท๋ชจ JSON ํ์ผ์ ๊ตฌ์ฑ ์์์ ์ฐ๊ฒฐํ๋ฉด ์ฑ๋ฅ ๋ฐ ๋ฐ์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. Intlayer๋ ๋น๋ ์ ์ฝํ ์ธ ๋ก๋ฉ์ ์ต์ ํํฉ๋๋ค.
Intlayer๋ ๋จ์ํ i18n ์๋ฃจ์ ๊ทธ ์ด์์ผ๋ก ๊ด๋ฆฌ์ ๋์์ด ๋๋ ์์ฒด ํธ์คํ ๋น์ฃผ์ผ ํธ์ง๊ธฐ ๋ฐ ์ ์ฒด CMS๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ค๊ตญ์ด ์ฝํ ์ธ ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ ๊ณตํ์ฌ ๋ฒ์ญ๊ฐ, ์นดํผ๋ผ์ดํฐ, ๊ธฐํ ํ์๊ณผ ์ํํ๊ฒ ํ์ ํ ์ ์์ต๋๋ค. ์ฝํ ์ธ ๋ ๋ก์ปฌ ๋ฐ/๋๋ ์๊ฒฉ์ผ๋ก ์ ์ฅ๋ ์ ์์ต๋๋ค.
Astro + React์์ Intlayer ์ค์ ์ ์ํ ๋จ๊ณ๋ณ ๊ฐ์ด๋
GitHub์์ ์ ํ๋ฆฌ์ผ์ด์ ํ ํ๋ฆฟ ๋ณด๊ธฐ.
์ข ์์ฑ ์ค์น
์ ํธํ๋ ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค:
bash์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
alt,title,href,aria-label๋ฑ๊ณผ ๊ฐ์๋ฌธ์์ด์์ฑ์์ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํจ์์ ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.html์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
bash์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
intlayer ์ค์ ๊ด๋ฆฌ, ๋ฒ์ญ, ์ฝํ ์ธ ์ ์ธ, ํธ๋์คํ์ผ ๋ฐ CLI ๋ช ๋ น์ด๋ฅผ ์ํ ๊ตญ์ ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ ํต์ฌ ํจํค์ง์ ๋๋ค.
astro-intlayer Intlayer๋ฅผ Vite ๋ฒ๋ค๋ฌ์ ํตํฉํ๊ธฐ ์ํ Astro ํตํฉ ํ๋ฌ๊ทธ์ธ๊ณผ ์ฌ์ฉ์์ ์ ํธ ๋ก์ผ์ผ์ ๊ฐ์งํ๊ณ ์ฟ ํค๋ฅผ ๊ด๋ฆฌํ๋ฉฐ URL ๋ฆฌ๋๋ ์ ์ ์ฒ๋ฆฌํ๋ ๋ฏธ๋ค์จ์ด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
react, react-dom ๋ธ๋ผ์ฐ์ ์์ React ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ํ์ํ ํต์ฌ React ํจํค์ง์ ๋๋ค.
react-intlayer Intlayer๋ฅผ React ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํตํฉํ๋ ํจํค์ง์ ๋๋ค. React์ ๊ตญ์ ํ๋ฅผ ์ํ
IntlayerProvider,useIntlayer๋ฐuseLocaleํ ์ ์ ๊ณตํฉ๋๋ค.@astrojs/react React ์ปดํฌ๋ํธ ์์ผ๋๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๊ณต์ Astro ํตํฉ ๋๊ตฌ์ ๋๋ค.
ํ๋ก์ ํธ ์ค์
์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ์ด๋ฅผ ์ค์ ํ๊ธฐ ์ํ ์ค์ ํ์ผ์ ์์ฑํฉ๋๋ค:
intlayer.config.ts์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ด ์ค์ ํ์ผ์ ํตํด ๋ก์ปฌ๋ผ์ด์ฆ๋ URL, ๋ฏธ๋ค์จ์ด ๋ฆฌ๋๋ ์ , ์ฟ ํค ์ด๋ฆ, ์ฝํ ์ธ ์ ์ธ ์์น ๋ฐ ํ์ฅ์ ์ค์ , ์ฝ์์ Intlayer ๋ก๊ทธ ๋นํ์ฑํ ๋ฑ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ผ๋ฏธํฐ์ ์ ์ฒด ๋ชฉ๋ก์ ์ค์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
Astro ์ค์ ์ Intlayer ํตํฉ
Astro ์ค์ ์ intlayer ํ๋ฌ๊ทธ์ธ๊ณผ React ํตํฉ์ ์ถ๊ฐํฉ๋๋ค.
astro.config.ts์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
intlayer()ํตํฉ ํ๋ฌ๊ทธ์ธ์ Intlayer๋ฅผ Astro์ ํตํฉํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ฝํ ์ธ ์ ์ธ ํ์ผ์ ๋น๋๋ฅผ ๋ณด์ฅํ๊ณ ๊ฐ๋ฐ ๋ชจ๋์์ ์ด๋ฅผ ๊ฐ์ํฉ๋๋ค. Astro ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ Intlayer ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํ๋ฉฐ, ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ์์ผ๋ฆฌ์ด์ค(alias)๋ฅผ ์ ๊ณตํฉ๋๋ค.react()ํตํฉ์client:only="react"๋ฅผ ํตํด React ์ปดํฌ๋ํธ ์์ผ๋๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.์ฝํ ์ธ ์ ์ธ
๋ฒ์ญ์ ์ ์ฅํ๊ธฐ ์ํด ์ฝํ ์ธ ์ ์ธ์ ์์ฑํ๊ณ ๊ด๋ฆฌํฉ๋๋ค:
src/app.content.tsx์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ฝํ ์ธ ์ ์ธ์
contentDir(๊ธฐ๋ณธ๊ฐ./src)์ ํฌํจ๋์ด ์๊ณ ์ฝํ ์ธ ์ ์ธ ํ์ผ ํ์ฅ์(๊ธฐ๋ณธ๊ฐ.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml})์ ์ผ์นํ๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด๋์์๋ ์ ์ํ ์ ์์ต๋๋ค.์์ธํ ๋ด์ฉ์ ์ฝํ ์ธ ์ ์ธ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
Astro์์ ์ฝํ ์ธ ์ฌ์ฉ
intlayer์์ ๋ด๋ณด๋ธ ํต์ฌ ํฌํผ๋ฅผ ์ฌ์ฉํ์ฌ.astroํ์ผ์์ ์ง์ ์ฌ์ ์ ์๋นํ ์ ์์ต๋๋ค. ๋ํ ๊ฐ ํ์ด์ง์ hreflang ๋ฐ canonical ๋งํฌ์ ๊ฐ์ SEO ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ , ํด๋ผ์ด์ธํธ ์ฌ์ด๋์ ์ธํฐ๋ํฐ๋ธ ์ฝํ ์ธ ๋ฅผ ์ํด React ์์ผ๋๋๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค.src/pages/[...locale]/index.astro์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
๋ฌธ์์ด ์์ฑ(์:
alt,title,href,aria-label๋ฑ)์์ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํจ์์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค:html์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
๋ผ์ฐํ ์ค์ ์ ๊ดํ ์ฐธ๊ณ ์ฌํญ: ์ฌ์ฉํ๋ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋
intlayer.config.ts์middleware.routing์ค์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค:prefix-no-default(๊ธฐ๋ณธ๊ฐ): ๋ฃจํธ(ํ๋ ํฝ์ค ์์)์ ๊ธฐ๋ณธ ์ธ์ด๋ฅผ ์ ์งํ๊ณ ๋๋จธ์ง์ ํ๋ ํฝ์ค๋ฅผ ๋ถ์ ๋๋ค. ๋ชจ๋ ์ผ์ด์ค๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด[...locale]์ ์ฌ์ฉํ์ธ์.prefix-all: ๋ชจ๋ URL์ ์ธ์ด ํ๋ ํฝ์ค๊ฐ ๋ถ์ต๋๋ค. ๋ฃจํธ๋ฅผ ๋ถ๋ฆฌํด์ ์ฒ๋ฆฌํ ํ์๊ฐ ์๋ค๋ฉด ํ์ค[locale]์ ์ฌ์ฉํ ์ ์์ต๋๋ค.search-param๋๋no-prefix: ๋ก์ผ์ผ ํด๋๊ฐ ํ์ ์์ต๋๋ค. ๋ก์ผ์ผ์ ๊ฒ์ ํ๋ผ๋ฏธํฐ๋ ์ฟ ํค๋ฅผ ํตํด ์ฒ๋ฆฌ๋ฉ๋๋ค.
React ์์ผ๋๋ ์ปดํฌ๋ํธ ์์ฑ
React ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ธ๊ณ ์๋ฒ์์ ๊ฐ์ง๋ ๋ก์ผ์ผ์ ์ ๋ฌ๋ฐ๋ ์์ผ๋๋ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํฉ๋๋ค:
src/components/react/ReactIsland.tsx์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
localeํ๋กญ์ Astro ํ์ด์ง(์๋ฒ ๊ฐ์ง)์์IntlayerProvider๋ก ์ ๋ฌ๋์ด ํธ๋ฆฌ ๋ด ๋ชจ๋ React ํ ์ ์ด๊ธฐ ๋ก์ผ์ผ์ด ๋ฉ๋๋ค.์ธ์ด ์ ํ๊ธฐ ์ถ๊ฐ
์ฌ์ฉ ๊ฐ๋ฅํ ๋ก์ผ์ผ์ ์ฝ๊ณ ์ฌ์ฉ์๊ฐ ์ ์ธ์ด๋ฅผ ์ ํํ ๋ ๋ก์ปฌ๋ผ์ด์ฆ๋ URL๋ก ์ด๋ํ๋ React ์ปดํฌ๋ํธ
LocaleSwitcher๋ฅผ ์์ฑํฉ๋๋ค:src/components/react/LocaleSwitcher.tsx์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์์์ฑ์ ๊ดํ ์ฐธ๊ณ ์ฌํญ:
window.location.href๋ฅผ ํตํ ๋ฆฌ๋๋ ์ ์ ์ํดonLocaleChange๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ธ์ด URL์ด ํ์คํ ๋ฐฉ๋ฌธ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ฅผ ํตํด Intlayer ๋ฏธ๋ค์จ์ด๊ฐ ์ธ์ด ์ฟ ํค๋ฅผ ์ค์ ํ๊ณ ํฅํ ๋ฐฉ๋ฌธ ์ ์ฌ์ฉ์์ ์ ํธ๋๋ฅผ ๊ธฐ์ตํ ์ ์์ต๋๋ค.LocaleSwitcher๋IntlayerProvider๋ด๋ถ์์ ๋ ๋๋ง๋์ด์ผ ํฉ๋๋ค. ์์ผ๋๋ ์ปดํฌ๋ํธ ๋ด์์ ์ฌ์ฉํ์ธ์(6๋จ๊ณ ์ฐธ์กฐ).Sitemap ๋ฐ Robots.txt
Intlayer๋ ๋์ ์ผ๋ก ๋ก์ปฌ๋ผ์ด์ฆ๋ ์ฌ์ดํธ๋งต๊ณผ robots.txt ํ์ผ์ ์์ฑํ๊ธฐ ์ํ ์ ํธ๋ฆฌํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฌ์ดํธ๋งต
Intlayer๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ดํธ๋งต์ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ ๋ด์ฅ ์ฌ์ดํธ๋งต ์์ฑ๊ธฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ก์ปฌ๋ผ์ด์ฆ๋ ๊ฒฝ๋ก๋ฅผ ์ฒ๋ฆฌํ๊ณ ๊ฒ์ ์์ง์ ํ์ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
Intlayer์์ ์์ฑํ ์ฌ์ดํธ๋งต์
xhtml:link๋ค์์คํ์ด์ค(Hreflang XML ํ์ฅ)๋ฅผ ์ง์ํฉ๋๋ค. ์์ URL๋ง ๋์ดํ๋ ๊ธฐ๋ณธ ์ฌ์ดํธ๋งต ์์ฑ๊ธฐ์ ๋ฌ๋ฆฌ, Intlayer๋ ํ์ด์ง์ ๋ชจ๋ ์ธ์ด ๋ฒ์ (์:/about,/about?lang=fr,/about?lang=es) ๊ฐ์ ํ์ํ ์ํญํฅ ๋งํฌ๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฒ์ ์์ง์ด ์ฌ๋ฐ๋ฅธ ์ธ์ด ๋ฒ์ ์ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ์์๊ฒ ์์ธํํ๊ณ ์ ๊ณตํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.๋ชจ๋ ๋ก์ปฌ๋ผ์ด์ฆ๋ ๊ฒฝ๋ก๋ฅผ ํฌํจํ๋ ์ฌ์ดํธ๋งต์ ์์ฑํ๊ธฐ ์ํด
src/pages/sitemap.xml.ts๋ฅผ ์์ฑํฉ๋๋ค.src/pages/sitemap.xml.ts์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
Robots.txt
๊ฒ์ ์์ง ํฌ๋กค๋ง์ ์ ์ดํ๊ธฐ ์ํด
src/pages/robots.txt.ts๋ฅผ ์์ฑํฉ๋๋ค.src/pages/robots.txt.ts์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ปดํฌ๋ํธ์ ์ฝํ ์ธ ์ถ์ถ
์ ํ์ฌํญ๊ธฐ์กด codebase๊ฐ ์๋ค๋ฉด ์์ฒ ๊ฐ์ ํ์ผ์ ๋ณํํ๋ ๊ฒ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
์ด ํ๋ก์ธ์ค๋ฅผ ์ฝ๊ฒ ํ๊ธฐ ์ํด Intlayer๋ ์ปดํฌ๋ํธ๋ฅผ ๋ณํํ๊ณ ์ฝํ ์ธ ๋ฅผ ์ถ์ถํ๋ compiler / extractor๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด๋ฅผ ์ค์ ํ๋ ค๋ฉด
intlayer.config.tsํ์ผ์compiler์น์ ์ ์ถ๊ฐํ ์ ์์ต๋๋ค:intlayer.config.ts์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
import { type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { // ... Rest of your config compiler: { /** * ์ปดํ์ผ๋ฌ๊ฐ ํ์ฑํ๋์ด์ผ ํ๋์ง ๋ํ๋ ๋๋ค. */ enabled: true, /** * ์ถ๋ ฅ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ์ํฉ๋๋ค. */ output: ({ fileName, extension }) => `./${fileName}${extension}`, /** * ๋ณํ ํ ์ปดํฌ๋ํธ๋ฅผ ์ ์ฅํด์ผ ํ๋์ง ๋ํ๋ ๋๋ค. * * - `true`์ธ ๊ฒฝ์ฐ, ์ปดํ์ผ๋ฌ๋ ์ปดํฌ๋ํธ ํ์ผ์ ๋์คํฌ์ ๋ค์ ์์ฑํฉ๋๋ค. ๋ฐ๋ผ์ ๋ณํ์ ์๊ตฌ์ ์ด๋ฉฐ, ์ปดํ์ผ๋ฌ๋ ๋ค์ ํ๋ก์ธ์ค์์ ๋ณํ์ ๊ฑด๋๋๋๋ค. ์ด๋ฐ ์์ผ๋ก ์ปดํ์ผ๋ฌ๋ ์ฑ์ ๋ณํํ ํ ์ ๊ฑฐ๋ ์ ์์ต๋๋ค. * * - `false`์ธ ๊ฒฝ์ฐ, ์ปดํ์ผ๋ฌ๋ `useIntlayer()` ํจ์ ํธ์ถ์ ๋น๋ ์ถ๋ ฅ์ ์ฝ๋์๋ง ์ฃผ์ ํ๊ณ ๊ธฐ๋ณธ codebase๋ ๊ทธ๋๋ก ์ ์งํฉ๋๋ค. ๋ณํ์ ๋ฉ๋ชจ๋ฆฌ์์๋ง ์ํ๋ฉ๋๋ค. */ saveComponents: false, /** * ์ฌ์ ํค ์ ๋์ฌ */ dictionaryKeyPrefix: "", }, }; export default config;์ถ์ถ๊ธฐ๋ฅผ ์คํํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ๋ณํํ๊ณ ์ฝํ ์ธ ๋ฅผ ์ถ์ถํ์ธ์
bash์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
v9 ์ดํ๋ก
intlayerCompiler๋intlayerํ๋ฌ๊ทธ์ธ์ ํฌํจ๋์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์๋์ผ๋ก ์ถ๊ฐํ ํ์๊ฐ ์์ต๋๋ค.vite.config.ts๋ฅผ ์ ๋ฐ์ดํธํ์ฌintlayerCompilerํ๋ฌ๊ทธ์ธ์ ํฌํจํ์ธ์:vite.config.ts์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
bash์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
TypeScript ์ค์
Intlayer๋ ๋ชจ๋ ์ฆ๊ฐ(module augmentation)์ ์ฌ์ฉํ์ฌ TypeScript์ ์ด์ ์ ํ์ฉํจ์ผ๋ก์จ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ ๊ฒฌ๊ณ ํ๊ฒ ๋ง๋ญ๋๋ค.


TypeScript ์ค์ ์ ์๋ ์์ฑ๋ ํ์ ์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ์ธ์.
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
Git ์ค์
Intlayer๊ฐ ์์ฑํ ํ์ผ์ ๋ฌด์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฅผ ํตํด Git ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ปค๋ฐ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๋ฌด์ํ๋ ค๋ฉด .gitignore ํ์ผ์ ๋ค์ ์ง์นจ์ ์ถ๊ฐํ์ธ์:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
VS Code ํ์ฅ ํ๋ก๊ทธ๋จ
Intlayer ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ณต์ Intlayer VS Code ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ค์นํ ์ ์์ต๋๋ค.
VS Code Marketplace์์ ์ค์น
์ด ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ค์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค:
- ๋ฒ์ญ ํค ์๋ ์์ฑ.
- ๋๋ฝ๋ ๋ฒ์ญ์ ๋ํ ์ค์๊ฐ ์ค๋ฅ ๊ฐ์ง.
- ๋ฒ์ญ๋ ์ฝํ ์ธ ์ ์ธ๋ผ์ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ.
- ๋ฒ์ญ์ ์ฝ๊ฒ ์์ฑํ๊ณ ์ ๋ฐ์ดํธํ ์ ์๋ ๋น ๋ฅธ ์์ (Quick Actions).
ํ์ฅ ํ๋ก๊ทธ๋จ ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ Intlayer VS Code ํ์ฅ ํ๋ก๊ทธ๋จ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ ์์๋ณด๊ธฐ
๋ ์์ธํ ์๊ณ ์ถ๋ค๋ฉด ๋น์ฃผ์ผ ์๋ํฐ๋ฅผ ๊ตฌํํ๊ฑฐ๋ CMS๋ฅผ ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ๋ฅผ ์ธ๋ถํํ ์ ์์ต๋๋ค.
