๋ณธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ชฉํ‘œ๋Š” ๋‚ด๊ฐ€ ๊ธ€์„ ์“ฐ๊ณ , ๊ด€๋ฆฌํ•˜๊ณ , ์›ํ•˜๋Š” ํ˜•ํƒœ์˜ ์›น์‚ฌ์ดํŠธ์— ๋ฐœํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์€ ๋ธ”๋กœ๊ทธ ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์€ ์—†์—ˆ์ง€๋งŒ, ์•„๋งˆ ํ‰์†Œ ๋ง‰์—ฐํ•˜๊ฒŒ๋‚˜๋งˆ AI Agent๊ฐ€ ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ถ€๋กœ ๋™์ž‘ํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์‹ถ์–ดํ•˜๋˜ ๋งˆ์Œ์ด ํˆฌ์˜๋˜์—ˆ์„์ง€๋„ ๋ชจ๋ฅธ๋‹ค. ๋งˆ์นจ ์‹œ์ž‘ํ•œ LilysAI Ambassador ํ™œ๋™์ด ๊ทธ ์‹œ์ž‘ ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค.

LilysAI Ambassador ํ™œ๋™

์ฒ˜์Œ ์ƒ๊ฐํ–ˆ๋˜ ๊ตฌ์„ฑ์€ ๋‹จ์ˆœํ–ˆ๋‹ค. ๊ธ€ ์ „์ฒด๋ฅผ ์ฝ๊ณ  description์ด๋‚˜ ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ฑฐ๋‚˜, ๊ธด ๊ธ€์„ ๋ช‡ ์ค„๋กœ ์š”์•ฝํ•˜๊ฑฐ๋‚˜, ์™ธ๋ถ€ ๋งํฌ์˜ Open Graph ์ •๋ณด๋งŒ ๋ณด์—ฌ์ฃผ๋Š” ๋Œ€์‹  ์‹ค์ œ ๋งํฌ์˜ ๋‚ด์šฉ์„ ์ฝ์–ด ๋” ์˜๋ฏธ ์žˆ๋Š” Preview๋ฅผ ๋งŒ๋“œ๋Š” ์ •๋„์˜€๋‹ค. ์ฒ˜์Œ์—๋Š” ์ด ๊ธฐ๋Šฅ๋“ค์„ ํ•˜๋‚˜์”ฉ ๊ตฌํ˜„ํ•˜๋ฉด ๋ธ”๋กœ๊ทธ ์‹œ์Šคํ…œ๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์™„์„ฑ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์ฒซ ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ•˜์ž AI๋ณด๋‹ค ๋จผ์ € ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค.

์ฒซ ํ”„๋กœํ† ํƒ€์ž…์€ ๊ธฐ๋Šฅ๋ณด๋‹ค ๊ธฐ๋ฐ˜์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋” ๋“ค์—ˆ๋‹ค

PayloadPayload: The Next.js Headless CMS and App FrameworkPayload: The Next.jsBuilt with TypeScriptPayload๋Š” ์–ด๋–ค ์„œ๋น„์Šค์ธ๊ฐ€์š”?

์ดˆ๊ธฐ์—๋Š” Payload CMS์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, visual editor๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์‹คํ—˜ํ–ˆ๋‹ค. CMS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๋ฌธ์ œ์˜€๋˜ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ์ž˜ ๊ฐ–์ถฐ์ง„ CMS๋ผ๋ฉด ์ฝ˜ํ…์ธ  ๊ด€๋ฆฌ์— ํ•„์š”ํ•œ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ด๋ฏธ ์ œ๊ณตํ•œ๋‹ค.

๋ฌธ์ œ๋Š” ์ง€๊ธˆ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์ž‘์€ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์˜€๋‹ค๋Š” ์ ์ด์—ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ํ•˜๋‚˜๋ฅผ ์‹œํ—˜ํ•ด ๋ณด๋ ค๊ณ  ํ•ด๋„ ๊ทธ ๊ธฐ๋Šฅ์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์— ์ €์žฅ ๋ฐฉ์‹, editor integration, schema, ๋ณ€ํ™˜ ๊ณผ์ •์ฒ˜๋Ÿผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ณ  ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๊ฒƒ๋“ค์ด ๊ณ„์† ์ƒ๊ฒผ๋‹ค. ๋‚ด๊ฐ€ ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์ƒˆ๋กœ์šด publishing workflow์™€ AI ๊ธฐ๋Šฅ์ด ์‹ค์ œ๋กœ ์œ ์šฉํ•œ์ง€์˜€๋Š”๋ฐ, ์ดˆ๊ธฐ prototype์„ ๋งŒ๋“œ๋Š” ๊ณผ์ • ์ž์ฒด๊ฐ€ ์ ์  ๋ณ‘๋ชฉ์ด ๋˜๊ณ  ์žˆ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์‹œ์Šคํ…œ์„ ์กฐ๊ธˆ ๋” ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ๋‹ค. ํ˜„์žฌ์˜ canonical content๋Š” frontmatter์™€ assets๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” Markdown/MDX ๊ณ„์—ด ํŒŒ์ผ์ด๋‹ค. Git commit์ด ๊ณต์œ  ๊ฐ€๋Šฅํ•œ revision์ด ๋˜๊ณ , Site๋Š” ๊ทธ revision์˜ ํŒŒ์ผ์„ ์ง์ ‘ ์†Œ๋น„ํ•œ๋‹ค.

Obsidian / IDE / Agent
        โ†“
 Markdown / MDX + assets
        โ†“
   Docs repository
        โ†“
      Site
        โ†“
  GitHub Pages

์—ฌ๊ธฐ์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ Engine์ด ๊ฐ™์€ document workspace๋ฅผ ํ›„์ฒ˜๋ฆฌํ•œ๋‹ค.

optional Engine processing
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’ same document workspace
obsidian.mdํ™ˆ - Obsidian ๋„์›€๋งํ™ˆ - Obsidian ๋„์›€๋งObsidian์€ ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์ธ๊ฐ€์š”?Obsidian์€ ๋…ธํŠธ ์ž‘์„ฑ ๋ฐ ๊ด€๋ฆฌ

๊ธ€์„ ์ž‘์„ฑํ•  ๋•Œ๋Š” ์ฃผ๋กœ Obsidian์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, Obsidian ์ž์ฒด๊ฐ€ ์‹œ์Šคํ…œ์˜ ์›๋ณธ์€ ์•„๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ์˜๋ฏธ๋ฅผ ๋ณด์กดํ•˜๋ฉด์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด IDE๋‚˜ ๋‹ค๋ฅธ editor, Agent ์—ญ์‹œ ๊ฐ™์€ ์œ„์น˜์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.


Repository๋ฅผ ์—ญํ• ๋ณ„๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์ฒ˜์Œ์—๋Š” ๊ด€๋ฆฌ๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š์•„ ์–ด๋ ค์› ์ง€๋งŒ, ์ด ๊ตฌ์กฐ๋„ ๋‚˜๋ฆ„๋Œ€๋กœ์˜ ์žฅ์ ์€ ์žˆ์—ˆ๋‹ค. ์–ด๋–ค ๊ธฐ๋Šฅ์ด ๊ธ€ ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋Š”์ง€, ์–ด๋–ค ๊ธฐ๋Šฅ์ด derived data๋ฅผ ๋งŒ๋“œ๋Š”์ง€, ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์ตœ์ข…์ ์œผ๋กœ ๊ทธ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š”์ง€๋ฅผ ์กฐ๊ธˆ์”ฉ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๊ตฌ์กฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ณ  ๋‚˜์„œ์•ผ ์ฒ˜์Œ ์ƒ๊ฐํ–ˆ๋˜ AI ๊ธฐ๋Šฅ์„ ์–ด๋””์— ๋„ฃ์–ด์•ผ ํ• ์ง€๋„ ์กฐ๊ธˆ์”ฉ ๋ณด์ด๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

์ฒซ AI ๊ธฐ๋Šฅ์€ ๊ฐ€์žฅ ์‹ธ๊ฒŒ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์— ๋„ฃ์—ˆ๋‹ค

๊ฐ€์žฅ ๋จผ์ € ๊ตฌํ˜„ํ•œ ๊ฒƒ์€ article frontmatter enrichment์˜€๋‹ค.

Engine #23 ์—์„œ๋Š” ๋ฌธ์„œ ๋ณธ๋ฌธ๊ณผ ์ด๋ฏธ ์ž‘์„ฑ๋˜์–ด ์žˆ๋Š” metadata๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋น„์–ด ์žˆ๋Š” title, description, tags๋ฅผ ๋ชจ๋ธ์ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๊ฑฐ์ฐฝํ•œ Agent orchestration์ด ํ•„์š”ํ•˜์ง€ ์•Š์•˜๋‹ค.

document
   โ†“
missing field detection
   โ†“
model inference (Ollama)
   โ†“
structured result validation
   โ†“
patch only unset fields
Ollama์˜ฌ๋ผ๋งˆ์˜ ๋ฌธ์„œ์˜ฌ๋ผ๋งˆ(Ollama)๋Š” ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๋Œ€๊ทœ๋ชจ์–ธ์–ด ๋ชจ๋ธ(LLM) ์‹คํ–‰์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ํˆด๊ฐœ๋ฐœ์ž๋“ค์ด AI ์•ฑ ๊ตฌ์ถ•์— ํ™œ์šฉ ๊ฐ€๋Šฅ

Ollama๋ฅผ ํ™œ์šฉํ•ด ๊ฒฝ๋Ÿ‰ ๋ชจ๋ธ์„ ๋กœ์ปฌ๋กœ ์šด์šฉํ•˜๊ธฐ๋กœ ์„ ํƒํ•œ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ๋‹จ์ˆœํ–ˆ๋‹ค. ๋ณ„๋„์˜ API ๋น„์šฉ์ด ๋“ค์ง€ ์•Š์•˜๊ณ , ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‘๋‹ตํ•  ํ•„์š”๋„ ์—†์—ˆ๊ณ , ๋ฌด์—‡๋ณด๋‹ค ํ•˜๋“œ์›จ์–ด ์ŠคํŽ™์— ์—ฌ์œ ๊ฐ€ ๋งŽ์ง€ ์•Š์•˜๋‹ค. ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•œ ๋’ค ํ•œ ๋ฒˆ ์‹คํ–‰ํ•ด์„œ metadata๋ฅผ ์ฑ„์šฐ๋Š” ์ž‘์—…์ด๋ผ๋ฉด ์ˆ˜ ์ดˆ๋‚˜ ์ˆ˜์‹ญ ์ดˆ์˜ inference ์‹œ๊ฐ„์ด ์ œํ’ˆ ๊ฒฝํ—˜์— ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋ฌผ๋ก  ๊ฐ™์€ ์ž‘์—…์„ ์ถฉ๋ถ„ํ•œ context์™€ ํ•จ๊ป˜ ๋” ์ข‹์€ model์— ๋งก๊ธด๋‹ค๋ฉด ๋” ์ข‹์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” token๊ณผ computing resource๋Š” ๋ฌดํ•œํ•˜์ง€ ์•Š๋‹ค. ํ˜„์žฌ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ•˜๋“œ์›จ์–ด ์•ˆ์—์„œ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์€ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ณ , ๋ชจ๋ธ์ด ํ•ด์•ผ ํ•  ์ž‘์—…์˜ ๋ฒ”์œ„๋ฅผ ์ขํžˆ๋Š” ํŽธ์ด ์ด ํ”„๋กœ์ ํŠธ์—๋Š” ํ˜„์‹ค์ ์ด์—ˆ๋‹ค. AI๋Š” ์ž˜ ๊ตฌ์กฐํ™”๋œ ์‹œ์Šคํ…œ๊ณผ ์ •์ฑ… ์•ˆ์—์„œ ์ ์ ˆํ•œ scope์™€ context๋ฅผ ๋ฐ›์•˜์„ ๋•Œ ๋” ์ข‹์€ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ถฉ๋ถ„ํ•œ ๋ชจ๋ธ๊ณผ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด Agent์—๊ฒŒ ๋” ๋„“์€ ์ž์œจ์„ฑ์„ ์ฃผ๋Š” ์‹คํ—˜๋„ ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์—์„œ ์ฒ˜์Œ ํ•„์š”ํ–ˆ๋˜ ๊ฒƒ์€ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌธ์„œ์—์„œ ๋ช‡ ๊ฐœ์˜ ๋ฐ˜๋ณต์ ์ธ ๊ฐ’์„ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์™ธ๋ถ€ ๋งํฌ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด์„œ ์ƒํ™ฉ์ด ๋‹ฌ๋ผ์กŒ๋‹ค. ๋กœ์ปฌ ๋ฌธ์„œ ์•ˆ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ •๋ณด๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ, URL ํ•˜๋‚˜๋งŒ ๊ฐ€์ง€๊ณ  ์™ธ๋ถ€ ์ž๋ฃŒ์˜ ๋‚ด์šฉ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ์˜€๋‹ค.

ํ˜„ ์ƒํ™ฉ์—์„œ LilysAI ์œ ์šฉ์„ฑ์€ ์™ธ๋ถ€ ์ž๋ฃŒ๋ฅผ ์ฝ๋Š” ๋Šฅ๋ ฅ์ด์—ˆ๋‹ค

ogp.meThe Open Graph protocolOpen Graph ํ”„๋กœํ† ์ฝœ์€ ์›นํŽ˜์ด์ง€๋ฅผ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์—์„œ ํ’๋ถ€ํ•œ ์ฝ˜ํ…์ธ ๋กœํ‘œํ˜„ํ•˜์—ฌ ๊ณต์œ ๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

์™ธ๋ถ€ ๋งํฌ Preview๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋Š” Open Graph metadata๋‹ค. og:title์ด๋‚˜ og:description๋งŒ์œผ๋กœ๋„ ๊ธฐ๋ณธ์ ์ธ ์นด๋“œ UI๋Š” ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ํ•ด๋‹น ๋งํฌ๊ฐ€ ์‹ค์ œ๋กœ ๋ฌด์—‡์„ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ถฉ๋ถ„ํ•œ context๋ฅผ ์–ป๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ด ์ง€์ ์—์„œ LilysAI๋ฅผ ์‹ค์ œ workflow์— ์—ฐ๊ฒฐํ•ด ๋ณด๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ์ฒซ vertical slice์ธ Engine #42๋Š” ์˜๋„์ ์œผ๋กœ ๋‹จ์ˆœํ–ˆ๋‹ค.

external URL
    โ†“
LilysAI MCP
    โ†“
project / source
    โ†“
note generation
    โ†“
editable Markdown summary

์™ธ๋ถ€ URL ํ•˜๋‚˜๋ฅผ LilysAI์— ์ „๋‹ฌํ•˜๊ณ , ๋ถ„์„์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ๋’ค ์ƒ์„ฑ๋œ note๋ฅผ ๋‹ค์‹œ Markdown์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค. ์ฒ˜์Œ์—๋Š” source CLI์—์„œ ๊ฒ€์ฆํ–ˆ๊ณ  ์ดํ›„ packaged Engine artifact์—์„œ๋„ ์‹ค์ œ authenticated flow๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค.

์ด ์‹คํ—˜์„ ํ†ตํ•ด LilysAI์—์„œ ๊ฐ€์žฅ ์œ ์šฉํ•˜๋‹ค๊ณ  ๋А๋‚€ ๋ถ€๋ถ„์€ ์™ธ๋ถ€ ์ž๋ฃŒ๋ฅผ ์ฝ๊ณ  semantic context๋ฅผ ์–ป๋Š” ๋Šฅ๋ ฅ์ด์—ˆ๋‹ค. ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์งง์€ text๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค, ์ง์ ‘ ์ฝ์ง€ ์•Š์€ ์™ธ๋ถ€ ๋ฌธ์„œ๋ฅผ ์‹œ์Šคํ…œ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋กœ ๋ฐ”๊พธ๋Š” ์ชฝ์—์„œ ๋” ๋ช…ํ™•ํ•œ ์—ญํ• ์ด ๋ณด์˜€๋‹ค.

๋ฌผ๋ก  ์ด๊ฑด LilysAI๊ฐ€ ๊ฐ€์ง„ ์‹ค์ œ ๋Šฅ๋ ฅ ์ค‘ ์ ˆ๋ฐ˜๋„ ์“ฐ์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ Web UI์—์„œ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ๊ณผ MCP๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ์˜ ๋ฒ”์œ„๊ฐ€ ์™„์ „ํžˆ ๊ฐ™์ง€๋Š” ์•Š์•„ ๋” ์ด์ƒ์˜ ๊ณ ๋„ํ™”๋Š” ์–ด๋ ค์› ๋‹ค. ์–ด์ฉŒ๋ฉด ํ˜„์žฌ ์‹œ์ ์—์„œ๋Š” ํ†ตํ•ฉ์— ์ ์ ˆํ•œ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ๋ณด๋Š” ๊ฒƒ์ด ์ ์ ˆํ•  ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค.

MCP๋ฅผ ๋ถ™์—ฌ๋ณด๋‹ˆ ์ œํ’ˆ์˜ ๊ธฐ๋Šฅ๊ณผ API์˜ ๊ธฐ๋Šฅ์€ ๋‹ฌ๋ž๋‹ค

์ฒ˜์Œ์—๋Š” LilysAI Web UI์—์„œ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์„ MCP์—์„œ๋„ ๋น„์Šทํ•˜๊ฒŒ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ–ˆ๋‹ค. ์‹ค์ œ๋กœ ์—ฐ๊ฒฐํ•ด ๋ณด๋‹ˆ ํ˜„์žฌ MCP surface๋Š” ๊ทธ๋ณด๋‹ค ์ œํ•œ์ ์ด์—ˆ๋‹ค.

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ ๊ฒƒ์€ source๋ฅผ project์— ๋“ฑ๋กํ•˜๊ณ , project ์ƒํƒœ๋ฅผ ์กฐํšŒํ•˜๊ณ , note๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๋Š” ํ๋ฆ„์ด์—ˆ๋‹ค. ์ด ์ •๋„๋งŒ์œผ๋กœ๋„ ์™ธ๋ถ€ ๋งํฌ์˜ semantic summary๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ์—๋Š” ์ถฉ๋ถ„ํ–ˆ์ง€๋งŒ, Web UI์—์„œ ์ œ๊ณต๋˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ automation์— ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ๋‹ค.

๊ฐœ๋ฐœ ๊ฒฝํ—˜์—์„œ๋„ ์•„์‰ฌ์šด ์ ์ด ์žˆ์—ˆ๋‹ค. ํ˜„์žฌ๋Š” integration์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” SDK๋‚˜ ์ถ”์ƒํ™”๊ฐ€ ์ถฉ๋ถ„ํžˆ ํ’๋ถ€ํ•˜๋‹ค๊ณ  ๋А๋ผ์ง€ ๋ชปํ–ˆ๊ณ , ๊ณต์‹ ๋ฌธ์„œ๋งŒ์œผ๋กœ ์„ธ๋ถ€ ๋™์ž‘์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ถ€๋ถ„๋„ ์žˆ์—ˆ๋‹ค. ๊ฒฐ๊ตญ ์‹ค์ œ MCP response์™€ tool behavior๋ฅผ ์ง์ ‘ ํ™•์ธํ•˜๊ณ  contract๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ€๋ฉฐ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ๋‹ค.

๊ทธ ๊ณผ์ •์—์„œ provider ์ž์ฒด์˜ ์ œ์•ฝ๋„ ๋งŒ๋‚ฌ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‹ค์ œ Docs preparation ์ค‘ help.lilys.ai ๋งํฌ๋ฅผ ๋‹ค์‹œ LilysAI source๋กœ ๋„ฃ์œผ๋ ค ํ•˜์ž provider๊ฐ€ ์ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„ ์ „์ฒด preparation์ด ์‹คํŒจํ–ˆ๋‹ค. Engine #104์—์„œ๋Š” ์ด๋Ÿฐ LilysAI-owned URL์„ provider call ์ „์— ์ œ์™ธํ•˜๋„๋ก ๊ฒฝ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ์ด ๊ฒฝํ—˜์€ ๋‹จ์ˆœํžˆ ์˜ˆ์™ธ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค, ์™ธ๋ถ€ service๊ฐ€ ํ•ญ์ƒ ์กด์žฌํ•˜๊ณ  ํ•ญ์ƒ ์„ฑ๊ณตํ•  ๊ฒƒ์ด๋ผ๋Š” ์ „์ œ๋กœ ๋‚˜๋จธ์ง€ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๊ตํ›ˆ์„ ๋‚จ๊ฒจ์ฃผ์—ˆ๋‹ค.

์™ธ๋ถ€ AI ํ˜ธ์ถœ๊ณผ publishing์„ ๊ฐ™์€ ๊ฒฝ๊ณ„์— ๋‘์ง€ ์•Š์•˜๋‹ค

ํ˜„์žฌ Publishing Platform์€ ์—ฌ๋Ÿฌ repository๋กœ ๋‚˜๋‰˜์–ด ์žˆ๋‹ค. engine์€ document processing์„ ๋‹ด๋‹นํ•˜๊ณ , docs๋Š” canonical content์™€ derived data์˜ Git revision์„ ๋ณด์กดํ•˜๋ฉฐ, oomia.github.io๋Š” ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•ด์„œ ์‹ค์ œ Site๋ฅผ ๋งŒ๋“ ๋‹ค.

์ด ๊ตฌ์กฐ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๊ฒŒ ๋œ ๊ฒƒ์€ ์ฑ…์ž„์˜ ๊ฒฝ๊ณ„์˜€๋‹ค. ๊ทธ๋ž˜์„œ Site build ๊ณผ์ •์—์„œ LilysAI๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค.

external URL
      โ†“
Engine preparation
      โ†“
LilysAI semantic data
      โ†“
Docs derived manifest
      โ†“
exact Git revision
      โ†“
Site

์™ธ๋ถ€ network์™€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง„ ์„œ๋น„์Šค๋Š” preparation ๋‹จ๊ณ„์—์„œ ํ˜ธ์ถœํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋Š” Docs๊ฐ€ derived data๋กœ ๋ณด์กดํ•œ๋‹ค. ๋˜ Site๋Š” ์ž์‹ ์ด pinํ•œ Docs revision์˜ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ๋Š”๋‹ค.

Engine์€ producer์˜ ๋™์ž‘์„ ์†Œ์œ ํ•˜๊ณ , Docs๋Š” durable state๋ฅผ ์†Œ์œ ํ•˜๊ณ , Site๊ฐ€ presentation์„ ์†Œ์œ ํ•œ๋‹ค. Knowledge๋ผ๋Š” ๊ณตํ†ต ์ •์ฑ… ๋ ˆํฌ๋ฅผ ํ†ตํ•ด, ๋‚˜๋Š” ํ•œ ๋ ˆํฌ๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„๊นŒ์ง€ ์•Œ์•„์•ผ ํ•˜๋Š” ์ƒํ™ฉ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŒ๋“ค์ง€ ์•Š์œผ๋ ค๊ณ  ํ–ˆ๋‹ค. (๋ฌผ๋ก  best-practice ๊ด€์ ์—์„œ ๋‹น์—ฐํ•œ ๊ฒƒ์ด์ง€๋งŒ)

์ด ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ•œ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” cache๋‚˜ API ๋น„์šฉ๋ณด๋‹ค๋„ ๋ฉ€ํ‹ฐ repository ํ™˜๊ฒฝ์—์„œ ์ฑ…์ž„์„ ๋ถ„๋ช…ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ์˜€๋‹ค.

์ฝ๊ธฐ ์œ„ํ•œ ์ •๋ณด์™€ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ์ •๋ณด๋Š” ๋‹ฌ๋ž๋‹ค

semantic summary๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์ž ๋˜ ํ•˜๋‚˜์˜ ๋ฌธ์ œ๊ฐ€ ๋ณด์˜€๋‹ค. ์ž๋ฃŒ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด์™€ ์‚ฌ์šฉ์ž๊ฐ€ ํ™”๋ฉด์—์„œ ์ฝ๊ธฐ ์ข‹์€ ์ •๋ณด๋Š” ๊ฐ™์ง€ ์•Š์•˜๋‹ค.

LilysAI๊ฐ€ ๋งŒ๋“ค์–ด ์ค€ summary๋Š” ์ž๋ฃŒ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ์—๋Š” ์œ ์šฉํ•˜์ง€๋งŒ, ๊ทธ๊ฒƒ์„ ๊ทธ๋Œ€๋กœ ์ž‘์€ LinkCard ์•ˆ์— ๋„ฃ์„ ์ˆ˜๋Š” ์—†๋‹ค. ๋ฐ˜๋Œ€๋กœ Open Graph metadata๋Š” presentation์— ์œ ์šฉํ•œ title, image, site name ๋“ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ source์˜ ๋‚ด์šฉ์„ ์ถฉ๋ถ„ํžˆ ์„ค๋ช…ํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ˜„์žฌ์˜ rich LinkCard์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„ธ ์ข…๋ฅ˜๋กœ ๋‚˜๋ˆ„๊ฒŒ ๋๋‹ค.

semantic
  โ†’ LilysAI

preview
  โ†’ Open Graph / Twitter / HTML metadata

presentation
  โ†’ local model

LilysAI๋Š” ์™ธ๋ถ€ source์˜ ์˜๋ฏธ๋ฅผ ์ฝ๋Š”๋‹ค. Engine์˜ deterministic fetch/parser๋Š” target page์—์„œ presentation์— ํ•„์š”ํ•œ metadata๋ฅผ ์ˆ˜์ง‘ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  local model์€ ์ด๋ฏธ ํ™•๋ณด๋œ semantic/preview ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ œํ•œ๋œ UI ์•ˆ์—์„œ ๋ณด์—ฌ์ค„ ordered three-line presentation์„ ๋งŒ๋“ ๋‹ค. ์ตœ์ข…์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ derived record๋Š” Docs์— ์ €์žฅ๋˜๊ณ  Site๋Š” local manifest๋งŒ์„ ์‚ฌ์šฉํ•ด์„œ LinkCard๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.

AI๋ฅผ ๋งŽ์ด ๋ถ™์ด๋Š” ๊ฒƒ๋ณด๋‹ค ์‹œ์Šคํ…œ์„ ์ž˜ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ–ˆ๋‹ค

์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ์—๋Š” AI Agent๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์— ๋„ฃ์–ด ๋ณด๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋จผ์ € ์žˆ์—ˆ๋‹ค. Cycle 1์„ ๋งˆ์นœ ์ง€๊ธˆ์€ ๊ทธ ๊ด€์‹ฌ ์ž์ฒด๋Š” ๋ณ€ํ•˜์ง€ ์•Š์•˜๋‹ค. ์ถฉ๋ถ„ํ•œ computing resource์™€ ๋” ํฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด Agent์—๊ฒŒ ๋” ๋„“์€ context์™€ ์ž์œจ์„ฑ์„ ์ฃผ๋Š” ์‹œ์Šคํ…œ๋„ ์—ฌ์ „ํžˆ ๋งŒ๋“ค์–ด ๋ณด๊ณ  ์‹ถ๋‹ค.

๋‹ค๋งŒ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‹ค๋ฅธ ๊ฒƒ์„ ๋จผ์ € ๊ฒฝํ—˜ํ–ˆ๋‹ค. AI ๊ธฐ๋Šฅ์˜ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ๋ณด๋‹ค AI๊ฐ€ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ณ , ์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ˆ„๊ฐ€ ๋ณด์กดํ•˜๊ณ , ๋ˆ„๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ์†Œ๋น„ํ•˜๋Š”์ง€๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์ค‘์š”ํ–ˆ๋‹ค.

  • ์ž‘์€ local model์€ ์ œํ•œ๋œ metadata generation์„ ๋‹ด๋‹นํ–ˆ๋‹ค.
  • LilysAI๋Š” ์™ธ๋ถ€ ์ž๋ฃŒ์—์„œ semantic context๋ฅผ ์–ป๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ–ˆ๋‹ค.
  • deterministic code๋Š” URL์„ ์ฐพ๊ณ , metadata๋ฅผ ๊ฒ€์ฆํ•˜๊ณ , repository ์‚ฌ์ด์˜ contract๋ฅผ ์ง€์ผฐ๋‹ค.
  • Git์€ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ revision์œผ๋กœ ๋‚จ๊ฒผ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  Site๋Š” producer๊ฐ€ ์–ด๋–ค ๋ชจ๋ธ์ด๋‚˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ์•Œ์ง€ ์•Š์•„๋„ ๊ฒฐ๊ณผ๋ฅผ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค.
write
  โ†“
commit
  โ†“
optionally enrich
  โ†“
persist derived state
  โ†“
validate
  โ†“
render
  โ†“
deliver

์ด๋ฒˆ Cycle์—์„œ๋Š” ๋ณ„๋„์˜ model API ์‚ฌ์šฉ๋ฃŒ๋ฅผ ์ง€์ถœํ•˜์ง€ ์•Š์•˜๋‹ค. ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ์ปดํ“จํŒ… ์ž์›์—์„œ local inference๋ฅผ ์‹คํ–‰ํ–ˆ๊ณ , ๋ฌด๋ฃŒ๋กœ ์ œ๊ณต๋ฐ›์€ 2๊ฐœ์›” ์น˜ ChatGPT ํ”Œ๋žœ์„ ๊ฐœ๋ฐœ ๊ณผ์ •์— ํ™œ์šฉํ–ˆ์œผ๋ฉฐ, LilysAI Ambassador ํ™œ๋™์„ ๊ณ„๊ธฐ๋กœ ํ”Œ๋žœ์ด ์ œ๊ณต๋œ ๊ณ„์ •์œผ๋กœ MCP integration์„ ์‹คํ—˜ํ–ˆ๋‹ค.

๋” ํฐ ๋ชจ๋ธ, ์‹ค์‹œ๊ฐ„ inference, ๋” ๋†’์€ throughput์ด๋‚˜ ๋ณต์žกํ•œ autonomous Agent๊ฐ€ ํ•„์š”ํ•ด์ง€๋ฉด ์ง€๊ธˆ์˜ ๋ฐฉ์‹์œผ๋กœ๋Š” ๋ถ€์กฑํ• ์ง€ ๋ชจ๋ฅธ๋‹ค. ํ•˜์ง€๋งŒ ์ ์–ด๋„ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•œ ๊ฒƒ์€, ์ฒ˜์Œ๋ถ€ํ„ฐ ํฐ Agent framework๋‚˜ ๋งŽ์€ API budget์„ ์ค€๋น„ํ•˜์ง€ ์•Š์•„๋„ ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ๋‚˜๋ˆ„๊ณ  ์‹œ์Šคํ…œ์˜ ๊ฒฝ๊ณ„๋ฅผ ์ž˜ ์„ค๊ณ„ํ•˜๋ฉด AI ๊ธฐ๋Šฅ์„ ์‹ค์ œ ๊ฐœ๋ฐœยท๋ฐœํ–‰ workflow ์•ˆ์— ๊ฝค ๊นŠ๊ฒŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

๋˜ ํ•˜๋‚˜ ์ข‹์•˜๋˜ ์ ์€, ์ฒ˜์Œ ์ƒ๊ฐํ–ˆ๋˜ ๊ตฌ์กฐ์™€ ์‹ค์ œ๋กœ ๋งŒ๋“ค์–ด์ง„ ์‹œ์Šคํ…œ์ด ๊ฝค ๋‹ฌ๋ž๋Š”๋ฐ, ๊ทธ ์ฐจ์ด๋Š” ๋‹ค์–‘ํ•œ ๋ฌธ์ œ์™€ ์˜๋ฌธ์ ์„ ์—์ด์ „ํŠธ์˜ ๋Œ€ํ™”๋ฅผ ํ†ตํ•ด ํ’€์–ด๋‚˜๊ฐ€ ์–ป์€ ๊ฒฐ๊ณผ์— ๊ฐ€๊น๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ข‹์€ ์งˆ๋ฌธ์„ ๋˜์ง€๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋‚ด ๊ถ๊ธˆ์ฆ์„ ํ•ด์†Œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์ƒˆ์‚ผ ๊ธฐ๋ปค๊ณ , ์ด์ „๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋งŽ์ด ๋ฐœ์ „ํ•ด์„œ ์ •ํ™•๋„๋„ ๋†’์•„์ง„ ๊ฒƒ์„ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์•ž์œผ๋กœ๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ๋ฒ”์šฉ์„ฑ ์žˆ๊ฒŒ ์ž˜ ๋‹ค๋“ฌ์–ด ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ธ€๋กœ ๋‚˜๋ˆ„๊ณ  ์‹ถ๋‹ค.

Cycle 1 ํ”„๋กœ์ ํŠธ ํ™œ๋™

์•„๋ž˜ ์ด๋ฏธ์ง€๋Š” Cycle 1 ๋™์•ˆ์˜ AI ํ™œ์šฉ, ์ง์ ‘ ๊ฐœ๋ฐœ ํ™œ๋™๊ณผ GitHub Project ์ง„ํ–‰ ์ƒํ™ฉ์„ ๊ธฐ๋กํ•œ snapshot์ด๋‹ค.

References

engine, docs ๋ ˆํฌ๋Š” GitHub Self-hosted runner๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์•„์‰ฝ์ง€๋งŒ ๊ณต๊ฐœ ๋Œ€์ƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.