์ด ํ์ด์ง์ ์ํ๋ AI ์ด์์คํดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์๋ฅผ ์์ฝํฉ๋๋ค
๋ฒ์ ๊ธฐ๋ก
- "Intlayer CMS ๋ฌธ์์์ ๋ณ๋์ ํ์ด์ง๋ก ์ด๋"v9.0.02026. 7. 8.
- "๋ผ์ด๋ธ ๋๊ธฐํ ๋ฌธ์ ์ถ๊ฐ"v6.0.12025. 9. 22.
- "`hotReload` ํ๋๋ฅผ `liveSync`๋ก ๊ต์ฒด"v6.0.02025. 9. 4.
์ด ํ์ด์ง์ ์ฝํ ์ธ ๋ AI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ญ๋์์ต๋๋ค.
์์ด ์๋ณธ ๋ด์ฉ์ ์ต์ ๋ฒ์ ์ ๋ณด๊ธฐ์ด ๋ฌธ์๋ฅผ ๊ฐ์ ํ ์์ด๋์ด๊ฐ ์์ผ์๋ฉด GitHub์ ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํ์ฌ ์์ ๋กญ๊ฒ ๊ธฐ์ฌํด ์ฃผ์ธ์.
๋ฌธ์์ ๋ํ GitHub ๋งํฌ๋ฌธ์์ Markdown์ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
๋ผ์ด๋ธ ๋๊ธฐํ
๋ผ์ด๋ธ ๋๊ธฐํ๋ ์ฑ์ด ๋ฐํ์์ CMS ์ฝํ ์ธ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ ์ ์๊ฒ ํฉ๋๋ค. ์ฌ๋น๋๋ ์ฌ๋ฐฐํฌ๊ฐ ํ์ ์์ต๋๋ค. ํ์ฑํ๋๋ฉด ์ ๋ฐ์ดํธ๊ฐ ๋ผ์ด๋ธ ๋๊ธฐํ ์๋ฒ๋ก ์คํธ๋ฆฌ๋ฐ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฝ๋ ์ฌ์ ์ ๊ฐฑ์ ํฉ๋๋ค.
๋ชฉ์ฐจ
๋ผ์ด๋ธ ๋๊ธฐํ ํ์ฑํ
Intlayer ๊ตฌ์ฑ์ ์ ๋ฐ์ดํธํ์ฌ Live Sync๋ฅผ ํ์ฑํํ์ธ์:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
// ... ๊ธฐํ ๊ตฌ์ฑ ์ค์
editor: {
/**
* ๋ณ๊ฒฝ ์ฌํญ์ด ๊ฐ์ง๋๋ฉด ๋ก์ผ์ผ ๊ตฌ์ฑ์ ํซ ๋ฆฌ๋ก๋ฉํ ์ ์๋๋ก ํ์ฑํํฉ๋๋ค.
* ์๋ฅผ ๋ค์ด, ์ฌ์ ์ด ์ถ๊ฐ๋๊ฑฐ๋ ์
๋ฐ์ดํธ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ด
* ํ์ด์ง์ ํ์๋๋ ์ฝํ
์ธ ๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
*
* ํซ ๋ฆฌ๋ก๋ฉ์ ์๋ฒ์์ ์ง์์ ์ธ ์ฐ๊ฒฐ์ด ํ์ํ๊ธฐ ๋๋ฌธ์,
* `enterprise` ํ๋ ๊ณ ๊ฐ์๊ฒ๋ง ์ ๊ณต๋ฉ๋๋ค.
*
* ๊ธฐ๋ณธ๊ฐ: false
*/
liveSync: true,
},
dictionary: {
/**
* ์ฌ์ ์ด ์ด๋ป๊ฒ ๊ฐ์ ธ์ค๋์ง๋ฅผ ์ ์ดํฉ๋๋ค:
*
* - "fetch": ์ฌ์ ์ Live Sync API๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก ๊ฐ์ ธ์ต๋๋ค.
* useIntlayer๋ฅผ useDictionaryDynamic์ผ๋ก ๋์ฒดํฉ๋๋ค.
*
* ์ฐธ๊ณ : ๋ผ์ด๋ธ ๋ชจ๋๋ Live Sync API๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ ์ ๊ฐ์ ธ์ต๋๋ค. API ํธ์ถ์ด
* ์คํจํ๋ฉด ์ฌ์ ์ ๋์ ์ผ๋ก ๊ฐ์ ธ์ต๋๋ค.
* ์ฐธ๊ณ : ์๊ฒฉ ์ฝํ
์ธ ๊ฐ ์๊ณ "live" ํ๋๊ทธ๊ฐ ์๋ ์ฌ์ ๋ง ๋ผ์ด๋ธ ๋ชจ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
* ๋๋จธ์ง๋ ์ฑ๋ฅ์ ์ํด ๋์ ๋ชจ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
*/
importMode: "fetch",
},
};
export default config;
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ธ๊ธฐ ์ํด Live Sync ์๋ฒ๋ฅผ ์์ํ์ธ์:
๋ ๋ฆฝํ ์๋ฒ ์ฌ์ฉ ์์:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
--process ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ๋ฅผ ๋ณ๋ ฌ๋ก ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
Next.js ์ฌ์ฉ ์์:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
Vite ์ฌ์ฉ ์์:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
Live Sync ์๋ฒ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ธ๊ณ ๋์ฐฉํ๋ ์ ๋ฐ์ดํธ๋ ์ฝํ ์ธ ๋ฅผ ์๋์ผ๋ก ์ ์ฉํฉ๋๋ค.
CMS๋ก๋ถํฐ ๋ณ๊ฒฝ ์๋ฆผ์ ๋ฐ๊ธฐ ์ํด, Live Sync ์๋ฒ๋ ๋ฐฑ์๋์ SSE ์ฐ๊ฒฐ์ ์ ์งํฉ๋๋ค. CMS์์ ์ฝํ ์ธ ๊ฐ ๋ณ๊ฒฝ๋๋ฉด, ๋ฐฑ์๋๋ ์ ๋ฐ์ดํธ๋ฅผ Live Sync ์๋ฒ๋ก ์ ๋ฌํ๊ณ , Live Sync ์๋ฒ๋ ์๋ก์ด ์ฌ์ ์ ๊ธฐ๋กํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ํ์ ๋๋ ๋ธ๋ผ์ฐ์ ์๋ก๊ณ ์นจ ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ํ๋ฉฐ, ์ฌ๋น๋๊ฐ ํ์ํ์ง ์์ต๋๋ค.
ํ๋ก์ฐ ์ฐจํธ (CMS/๋ฐฑ์๋ -> Live Sync ์๋ฒ -> ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ -> ํ๋ก ํธ์๋):
์๋ ๋ฐฉ์:
๊ฐ๋ฐ ์ํฌํ๋ก์ฐ (๋ก์ปฌ)
- ๊ฐ๋ฐ ์ค์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋ ๋ชจ๋ ์๊ฒฉ ์ฌ์ ์ ๊ฐ์ ธ์ค๋ฏ๋ก ์ ๋ฐ์ดํธ๋ฅผ ๋น ๋ฅด๊ฒ ํ ์คํธํ ์ ์์ต๋๋ค.
- Next.js๋ก ๋ก์ปฌ์์ Live Sync๋ฅผ ํ ์คํธํ๋ ค๋ฉด ๊ฐ๋ฐ ์๋ฒ๋ฅผ ๋ํํ์ธ์:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
๊ฐ๋ฐ ์ค์ Intlayer๊ฐ Live import ๋ณํ์ ์ ์ฉํ๋๋ก ์ต์ ํ๋ฅผ ํ์ฑํํ์ธ์:
์ฝ๋๋ฅผ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
editor: {
applicationURL: "http://localhost:5173",
liveSyncURL: "http://localhost:4000",
liveSync: true,
},
dictionary: {
importMode: "fetch",
},
build: {
optimize: true, // ๊ธฐ๋ณธ๊ฐ: process.env.NODE_ENV === 'production'
},
};
export default config;
์ด ์ค์ ์ ๊ฐ๋ฐ ์๋ฒ๋ฅผ Live Sync ์๋ฒ์ ๋ํํ๊ณ , ์์ ์ ์๊ฒฉ ์ฌ์ ์ ๊ฐ์ ธ์ค๋ฉฐ, CMS์์ SSE๋ฅผ ํตํด ์ ๋ฐ์ดํธ๋ฅผ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ๋ณด๋ ค๋ฉด ํ์ด์ง๋ฅผ ์๋ก ๊ณ ์น์ธ์.
์ฐธ๊ณ ์ฌํญ ๋ฐ ์ ์ฝ ์กฐ๊ฑด
- ๋ผ์ด๋ธ ์ฑํฌ ์ถ์ฒ๋ฅผ ์ฌ์ดํธ ๋ณด์ ์ ์ฑ
(CSP)์ ์ถ๊ฐํ์ธ์. ๋ผ์ด๋ธ ์ฑํฌ URL์ด
connect-src(๋ฐ ๊ด๋ จ์ด ์๋ค๋ฉดframe-ancestors)์ ํ์ฉ๋์ด ์๋์ง ํ์ธํ์ธ์. - ๋ผ์ด๋ธ ์ฑํฌ๋ ์ ์ ์ถ๋ ฅ๊ณผ ํจ๊ป ์๋ํ์ง ์์ต๋๋ค. Next.js์ ๊ฒฝ์ฐ, ๋ฐํ์์ ์
๋ฐ์ดํธ๋ฅผ ๋ฐ์ผ๋ ค๋ฉด ํ์ด์ง๊ฐ ๋์ ์ด์ด์ผ ํฉ๋๋ค(์: ์ ์ฒด ์ ์ ์ ์ฉ ์ ์ฝ์ ํผํ๊ธฐ ์ํด
generateStaticParams,generateMetadata,getServerSideProps๋๋getStaticProps๋ฅผ ์ ์ ํ ์ฌ์ฉ). - CMS์์ ๊ฐ ์ฌ์ ์๋
liveํ๋๊ทธ๊ฐ ์์ต๋๋ค.live=true์ธ ์ฌ์ ๋ง ๋ผ์ด๋ธ ์ฑํฌ API๋ฅผ ํตํด ๊ฐ์ ธ์ค๋ฉฐ, ๋๋จธ์ง๋ ๋์ ์ผ๋ก ๊ฐ์ ธ์ ๋ฐํ์์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. liveํ๋๊ทธ๋ ๋น๋ ์ ๊ฐ ์ฌ์ ์ ๋ํด ํ๊ฐ๋ฉ๋๋ค. ๋น๋ ์ ์๊ฒฉ ์ฝํ ์ธ ๊ฐlive=true๋ก ํ์๋์ง ์์๋ค๋ฉด, ํด๋น ์ฌ์ ์ ๋ํด ๋ผ์ด๋ธ ์ฑํฌ๋ฅผ ํ์ฑํํ๋ ค๋ฉด ๋ค์ ๋น๋ํด์ผ ํฉ๋๋ค.- ๋ผ์ด๋ธ ์ฑํฌ ์๋ฒ๋
.intlayer์ ์ธ ์ ์์ด์ผ ํฉ๋๋ค. ์ปจํ ์ด๋ ํ๊ฒฝ์์๋/.intlayer์ ์ฐ๊ธฐ ๊ถํ์ด ์๋์ง ํ์ธํ์ธ์.
