์ด ํ์ด์ง์ ์ํ๋ AI ์ด์์คํดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์๋ฅผ ์์ฝํฉ๋๋ค
๋ฒ์ ๊ธฐ๋ก
- "'๋ผ์ด๋ธ ๋๊ธฐํ' ์น์
์ ๋ณ๋ ํ์ด์ง(live-sync.md)๋ก ์ด๋ํ๊ณ , ์ฌ๊ธฐ์๋ ๊ฐ๋จํ ์๊ฐ์ ๋งํฌ๋ง ๋จ๊น"v9.0.02026. 7. 8.
- "Self-Hosting ์น์
์ถ๊ฐ: Docker Compose ๋ถํธ์คํธ๋ฉ, ์๋น์ค ์ธ๋ฒคํ ๋ฆฌ, SDK ๊ตฌ์ฑ, ์ ํ์ ๊ธฐ๋ฅ ๋ฐ ์
๊ทธ๋ ์ด๋ ์ฐธ๊ณ ์ฌํญ"v9.0.02026. 6. 30.
- "ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ CMS ์ก์ธ์ค๋ฅผ ์ํ @intlayer/api SDK (createIntlayerCMS) ์น์
์ถ๊ฐ"v9.0.02026. 6. 29.
- "๋ผ์ด๋ธ ๋๊ธฐํ ๋ฌธ์ ์ถ๊ฐ"v6.0.12025. 9. 22.
- "`hotReload` ํ๋๋ฅผ `liveSync`๋ก ๊ต์ฒด"v6.0.02025. 9. 4.
- "์ด๋ ฅ ์ด๊ธฐํ"v5.5.102025. 6. 29.
์ด ํ์ด์ง์ ์ฝํ ์ธ ๋ AI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ญ๋์์ต๋๋ค.
์์ด ์๋ณธ ๋ด์ฉ์ ์ต์ ๋ฒ์ ์ ๋ณด๊ธฐ์ด ๋ฌธ์๋ฅผ ๊ฐ์ ํ ์์ด๋์ด๊ฐ ์์ผ์๋ฉด GitHub์ ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํ์ฌ ์์ ๋กญ๊ฒ ๊ธฐ์ฌํด ์ฃผ์ธ์.
๋ฌธ์์ ๋ํ GitHub ๋งํฌ๋ฌธ์์ Markdown์ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
Intlayer ์ฝํ ์ธ ๊ด๋ฆฌ ์์คํ (CMS) ๋ฌธ์
Intlayer CMS๋ Intlayer ํ๋ก์ ํธ์ ์ฝํ ์ธ ๋ฅผ ์ธ๋ถํํ ์ ์๊ฒ ํด์ฃผ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
์ด๋ฅผ ์ํด Intlayer๋ '์๊ฒฉ ์ฌ์ (distant dictionaries)' ๊ฐ๋ ์ ๋์ ํ์ต๋๋ค.

๋ชฉ์ฐจ
์๊ฒฉ ์ฌ์ ์ดํดํ๊ธฐ
Intlayer๋ '๋ก์ปฌ(local)' ์ฌ์ ๊ณผ '์๊ฒฉ(distant)' ์ฌ์ ์ ๊ตฌ๋ถํฉ๋๋ค.
'๋ก์ปฌ' ์ฌ์ ์ Intlayer ํ๋ก์ ํธ ๋ด์ ์ ์ธ๋ ์ฌ์ ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฒํผ์ ์ ์ธ ํ์ผ์ด๋ ๋ด๋น๊ฒ์ด์ ๋ฐ๊ฐ ์ด์ ํด๋นํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฝํ ์ธ ๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ฝํ ์ธ ๋ฅผ ์ธ๋ถํํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
'์๊ฒฉ' ์ฌ์ ์ Intlayer CMS๋ฅผ ํตํด ๊ด๋ฆฌ๋๋ ์ฌ์ ์ ๋๋ค. ์ด๋ ํ์ด ์น์ฌ์ดํธ์์ ์ง์ ์ฝํ ์ธ ๋ฅผ ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ฉฐ, ๋ํ A/B ํ ์คํธ ๊ธฐ๋ฅ๊ณผ SEO ์๋ ์ต์ ํ๋ฅผ ํ์ฉํ๋ ๋ฐ ๋ชฉ์ ์ด ์์ต๋๋ค.
๋น์ฃผ์ผ ์๋ํฐ vs CMS
Intlayer Visual ์๋ํฐ๋ ๋ก์ปฌ ์ฌ์ ์ ์ํ ์๊ฐ์ ํธ์ง๊ธฐ์์ ์ฝํ ์ธ ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ๋๊ตฌ์ ๋๋ค. ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ง๋ฉด, ์ฝํ ์ธ ๋ ์ฝ๋๋ฒ ์ด์ค์์ ๊ต์ฒด๋ฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ๋น๋๋๊ณ ํ์ด์ง๊ฐ ์ ์ฝํ ์ธ ๋ฅผ ํ์ํ๊ธฐ ์ํด ๋ค์ ๋ก๋๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ฐ๋ฉด์, Intlayer CMS๋ ์๊ฒฉ ์ฌ์ ์ ์ํ ์๊ฐ์ ํธ์ง๊ธฐ์์ ์ฝํ ์ธ ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ๋๊ตฌ์ ๋๋ค. ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ ธ๋ ์ฝํ ์ธ ๋ ์ฝ๋๋ฒ ์ด์ค์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์น์ฌ์ดํธ๋ ๋ณ๊ฒฝ๋ ์ฝํ ์ธ ๋ฅผ ์๋์ผ๋ก ํ์ํฉ๋๋ค.
ํตํฉํ๊ธฐ
ํจํค์ง ์ค์น ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋ ๊ด๋ จ ์น์ ์ ์ฐธ์กฐํ์ธ์:
Next.js์ ํตํฉํ๊ธฐ
Next.js์ ํตํฉํ๋ ค๋ฉด ์ค์น ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
Create React App๊ณผ ํตํฉํ๊ธฐ
Create React App๊ณผ ํตํฉํ๋ ค๋ฉด ์ค์น ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
Vite + React์ ํตํฉํ๊ธฐ
Vite + React์ ํตํฉํ๋ ค๋ฉด ์ค์น ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
๊ตฌ์ฑ
Intlayer CMS์ ๋ก๊ทธ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ธ์:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ด๋ ๊ฒ ํ๋ฉด ๊ธฐ๋ณธ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ ค ์ธ์ฆ ํ๋ก์ธ์ค๋ฅผ ์๋ฃํ๊ณ Intlayer ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ํ์ํ ์๊ฒฉ ์ฆ๋ช (Client ID ๋ฐ Client Secret)์ ๋ฐ์ ์ ์์ต๋๋ค.
Intlayer ๊ตฌ์ฑ ํ์ผ์์ CMS ์ค์ ์ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
// ... ๊ธฐํ ๊ตฌ์ฑ ์ค์
editor: {
/**
* ํ์
*
* ์ ํ๋ฆฌ์ผ์ด์
์ URL์
๋๋ค.
* ์ด URL์ ์๊ฐ์ ํธ์ง๊ธฐ๊ฐ ๋์์ผ๋ก ํ๋ URL์
๋๋ค.
*/
applicationURL: process.env.INTLAYER_APPLICATION_URL,
/**
* ํ์
*
* ํธ์ง๊ธฐ๋ฅผ ํ์ฑํํ๋ ค๋ฉด ํด๋ผ์ด์ธํธ ID์ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ์ด ํ์ํฉ๋๋ค.
* ์ด๋ฅผ ํตํด ์ฝํ
์ธ ๋ฅผ ํธ์งํ๋ ์ฌ์ฉ์๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
* Intlayer ๋์๋ณด๋ - ํ๋ก์ ํธ(https://app.intlayer.org/projects)์์ ์ ํด๋ผ์ด์ธํธ๋ฅผ ์์ฑํ์ฌ ์ป์ ์ ์์ต๋๋ค.
* clientId: process.env.INTLAYER_CLIENT_ID,
* clientSecret: process.env.INTLAYER_CLIENT_SECRET,
*/
clientId: process.env.INTLAYER_CLIENT_ID,
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
/**
* ์ ํ ์ฌํญ
*
* Intlayer CMS๋ฅผ ์์ฒด ํธ์คํ
ํ๋ ๊ฒฝ์ฐ, CMS์ URL์ ์ค์ ํ ์ ์์ต๋๋ค.
*
* Intlayer CMS์ URL์
๋๋ค.
* ๊ธฐ๋ณธ๊ฐ์ https://intlayer.org ๋ก ์ค์ ๋์ด ์์ต๋๋ค.
*/
cmsURL: process.env.INTLAYER_CMS_URL,
/**
* ์ ํ ์ฌํญ
*
* Intlayer CMS๋ฅผ ์์ฒด ํธ์คํ
ํ๋ ๊ฒฝ์ฐ, ๋ฐฑ์๋์ URL์ ์ค์ ํ ์ ์์ต๋๋ค.
*
* Intlayer CMS์ ๋ฐฑ์๋ URL์
๋๋ค.
* ๊ธฐ๋ณธ๊ฐ์ https://back.intlayer.org ๋ก ์ค์ ๋์ด ์์ต๋๋ค.
*/
backendURL: process.env.INTLAYER_BACKEND_URL,
},
};
export default config;
ํด๋ผ์ด์ธํธ ID์ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ์ด ์๋ ๊ฒฝ์ฐ, Intlayer ๋์๋ณด๋ - ํ๋ก์ ํธ์์ ์ ํด๋ผ์ด์ธํธ๋ฅผ ์์ฑํ์ฌ ์ป์ ์ ์์ต๋๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ธํ๋ ค๋ฉด ๊ตฌ์ฑ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
CMS ์ฌ์ฉํ๊ธฐ
๊ตฌ์ฑ ํธ์ํ๊ธฐ
Intlayer CMS๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด intlayer CLI ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
intlayer.config.ts๊ตฌ์ฑ ํ์ผ์์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ,--env์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ํ๊ฒฝ์ ์ง์ ํ ์ ์์ต๋๋ค:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ด ๋ช ๋ น์ด๋ ๊ตฌ์ฑ์ Intlayer CMS์ ์ ๋ก๋ํฉ๋๋ค.
์ฌ์ ํธ์ํ๊ธฐ
๋ก์ผ์ผ ์ฌ์ ์ ์๊ฒฉ ์ฌ์ ์ผ๋ก ๋ณํํ๋ ค๋ฉด intlayer CLI ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
intlayer.config.ts๊ตฌ์ฑ ํ์ผ์์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ--env์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ํ๊ฒฝ์ ์ง์ ํ ์ ์์ต๋๋ค:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ด ๋ช ๋ น์ ์ด๊ธฐ ์ฝํ ์ธ ์ฌ์ ์ ์ ๋ก๋ํ์ฌ Intlayer ํ๋ซํผ์ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ธ์ค๊ณ ํธ์งํ ์ ์๋๋ก ํฉ๋๋ค.
์ฌ์ ํธ์ง
๊ทธ๋ฐ ๋ค์ Intlayer CMS์์ ์ฌ์ ์ ๋ณด๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
@intlayer/api SDK๋ฅผ ์ฌ์ฉํ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ์ก์ธ์ค
CLI ๋ฐ ์๊ฐ์ ํธ์ง๊ธฐ๋ฅผ ๋์ด, Intlayer๋ @intlayer/api ํจํค์ง์ ํ์
์ด ์ง์ ๋ SDK๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด CMS๋ฅผ ํค๋๋ฆฌ์ค ์ฝํ
์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ทจ๊ธํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ฌ์ ์ ๊ฐ์ ธ์ค๋ฉฐ, ์์ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์
, ์คํฌ๋ฆฝํธ ๋๋ CI ํ์ดํ๋ผ์ธ์์ ์ง์ ํธ์ํ๊ฑฐ๋ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค.
SDK๋ ์ธ์ฆ์ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. clientId ๋ฐ clientSecret์ด (Intlayer ๊ตฌ์ฑ ๋๋ ํ๊ฒฝ์์) ์ฌ์ฉ ๊ฐ๋ฅํ ํ, OAuth2 ์ก์ธ์ค ํ ํฐ์ ์๋์ผ๋ก ํ๋ํ๊ณ ์๋ก ๊ณ ์น๋ฉฐ ๋ชจ๋ ์์ฒญ์ ์๋ช
ํฉ๋๋ค.
์ค์น
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์๋ ๋ฐฉ์: ์ธ์ฆ๊ธฐ + ์๋ํฌ์ธํธ
SDK๋ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์๊ฒ ์ ์งํ๊ธฐ ์ํด ์๋์ ์ผ๋ก ๋ ๊ฐ์ ๊ฐ๋ณ ์ํฌํธ๋ก ๋ถ๋ฆฌ๋์ด ์์ต๋๋ค:
createIntlayerCMSโ ๊ฒฝ๋ ์ธ์ฆ๊ธฐ๋ฅผ ์์ฑํฉ๋๋ค. ์๊ฒฉ ์ฆ๋ช ๊ณผ ๊ด๋ฆฌ๋๋ ์ก์ธ์ค ํ ํฐ๋ง ํฌํจํ๋ฉฐ, ํน์ ๋๋ฉ์ธ์ ๋ํด์๋ ์์ง ๋ชปํฉ๋๋ค.dictionaryEndpoint,projectEndpoint, โฆ โ ๋๋ฉ์ธ๋ณ ์๋ํฌ์ธํธ ๋ฐ์ธ๋๋ก, ๊ฐ๊ฐ ์์ฒด ํ์ ๊ฒฝ๋ก (@intlayer/api/dictionary,@intlayer/api/project, โฆ)์์ ์ํฌํธ๋ฉ๋๋ค. ํ์ํ ์๋ํฌ์ธํธ์ ์ธ์ฆ๊ธฐ๋ฅผ ์ ๋ฌํฉ๋๋ค.
๊ฐ ์๋ํฌ์ธํธ๊ฐ ๊ฐ๋ณ์ ์ผ๋ก ์ํฌํธ๋๋ฏ๋ก, ๋ฒ๋ค์๋ ์ค์ ๋ก ์ฌ์ฉํ๋ ๋๋ฉ์ธ๋ง ํฌํจ๋ฉ๋๋ค. dictionaryEndpoint๋ฅผ ์ํฌํธํด๋ ํ๋ก์ ํธ, AI ๋๋ ๋ค๋ฅธ ๋๋ฉ์ธ ํด๋ผ์ด์ธํธ๊ฐ ํจ๊ป ํฌํจ๋์ง ์์ต๋๋ค.
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
WARNING CMS ์๊ฒฉ ์ฆ๋ช (clientId/clientSecret)์ ์ฝํ ์ธ ์ ๋ํ ์ฐ๊ธฐ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค. ์ธ์ฆ๊ธฐ๋ ์๋ฒ ์ธก์์๋ง ์์ฑํด์ผ ํฉ๋๋ค (์๋ฒ ์ก์ , ๋ผ์ฐํธ ํธ๋ค๋ฌ, ์คํฌ๋ฆฝํธ, CI). ํด๋ผ์ด์ธํธ ์ธก ์ฝ๋์ ์ํฌํธํ๊ฑฐ๋ ๋ธ๋ผ์ฐ์ ์ ์๊ฒฉ ์ฆ๋ช ์ ๋ ธ์ถํ์ง ๋ง์ญ์์ค.
๋น๋ ์๊ฐ ๊ตฌ์ฑ์ ์์กดํ์ง ์์ผ๋ ค๋ฉด ์๊ฒฉ ์ฆ๋ช ์ ๋ช ์์ ์ผ๋ก ์ ๋ฌํ์ธ์:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
Intlayer Dashboard - Projects์์ ์ ์ก์ธ์ค ํค๋ฅผ ์์ฑํ์ฌ ์๊ฒฉ ์ฆ๋ช ์ ์ป์ผ์ธ์.
ํ๋ก์ ํธ ๊ฐ์ ธ์ค๊ธฐ
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ฌ์ ๊ฐ์ ธ์ค๊ธฐ
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ฌ์ ํธ์ ๋ฐ ์ ๋ฐ์ดํธ
CMS๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ๋ฅผ ๋ค์ ์์ฑํฉ๋๋ค:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
ํ: ๋ฐ์ธ๋ฉ๋ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ๋ฐ๋ณต์ ํผํ์ธ์:
typescript์ฝ๋ ๋ณต์ฌ์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
๋จ์ผ ๋ฉ์๋ ์ถ์ถ
๋ชจ๋ ์๋ํฌ์ธํธ ๋ฉ์๋๋ ์ด๋ฏธ ์ธ์ฆ๋์ด ์์ผ๋ฉฐ ๋ ๋ฆฝ์ ์ ๋๋ค (์์ฒด ํ ํฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ๊ฐ์ง). ๋ฐ๋ผ์ ๋ฉ์๋๋ฅผ ์ถ์ถํ์ฌ ์ ๋ฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ข ์์ฑ์ผ๋ก ์ฃผ์ ํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
๋ผ์ด๋ธ ๋๊ธฐํ
๋ผ์ด๋ธ ๋๊ธฐํ๋ ์ฑ์ด ๋ฐํ์์ CMS ์ฝํ ์ธ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ ์ ์๊ฒ ํฉ๋๋ค. ์ฌ๋น๋๋ ์ฌ๋ฐฐํฌ๊ฐ ํ์ ์์ต๋๋ค. ํ์ฑํ๋๋ฉด ์ ๋ฐ์ดํธ๊ฐ ๋ผ์ด๋ธ ๋๊ธฐํ ์๋ฒ๋ก ์คํธ๋ฆฌ๋ฐ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฝ๋ ์ฌ์ ์ ๊ฐฑ์ ํฉ๋๋ค.
์ ์ฒด ์ค์ ๊ฐ์ด๋(๊ตฌ์ฑ ํ์ฑํ, Live Sync ์๋ฒ ์์, ๋ก์ปฌ ๊ฐ๋ฐ ์ํฌํ๋ก, ์ ์ฝ ์ฌํญ)๋ Live Sync ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์์ฒด ํธ์คํ
Intlayer๋ ์์ฒด ์ธํ๋ผ์์ ์์ ํ ์คํ๋ ์ ์์ต๋๋ค. ํ ์ค์ ๋ช ๋ น์ด๋ก Docker Compose๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด ์คํ(๋์๋ณด๋, API, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๊ฐ์ฒด ์คํ ๋ฆฌ์ง ๋ฐ ์ด๋ฉ์ผ)์ ๋ถํธ์คํธ๋ฉํ ์ ์์ต๋๋ค:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
์ ์ฒด ์ค์ ๊ฐ์ด๋, ํ๊ฒฝ ๋ณ์ ์ฐธ์กฐ, ์ ๊ทธ๋ ์ด๋ ์ง์นจ ๋ฐ ๋ฐฑ์ /๋ณต์ ์ ์ฐจ๋ ์์ฒด ํธ์คํ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
๋๋ฒ๊ทธ
CMS์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ค์์ ํ์ธํ์ธ์:
์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ ์ค์ธ์ง ํ์ธํ์ธ์.
editor์ค์ ์ด Intlayer ๊ตฌ์ฑ ํ์ผ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์ด ์๋์ง ํ์ธํ์ธ์.- ํ์ ํ๋:
- ์ ํ๋ฆฌ์ผ์ด์
URL์ ์๋ํฐ ๊ตฌ์ฑ(
applicationURL)์ ์ค์ ํ ๊ฐ๊ณผ ์ผ์นํด์ผ ํฉ๋๋ค. CMS URL
ํ๋ก์ ํธ ๊ตฌ์ฑ์ด Intlayer CMS์ ํธ์๋์๋์ง ํ์ธํ์ธ์.
๋น์ฃผ์ผ ์๋ํฐ๋ iframe์ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ๋ฅผ ํ์ํฉ๋๋ค. ์น์ฌ์ดํธ์ ์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP)์ด CMS URL์
frame-ancestors๋ก ํ์ฉํ๋์ง ํ์ธํ์ธ์(๊ธฐ๋ณธ๊ฐ์ 'https://app.intlayer.org'). ์๋ํฐ ์ฝ์์์ ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํ์ธ์.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
๋น์ฃผ์ผ ์๋ํฐ๋ ๋ก์ปฌ ์ฌ์ ์ ํธ์งํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ๋๋ฒ ์ด์ค์ ๋ค์ ๊ธฐ๋กํ๋ฏ๋ก, ์ฑ์ด ๋ค์ ๋น๋๋๊ณ ์ ์์ ์ธ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ ๋ฐฐํฌ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค. CMS๋ ์๊ฒฉ ์ฌ์ ์ ํธ์งํฉ๋๋ค: ๋ณ๊ฒฝ ์ฌํญ์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ฑด๋๋ฆฌ์ง ์์ผ๋ฉฐ ์คํ ์ค์ธ ์น์ฌ์ดํธ๊ฐ ๋ฐฐํฌ ์์ด ์ฆ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ํฉ๋๋ค. ํ์์๋ ๋ ๊ฐ์ง๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ฆ, ๊ฐ๋ฐ์๊ฐ ์์ ํ๋ UI ์ฝํ ์ธ ์๋ ์๋ํฐ๋ฅผ ์ฌ์ฉํ๊ณ ๋ง์ผํ ํ์ด ๋งค์ฃผ ๋ณ๊ฒฝํ๋ ์ฝํ ์ธ ์๋ CMS๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ค์์คํ์ด์ค ๊ธฐ๋ฐ ์ค์ ๋ณด๋ค ํจ์ฌ ์ ์ต๋๋ค. ํ์ด์ง๋ ๋ ๋๋งํ์ง ์๋ ์ธ์ด์ ์นดํ๋ก๊ทธ๋ฅผ ์ ๋ ๋ค์ด๋ก๋ํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋ฒ ๋ ๋๋ง ๋งํฌ์
์ ์๋ฒ์์ ์ฝํ
์ธ ๋ฅผ ํ์ธํ๊ณ , ๋น๋ ํ์ ์ปดํ์ผ๋ฌ๋ 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๊ท์น์ผ๋ก ํ๋์ฝ๋ฉ๋ ๋ฌธ์์ด์ ํ์ํ๊ณ , ์ ์ ์ฌ์ ํค ๋ฐ ์ฌ์ฉ๋์ง ์๋ ์ฝํ ์ธ ์ ๋ํ ์ถ๊ฐ ๊ท์น์ ์ ๊ณตํฉ๋๋ค.
