์ž‘๊ฐ€:
    ์ƒ์„ฑ:2024-08-12๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ:2026-08-30

    Intlayer ์ž‘๋™ ๋ฐฉ์‹

    ๋ชฉ์ฐจ

    ๊ฐœ์š”

    Intlayer์˜ ์ฃผ์š” ์•„์ด๋””์–ด๋Š” ์ปดํฌ๋„ŒํŠธ๋ณ„ ์ฝ˜ํ…์ธ  ๊ด€๋ฆฌ๋ฅผ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, Intlayer์˜ ์•„์ด๋””์–ด๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค ์–ด๋””์—์„œ๋‚˜, ์ปดํฌ๋„ŒํŠธ์™€ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

    bash
    .
    โ””โ”€โ”€ Components
        โ””โ”€โ”€ MyComponent
            โ”œโ”€โ”€ index.content.ts
            โ””โ”€โ”€ index.tsx
    

    ์ด๋ฅผ ์œ„ํ•ด Intlayer์˜ ์—ญํ• ์€ ํ”„๋กœ์ ํŠธ์— ์กด์žฌํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ˜•์‹์˜ ์ฝ˜ํ…์ธ  ์„ ์–ธ ํŒŒ์ผ์„ ๋ชจ๋‘ ์ฐพ์•„๋‚ด๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์ „(dictionary)์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

    ๋”ฐ๋ผ์„œ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋‹จ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:

    • ๋นŒ๋“œ ๋‹จ๊ณ„
    • ํ•ด์„ ๋‹จ๊ณ„

    ์‚ฌ์ „ ๋นŒ๋“œ ๋‹จ๊ณ„

    ๋นŒ๋“œ ๋‹จ๊ณ„๋Š” ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

    • CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ npx intlayer build ์‹คํ–‰
    • vscode ํ™•์žฅ ์‚ฌ์šฉ
    • vite-intlayer ํŒจํ‚ค์ง€์™€ ๊ฐ™์€ ์•ฑ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋˜๋Š” Next.js์šฉ ๋™๋“ฑํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•. ์ด๋Ÿฌํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Intlayer๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘(๊ฐœ๋ฐœ)ํ•˜๊ฑฐ๋‚˜ ๋นŒ๋“œ(ํ”„๋กœ๋•์…˜)ํ•  ๋•Œ ์ž๋™์œผ๋กœ ์‚ฌ์ „์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
    1. ์ฝ˜ํ…์ธ  ํŒŒ์ผ ์„ ์–ธ

      • ์ฝ˜ํ…์ธ  ํŒŒ์ผ์€ TypeScript, ECMAScript, CommonJS ๋˜๋Š” JSON๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ์ฝ˜ํ…์ธ  ํŒŒ์ผ์€ ํ”„๋กœ์ ํŠธ ์–ด๋””์—์„œ๋‚˜ ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด ์œ ์ง€ ๊ด€๋ฆฌ์™€ ํ™•์žฅ์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ  ํŒŒ์ผ์˜ ํŒŒ์ผ ํ™•์žฅ์ž ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํ™•์žฅ์ž๋Š” *.content.{js|cjs|mjs|ts|tsx|json}์ด์ง€๋งŒ, ์„ค์ • ํŒŒ์ผ์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    2. ์‚ฌ์ „(dictionary) ์ƒ์„ฑ

      • ์‚ฌ์ „์€ ์ฝ˜ํ…์ธ  ํŒŒ์ผ์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Intlayer ์‚ฌ์ „์€ ํ”„๋กœ์ ํŠธ์˜ .intlayer/dictionaries ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
      • ์ด๋Ÿฌํ•œ ์‚ฌ์ „์€ ๋ชจ๋“  ์š”๊ตฌ๋ฅผ ์ถฉ์กฑํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    3. ์‚ฌ์ „ ํƒ€์ž… ์ƒ์„ฑ

    4. ์‚ฌ์ „ ํƒ€์ž… ์ƒ์„ฑ ์‚ฌ์ „(dictionary)์„ ๊ธฐ๋ฐ˜์œผ๋กœ Intlayer๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • ์‚ฌ์ „ ํƒ€์ž…์€ Intlayer์˜ ์ฝ˜ํ…์ธ  ์„ ์–ธ ํŒŒ์ผ(content declaration files)์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Intlayer ์‚ฌ์ „ ํƒ€์ž…์€ ํ”„๋กœ์ ํŠธ์˜ .intlayer/types ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

    • Intlayer ๋ชจ๋“ˆ ํ™•์žฅ(module augmentation)์€ Intlayer์— ์ถ”๊ฐ€ ํƒ€์ž…์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” TypeScript ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ์ˆ˜ ๋˜๋Š” ํ•„์š”ํ•œ ์ธ์ˆ˜๋ฅผ ์ œ์•ˆํ•˜์—ฌ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ํƒ€์ž… ์ค‘์—์„œ Intlayer ์‚ฌ์ „ ํƒ€์ž… ๋˜๋Š” ์–ธ์–ด ๊ตฌ์„ฑ ํƒ€์ž…์ด types/intlayer.d.ts ํŒŒ์ผ์— ์ถ”๊ฐ€๋˜๊ณ  ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด tsconfig.json ํŒŒ์ผ์ด ํ”„๋กœ์ ํŠธ์˜ types ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ์‚ฌ์ „ ํ•ด์„ ๋‹จ๊ณ„

    Intlayer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด useIntlayer ํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฝ˜ํ…์ธ ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    tsx
    const MyComponent = () => {
      const content = useIntlayer("my-component");
      return <div>{content.title}</div>;
    };
    

    ์ด ํ›…์€ ๋กœ์ผ€์ผ ๊ฐ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ˜„์žฌ ๋กœ์ผ€์ผ์— ๋Œ€ํ•œ ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งˆํฌ๋‹ค์šด ํ•ด์„, ๋ณต์ˆ˜ํ˜• ๊ด€๋ฆฌ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    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

    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 ๊ทœ์น™์œผ๋กœ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด์„ ํ‘œ์‹œํ•˜๊ณ , ์ •์  ์‚ฌ์ „ ํ‚ค ๋ฐ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ทœ์น™์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.