JSON ๋ฐ์ดํฐ๋ฅผ LLM-friendly ๋งํฌ๋ค์ด์ผ๋ก ๋ณํํ๋ ํ ํ๋ฆฟ ๊ธฐ๋ฐ ๋๊ตฌ ๋ชจ์
์ด ๋ชจ๋ ธ๋ ํฌ๋ ๋ค์ ํจํค์ง๋ค์ ํฌํจํฉ๋๋ค:
JSON ๋ฐ์ดํฐ๋ฅผ LLM-friendly ๋งํฌ๋ค์ด์ผ๋ก ๋ณํํ๋ ํ ํ๋ฆฟ ๊ธฐ๋ฐ ์์ฑ๊ธฐ
- ๐ ๋ธ๋ผ์ฐ์ ์ Node.js ๋ชจ๋ ์ง์
- ๐ Liquid ํ ํ๋ฆฟ ๋ฌธ๋ฒ ์ง์
- ๐จ ํ ํ๋ฆฟ ์กฐํฉ ๊ธฐ๋ฅ (partials, layouts)
- ๐ TypeScript ์๋ฒฝ ์ง์
- โก Next.js, React, Vue, NestJS ๋ฑ ๋ชจ๋ ํ๋ ์์ํฌ ํธํ
npm install @comneed/textby๊ณต์ ESLint ์ค์ ๋ชจ์
@comneed/eslint-config/library- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฉ@comneed/eslint-config/next- Next.js์ฉ@comneed/eslint-config/react-internal- React ๋ด๋ถ์ฉ
๊ณต์ TypeScript ์ค์ ๋ชจ์
base.json- ๊ธฐ๋ณธ ์ค์ nextjs.json- Next.js ํ๋ก์ ํธ์ฉreact-library.json- React ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฉ
- Node.js 18 ์ด์
- pnpm 8.15.6 ์ด์
# ์์กด์ฑ ์ค์น
pnpm install
# ๋ชจ๋ ํจํค์ง ๋น๋
pnpm build
# ๊ฐ๋ฐ ๋ชจ๋๋ก ๋ชจ๋ ์ฑ ์คํ
pnpm devabiy/
โโโ packages/ # ๊ณต์ ํจํค์ง
โ โโโ textby/ # ๋ฉ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โ โโโ eslint/ # ESLint ์ค์
โ โโโ tsconfig/ # TypeScript ์ค์
โ
โโโ examples/ # ์์ ์ ํ๋ฆฌ์ผ์ด์
โ โโโ nextjs-app/ # Next.js + TextBy ํตํฉ
โ โโโ nestjs-app/ # NestJS + TextBy ํตํฉ
โ โโโ react-app/ # React SPA ์์
โ โโโ vue-app/ # Vue SPA ์์
โ
โโโ apps/ # ํ๋ก๋์
์ฑ (์ ํ์ฌํญ)
๊ฐ ์์ ๋ TextBy๋ฅผ ๋ค์ํ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
cd examples/nextjs-app
pnpm dev
# http://localhost:3002 ์ ์
# http://localhost:3002/llms.txt ์์ ์์ฑ๋ ๋งํฌ๋ค์ด ํ์ธ์ฃผ์ ๊ธฐ๋ฅ:
- App Router ์ฌ์ฉ
- ํ์ผ ๊ธฐ๋ฐ ํ ํ๋ฆฟ
- JSON ๋ฐ์ดํฐ ์๋ ๋ก๋ฉ
- ์ ์ ์์ฑ (
force-static)
cd examples/nestjs-app
pnpm dev
# http://localhost:3005 ์ ์
# http://localhost:3005/llms.txt ์์ API ๋ฌธ์ ํ์ธ์ฃผ์ ๊ธฐ๋ฅ:
- Controller์์ TextBy ์ฌ์ฉ
- API ๋ฌธ์ ์๋ ์์ฑ
- ํ์ผ ๊ธฐ๋ฐ ํ ํ๋ฆฟ
cd examples/react-app
pnpm dev
# http://localhost:3003 ์ ์์ฃผ์ ๊ธฐ๋ฅ:
- ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ๋์
- ์ธ๋ฉ๋ชจ๋ฆฌ ํ ํ๋ฆฟ
- ํ ํ๋ฆฟ ์กฐํฉ (partials)
- ์ค์๊ฐ ๋งํฌ๋ค์ด ์์ฑ
cd examples/vue-app
pnpm dev
# http://localhost:3004 ์ ์์ฃผ์ ๊ธฐ๋ฅ:
- Vue 3 Composition API
- ๋ฐ์ํ ๋งํฌ๋ค์ด ์์ฑ
- ์ธ๋ฉ๋ชจ๋ฆฌ ํ ํ๋ฆฟ
# ๋ชจ๋ ํจํค์ง ๋น๋
pnpm build
# ํน์ ํจํค์ง๋ง ๋น๋
pnpm build --filter=@comneed/textby# ๋ชจ๋ ํจํค์ง๋ฅผ watch ๋ชจ๋๋ก ์คํ
pnpm dev
# ํน์ ํจํค์ง๋ง watch
pnpm dev --filter=@comneed/textby# TextBy ํ
์คํธ ์คํ
cd packages/textby
pnpm test# ๋ชจ๋ ํจํค์ง ๋ฆฐํธ
pnpm lint
# ํน์ ํจํค์ง๋ง ๋ฆฐํธ
pnpm lint --filter=@comneed/textbypnpm format์ด ํ๋ก์ ํธ๋ Changesets๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ ๊ด๋ฆฌ์ ๋ฐฐํฌ๋ฅผ ์ํํฉ๋๋ค.
๋ณ๊ฒฝ์ฌํญ์ด ์์ ๋ changeset์ ์์ฑํฉ๋๋ค:
pnpm changeset๋ํํ ํ๋กฌํํธ๊ฐ ๋ํ๋๋ฉด:
- ๋ณ๊ฒฝํ ํจํค์ง ์ ํ (์คํ์ด์ค๋ฐ๋ก ์ ํ)
- ๋ฒ์ ํ์ ์ ํ (patch/minor/major)
- ๋ณ๊ฒฝ์ฌํญ ์์ฝ ์์ฑ
pnpm version-packages์ด ๋ช ๋ น์ด๋:
- ๊ฐ ํจํค์ง์
package.json๋ฒ์ ์ ๋ฐ์ดํธ CHANGELOG.md์๋ ์์ฑ/์ ๋ฐ์ดํธ- changeset ํ์ผ ์ ๊ฑฐ
pnpm release๋๋ ์๋์ผ๋ก:
# ๋น๋
pnpm build --filter=@comneed/textby
# ๋ฐฐํฌ
cd packages/textby
pnpm publish --access public- ๋น๋ ๋๊ตฌ: Turborepo
- ํจํค์ง ๊ด๋ฆฌ์: pnpm
- ๋ฒ์ ๊ด๋ฆฌ: Changesets
- ์ธ์ด: TypeScript
- ๋ฒ๋ค๋ฌ: tsup
- ํ ์คํธ: Vitest
- ์ด ์ ์ฅ์๋ฅผ Fork
- Feature ๋ธ๋์น ์์ฑ (
git checkout -b feature/amazing-feature) - ๋ณ๊ฒฝ์ฌํญ ์ปค๋ฐ (
git commit -m 'Add amazing feature') - ๋ธ๋์น์ Push (
git push origin feature/amazing-feature) - Pull Request ์์ฑ
MIT
- llmstxt.org - LLM-friendly ๋ฌธ์ ํ์ค
- LiquidJS - ํ ํ๋ฆฟ ์์ง
- Turborepo - ๋ชจ๋ ธ๋ ํฌ ๋๊ตฌ
AI ์ด์์คํดํธ๊ฐ ๋น์ ์ ํ๋ก์ ํธ๋ฅผ ์ดํดํ ์ ์๋๋ก /llms.txt ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํ์ธ์.
OpenAPI ์คํ์ด๋ JSON ๋ฐ์ดํฐ๋ก๋ถํฐ ์ฝ๊ธฐ ์ฌ์ด API ๋ฌธ์๋ฅผ ์์ฑํฉ๋๋ค.
๊ฐ์ธ ์ ๋ณด๋ฅผ JSON์ผ๋ก ๊ด๋ฆฌํ๊ณ ๋งํฌ๋ค์ด์ผ๋ก ๋ณํํ์ฌ ๋ค์ํ ํ๋ซํผ์ ๋ฐฐํฌํ์ธ์.
๋ณ๊ฒฝ ๋ก๊ทธ๋ฅผ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ก ๊ด๋ฆฌํ๊ณ ๋ณด๊ธฐ ์ข์ ๋งํฌ๋ค์ด์ผ๋ก ์์ฑํฉ๋๋ค.
A: ์๋์. ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ ์ธ๋ผ์ธ ํ ํ๋ฆฟ ๋ฌธ์์ด์ด๋ ์ธ๋ฉ๋ชจ๋ฆฌ ํ ํ๋ฆฟ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
A: LiquidJS ๋ฌธ๋ฒ์ ์ง์ํฉ๋๋ค. ๋ณ์, ๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ, ํํฐ ๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
A: ๋ค! export const dynamic = 'force-static'์ ์ฌ์ฉํ๋ฉด ๋น๋ ์์ ์ ์ ํ์ผ๋ก ์์ฑ๋ฉ๋๋ค.
A: ๋ค! textby.registerFilter()๋ฅผ ์ฌ์ฉํ์ฌ ์ปค์คํ
ํํฐ๋ฅผ ๋ฑ๋กํ ์ ์์ต๋๋ค.
Made with โค๏ธ for better LLM integration