Skip to content
MCP ThesaurusMCP Thesaurus

Legend Saju

CommunityIncomplete39/100Claim

streamable-httpApache-2.0updated 15d ago

๋ชจ๋“  ๋‹ต์ด ๊ฒฐ์ •์  ๊ณ„์‚ฐ์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๋™์–‘ ์ˆ ์ˆ˜(ๅ‘ฝยทๅœยท็›ธ) ์—”์ง„. ๊ณ„์‚ฐ์‹, ์œ ํŒŒ, ์ถœ์ฒ˜, ๋ถˆํ™•์‹ค์„ฑ์„ ๊ตฌ์กฐํ™”ํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

SourceWebsite

What can you do with Legend Saju?

Legend Saju

๋ชจ๋“  ๋‹ต์ด ๊ฒฐ์ •์  ๊ณ„์‚ฐ์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๋™์–‘ ์ˆ ์ˆ˜(ๅ‘ฝยทๅœยท็›ธ) ์—”์ง„. ๊ณ„์‚ฐ์‹, ์œ ํŒŒ, ์ถœ์ฒ˜, ๋ถˆํ™•์‹ค์„ฑ์„ ๊ตฌ์กฐํ™”ํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

CI License TypeScript

English ยท ๊ธฐ์—ฌํ•˜๊ธฐ ยท ์›๊ฒฉ MCP

๊ฐ™์€ ์ƒ๋…„์›”์ผ์„ ์—ฌ๋Ÿฌ ์ „ํ†ต์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ๊ณ„์‚ฐ ๊ฒฝ๋กœ ์•ˆ์—๋Š” ์ˆจ๊ฒจ์ง„ LLM ํ˜ธ์ถœ์ด 0ํšŒ๋‹ค.

์ถœ์ฒ˜๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ง€์‹ 777๊ฑด ยท ๋Œ€์œก์ž„ 720๊ตญ ยท ํ•œ๊ตญ ์ธ๋ช…์šฉ ํ•œ์ž ๊ด€์ธก 9,495๊ฑด ยท ๊ณ„์‚ฐ ๊ฒฝ๋กœ ๋ชจ๋ธ ํ˜ธ์ถœ 0ํšŒ

Legend Saju๋Š” ์‚ฌ์ฃผยท๋ช…๋ฆฌ, ์ž๋ฏธ๋‘์ˆ˜, ๊ธฐ๋ฌธ๋‘”๊ฐ‘, ๋Œ€์œก์ž„, ์ฒ ํŒ์‹ ์ˆ˜, ์„ฑ๋ช…ํ•™, ํ•ด๋ชฝ๊นŒ์ง€ ๋ช…(ๅ‘ฝ)ยท๋ณต(ๅœ)ยท์ƒ(็›ธ) ์‚ผ์ˆ ์˜ ๊ณ„์‚ฐ์„ ํ•˜๋‚˜์˜ ์—”์ง„์—์„œ ๋‹ค๋ฃฌ๋‹ค. ์œ ํŒŒ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๊ฐ๊ฐ์˜ ๊ฒฐ๊ณผ๋กœ ๋‚˜๋ž€ํžˆ ๋ณด์กดํ•˜๊ณ , ์ถœ์ƒ์‹œ๊ฐ„์„ ๋ชจ๋ฅด๋ฉด ํ›„๋ณด ์ฐจํŠธ๋ฅผ ๋ถ„๋ฆฌํ•ด ๊ณ„์‚ฐํ•œ๋‹ค.

๊ฐ€์žฅ ๋น ๋ฅธ ์‚ฌ์šฉ๋ฒ•

์„ค์น˜ ์—†์ด ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” HTTPS MCP ์ฃผ์†Œ๋‹ค.

https://saju.tripsight.co.kr/mcp

๊ณต์‹ MCP Registry ์ด๋ฆ„์€ io.github.SihyeonJeon/legend-saju๋‹ค. ๊ธฐ์กด ์ฃผ์†Œ https://legend-saju-mcp-production.up.railway.app/mcp๋„ ๊ฐ™์€ ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค.

Claude Code

์•„๋ž˜ ๋ช…๋ น์€ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ์‚ฌ์šฉ์ž ๋ฒ”์œ„์— ์—ฐ๊ฒฐํ•œ๋‹ค.

claude mcp add --transport http --scope user legend-saju https://saju.tripsight.co.kr/mcp
claude mcp list

Claude Code๋ฅผ ์—ด๊ณ  /mcp์—์„œ legend-saju๊ฐ€ ์—ฐ๊ฒฐ๋๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ ํ‰์†Œ์ฒ˜๋Ÿผ ์งˆ๋ฌธํ•˜๋ฉด ๋œ๋‹ค.

ChatGPT ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ

  1. ChatGPT์˜ Settings โ†’ Security and login์—์„œ Developer mode๋ฅผ ์ผ ๋‹ค.
  2. ChatGPT Plugins์—์„œ +๋ฅผ ๋ˆ„๋ฅธ๋‹ค.
  3. ์ด๋ฆ„๊ณผ ์„ค๋ช…์„ ์ž…๋ ฅํ•˜๊ณ  Connection์— ์œ„ MCP ์ฃผ์†Œ๋ฅผ /mcp๊นŒ์ง€ ํฌํ•จํ•ด ๋„ฃ๋Š”๋‹ค.
  4. ์—ฐ๊ฒฐ์„ ๋งŒ๋“  ๋’ค legend_saju_read_fortune, legend_saju_analyze_compatibility, legend_saju_card_natal ๋“ฑ์ด ๋ฐœ๊ฒฌ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  5. ์ƒˆ ๋Œ€ํ™”์˜ ๋„๊ตฌ ๋ฉ”๋‰ด์—์„œ ์—ฐ๊ฒฐ์„ ์„ ํƒํ•˜๊ณ  ์ž์—ฐ์–ด๋กœ ์งˆ๋ฌธํ•œ๋‹ค.

ChatGPT์—์„œ๋Š” ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ์นด๋“œ ์œ„์ ฏ(ChatGPT Apps)์œผ๋กœ ๋ Œ๋”๋ง๋œ๋‹ค. ์›๊ตญ ์นด๋“œ, ์˜์—ญ๋ณ„ ์šด์„ธ ์นด๋“œ, ๊ถํ•ฉ ์นด๋“œ, ๋Œ€์šด ํƒ€์ž„๋ผ์ธ ๋„ค ์ข…๋ฅ˜๊ฐ€ ์งˆ๋ฌธ ์œ ํ˜•์— ๋งž์ถฐ ๋œฌ๋‹ค. ์œ„์ ฏ ๋ Œ๋”๋ง์€ ์›น(chatgpt.com)์—์„œ ๊ฐ€์žฅ ์•ˆ์ •์ ์ด๋‹ค.

๊ฐœ๋ฐœ์ž ๋ชจ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋Š” ๊ณ„์ •๊ณผ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ •์ฑ…์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์ž์„ธํ•œ ์ ˆ์ฐจ๋Š” OpenAI์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์—ฐ๊ฒฐ ์•ˆ๋‚ด๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.

Codex

MCP๋งŒ ๋ฐ”๋กœ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‘ ์ค„์ด๋ฉด ๋œ๋‹ค.

codex mcp add legend-saju-remote --url https://saju.tripsight.co.kr/mcp
codex mcp list

MCP ์—ฐ๊ฒฐ๊ณผ ์ž์—ฐ์–ด ์‚ฌ์šฉ ์ง€์นจ์„ ํ•จ๊ป˜ ์„ค์น˜ํ•˜๋ ค๋ฉด ์ €์žฅ์†Œ๋ฅผ ํ”Œ๋Ÿฌ๊ทธ์ธ ์†Œ์Šค๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  Plugins ํ™”๋ฉด์—์„œ Legend Saju๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

codex plugin marketplace add SihyeonJeon/legend-saju --ref main

์›๊ฒฉ ์„œ๋ฒ„๋Š” ์ž…๋ ฅ๊ฐ’์„ ์ €์žฅ ์—†์ด ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ชจ๋ธ API ํ˜ธ์ถœ 0ํšŒ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ์š”์ฒญ ํฌ๊ธฐ, ๋ถ„๋‹น ์š”์ฒญ ์ˆ˜, ๋™์‹œ ์‹คํ–‰ ์ˆ˜ ์ œํ•œ์€ ์ ์šฉ๋œ๋‹ค.

๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•˜๊ธฐ

์ƒ๋…„์›”์ผ์ด๋‚˜ ์ด๋ฆ„์„ ์™ธ๋ถ€ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด Node.js 20 ์ด์ƒ์ด ์„ค์น˜๋œ ์ปดํ“จํ„ฐ์—์„œ STDIO ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.

git clone https://github.com/SihyeonJeon/legend-saju.git
cd legend-saju
npm ci
npm run build

์ €์žฅ์†Œ ๋ฃจํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋งž๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค. $PWD๋Š” ์…ธ์ด ํ˜„์žฌ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ๋ฐ”๊ฟ” ์ €์žฅํ•œ๋‹ค.

codex mcp add legend-saju -- node "$PWD/bin/legend-saju-mcp.js"
claude mcp add --transport stdio --scope user legend-saju -- node "$PWD/bin/legend-saju-mcp.js"

์„ค์น˜ ๋’ค์—๋Š” ๋„๊ตฌ ์ด๋ฆ„์ด๋‚˜ JSON์„ ๋งํ•  ํ•„์š” ์—†์ด ํ‰์†Œ์ฒ˜๋Ÿผ ์งˆ๋ฌธํ•˜๋ฉด ๋œ๋‹ค.

์–‘๋ ฅ 1990๋…„ 1์›” 1์ผ ์ •์˜ค ์ถœ์ƒ์ด์•ผ. ์ง์—…, ์žฌ๋ฌผ, ๊ฒฐํ˜ผ๊ณผ ์•ž์œผ๋กœ 3๋…„์„ ์ข…ํ•ฉํ•ด์„œ ๋ด์ค˜.

๋‘ ์‚ฌ๋žŒ์˜ ์ƒ๋…„์›”์ผ์‹œ๋ฅผ ์ค„๊ฒŒ. ์–‘์ชฝ ์›๊ตญ ์ „์ฒด๋กœ ๊ถํ•ฉ๊ณผ ๊ฒฐํ˜ผ ์‹œ๊ธฐ๋ฅผ ํ•จ๊ป˜ ๋ด์ค˜.

์ด๋ฆ„ ํ•œ์ž๋ฅผ ์ค„๊ฒŒ. ์‚ฌ์ฃผ์™€ ๋ถ„๋ฆฌํ•ด์„œ ์„ฑ๋ช…ํ•™ ๊ทผ๊ฑฐ๋„ ๋ถ„์„ํ•ด์ค˜.

๋‹ค๋ฅธ MCP ํด๋ผ์ด์–ธํŠธ์—์„œ ์—ฐ๊ฒฐํ•˜๊ธฐ

์›๊ฒฉ HTTP MCP๋ฅผ ์ง€์›ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋ผ๋ฉด ์•„๋ž˜ ์„ค์ •์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์„ค์ • ํŒŒ์ผ์˜ ์œ„์น˜๋Š” ํด๋ผ์ด์–ธํŠธ๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค.

{
  "mcpServers": {
    "legend-saju": {
      "type": "http",
      "url": "https://saju.tripsight.co.kr/mcp"
    }
  }
}

๋กœ์ปฌ ์†Œ์Šค๋ฅผ ๊ณ ์ •ํ•ด์„œ ์“ฐ๊ณ  ์‹ถ๋‹ค๋ฉด ์ €์žฅ์†Œ๋ฅผ ๋นŒ๋“œํ•œ ๋’ค CLI ๋ž˜ํผ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•œ๋‹ค.

{
  "mcpServers": {
    "legend-saju": {
      "command": "node",
      "args": ["/์ ˆ๋Œ€/๊ฒฝ๋กœ/legend-saju/bin/legend-saju-mcp.js"]
    }
  }
}

๋กœ์ปฌ STDIO ๋ฐฉ์‹์€ ์œ„ ๋นŒ๋“œ๋ฅผ ํ•œ ๋ฒˆ ๋งˆ์นœ ๋’ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

MCP๊ฐ€ ํ•˜๋Š” ์ผ

MCP ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž์˜ ๋ชฉ์ ์ด ์ด๋ฆ„์— ๋“œ๋Ÿฌ๋‚˜๋Š” ์ฝ๊ธฐ ์ „์šฉ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๋„๊ตฌ ์—ญํ• 
legend_saju_read_fortune ์ผ๋ฐ˜ ์‚ฌ์ฃผ, ์ด์šด, ์žฌ๋ฌผยท์‚ฌ์—…ยท์ง์—…ยท์—ฐ์• ยท๊ฑด๊ฐ•์šด์„ ์งˆ๋ฌธ ๋ฒ”์œ„์— ๋งž์ถฐ ๊ณ„์‚ฐํ•œ๋‹ค
legend_saju_analyze_compatibility ๋‘ ์‚ฌ๋žŒ์˜ ์ถœ์ƒ ์ •๋ณด๋ฅผ ๋น„๊ตํ•œ๋‹ค
legend_saju_select_dates ๋ช…์‹œ์ ์œผ๋กœ ํƒ์ผ์„ ์š”์ฒญํ•œ ๊ฒฝ์šฐ์—๋งŒ ํ›„๋ณด ๋‚ ์งœ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค
legend_saju_cast_divination ๊ธฐ๋ฌธยท์œก์ž„ยท์ฃผ์—ญ์ฒ˜๋Ÿผ ์งˆ๋ฌธ ์‹œ๊ฐ์ด๋‚˜ ๊ด˜๊ฐ€ ํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค
legend_saju_analyze_name ์‹ค์ œ ์ด๋ฆ„ ํ•œ์ž, ๋ฒ•์› ์ธ๋ช…์šฉ ํ•œ์ž ๊ด€์ธก, 81์ˆ˜์™€ ์ž‘๋ช… ์ •๋ณด๋ฅผ ๋ถ„๋ฆฌํ•ด ๊ณ„์‚ฐํ•œ๋‹ค
legend_saju_interpret_dream ์˜๋ฏธ ๋Œ€์กฐ๊ฐ€ ๋๋‚œ ๊ต์ฐจ ์ „์Šน ๋ฒ”์œ„ ์•ˆ์—์„œ ๊ฟˆ์˜ ๊ณตํ†ต ๋ชจํ‹ฐํ”„์™€ ์ถฉ๋Œ ์กฐ๊ฑด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค
legend_saju_manifest ํ˜„์žฌ ์—”์ง„์— ๋“ค์–ด ์žˆ๋Š” ๊ณ„์‚ฐ๋ฒ•, ์ถœ์ฒ˜, ๋ฐ์ดํ„ฐ ๋ฒ”์œ„๋ฅผ ํ™•์ธํ•œ๋‹ค
legend_saju_capabilities ์ „๋ฌธ์ ์ธ ์งˆ๋ฌธ์— ๋งž๋Š” ์„ธ๋ถ€ ๊ณ„์‚ฐ๋ฒ•์„ ์ฐพ๋Š”๋‹ค
legend_saju_run_methods ์ด๋ฆ„์„ ์ง€์ •ํ•œ ์œ ํŒŒยท๊ณ„์‚ฐ๋ฒ•์ด๋‚˜ ๋ณตํ•ฉ ๊ณ„์‚ฐ์„ ํ•œ ์‹คํ–‰ ๊ณ„ํš์œผ๋กœ ๋ฌถ๋Š”๋‹ค
legend_saju_card_natal ๋„ค ๊ธฐ๋‘ฅยท์˜คํ–‰ ๋ฐธ๋Ÿฐ์Šคยท์™•์‡ /๊ฒฉ๊ตญ/์šฉ์‹  ํŒ์ •ยท์‹ ์‚ด์„ ์›๊ตญ ์นด๋“œ ์œ„์ ฏ์œผ๋กœ ๋ Œ๋”๋งํ•œ๋‹ค
legend_saju_card_fortune ์ด์šดยท์žฌ๋ฌผ์šดยท์—ฐ์• ์šด ๋“ฑ ์˜์—ญ๋ณ„ ์šด์„ธ ์นด๋“œ ์œ„์ ฏ์„ ๋ Œ๋”๋งํ•œ๋‹ค
legend_saju_card_compatibility ๋‘ ์‚ฌ๋žŒ์˜ ์ผ์ฃผ์™€ ํ•ฉ์ถฉ ์‹ ํ˜ธ๋ฅผ ๊ถํ•ฉ ์นด๋“œ ์œ„์ ฏ์œผ๋กœ ๋ Œ๋”๋งํ•œ๋‹ค
legend_saju_card_timeline ๋Œ€์šด ํƒ€์ž„๋ผ์ธ ์œ„์ ฏ์„ ๋ Œ๋”๋งํ•˜๊ณ  ์‹œ๊ธฐ ์งˆ๋ฌธ์˜ ์—ฐ๋„๋ฅผ ํ‘œ์‹œํ•œ๋‹ค

์ผ์ƒ์ ์ธ ์šด์„ธ ์š”์ฒญ์€ ๋ชฉ์ ๋ณ„ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•œ ๊ณ„์‚ฐ๋งŒ ๊ณ ๋ฅธ๋‹ค. detailLevel์€ ๊ณ„์‚ฐ ๋ฒ”์œ„๋ฅผ ์ •ํ•˜๊ณ  outputMode๋Š” ๋ฐ˜ํ™˜ ํ˜•์‹์„ ์ •ํ•œ๋‹ค. ๊นŠ์€ ์ข…ํ•ฉ ๋ถ„์„์€ detailLevel: "expert"๋กœ ๊ณ„์‚ฐํ•˜๋˜ ๊ธฐ๋ณธ ์‘๋‹ต์€ ์ฝ๊ธฐ ์ข‹์€ consumer ํ˜•์‹์„ ์œ ์ง€ํ•œ๋‹ค. ์ง€์‹ ์ž์‚ฐยท์›๋ฌธยท์ถœ์ฒ˜๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๊ฐ™์€ ์ž…๋ ฅ์„ outputMode: "evidence"๋กœ ํ˜ธ์ถœํ•œ๋‹ค.

์นด๋“œ ๋„๊ตฌ์˜ ๊ณ„์‚ฐ ๊ฐ’์€ ์ „๋ถ€ ์„œ๋ฒ„๊ฐ€ ์ฑ„์šฐ๊ณ , ํ•ด์„ ๋ฌธ์žฅ๊ณผ ์ ์ˆ˜๋Š” ํ˜ธ์ŠคํŠธ ๋ชจ๋ธ์ด ์ž‘์„ฑํ•ด ์นด๋“œ์˜ narrativeยทtext ํ•„๋“œ๋กœ ์ „๋‹ฌํ•œ๋‹ค. ์นด๋“œ์—๋Š” ํ•ด์„ ์ž‘์„ฑ ์ฃผ์ฒด๊ฐ€ ๋ผ๋ฒจ๋กœ ํ‘œ์‹œ๋œ๋‹ค.

์‚ฌ์šฉ์ž์˜ ์ž์—ฐ์–ด ์งˆ๋ฌธ
        โ†“
ํ˜ธ์ŠคํŠธ ๋ชจ๋ธ์ด ์ž…๋ ฅ์„ ์ •๋ฆฌํ•˜๊ณ  ๊ณ„์‚ฐ๋ฒ•์„ ํƒ์ƒ‰
        โ†“
Legend Saju MCP๊ฐ€ ๊ฒฐ์ •๋ก ์  ๊ณ„์‚ฐ ์ˆ˜ํ–‰
        โ†“
๊ทผ๊ฑฐ ID๊ฐ€ ์—ฐ๊ฒฐ๋œ ์š”์•ฝยท์˜์—ญ๋ณ„ ํ•ด์„ยทํƒ€์ž„๋ผ์ธ
        โ†“
ํ˜ธ์ŠคํŠธ ๋ชจ๋ธ์ด ๊ทผ๊ฑฐ์™€ ๊ฒฝ๊ณ„๋ฅผ ๋ณด์กดํ•ด ๋Œ€ํ™”๋กœ ์ „๋‹ฌ

Legend Saju MCP ์ž์ฒด๋Š” OpenAI๋‚˜ Anthropic API ํ‚ค ์—†์ด ๋™์ž‘ํ•˜๋ฉฐ ๊ณ„์‚ฐ ๊ฒฝ๋กœ์˜ ๋ชจ๋ธ ํ˜ธ์ถœ 0ํšŒ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ๋Œ€ํ™”์™€ ์„ค๋ช…์—๋Š” ์‚ฌ์šฉ ์ค‘์ธ CodexยทClaudeยท๊ธฐํƒ€ ํด๋ผ์ด์–ธํŠธ์˜ ๊ธฐ์กด ๋ชจ๋ธ ์„ธ์…˜์ด ์“ฐ์ธ๋‹ค.

MCP์™€ ๋™๋ด‰ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ฐจ์ด

  • MCP๋งŒ ์—ฐ๊ฒฐํ•˜๋ฉด ๊ณ„์‚ฐ ์—”์ง„๊ณผ ๋ชฉ์ ๋ณ„ ๋„๊ตฌ๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • plugins/legend-saju/์˜ Codex ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋Š” MCP ์„ค์ •๊ณผ ์ž์—ฐ์–ด ์‚ฌ์šฉ ์ง€์นจ์ด ํ•จ๊ป˜ ๋“ค์–ด ์žˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ capability ID๋‚˜ ์ž…๋ ฅ ์Šคํ‚ค๋งˆ๋ฅผ ๊ณ ๋ฅด์ง€ ์•Š๋„๋ก ํ˜ธ์ŠคํŠธ ๋ชจ๋ธ์˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๋ณด๊ฐ•ํ•œ๋‹ค.
  • ๊ณ„์‚ฐ ๋Šฅ๋ ฅ์€ MCP์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๊ฐ™์€ ๊ณต๊ฐœ ์—”์ง„ ์ง„์ž…์ ์„ ๊ณต์œ ํ•œ๋‹ค.

์ž์—ฐ์–ด ์ž…๋ ฅ

์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜๋„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋Œ€ํ™”๋‹ค. ์ ‘์ˆ˜ ํผ๊ณผ intent ๋ฉ”๋‰ด ๋Œ€์‹ , ๋ชจ๋ธ์ด ๋Œ€ํ™”์—์„œ ํ™•์‹คํ•œ ์ •๋ณด๋งŒ ์ถ”์ถœํ•˜๊ณ , ํ•„์š”ํ•œ ๊ณ„์‚ฐ๋ฒ•์„ ์ฐพ์€ ๋’ค, ์—”์ง„์ด ๋Œ๋ ค์ค€ ๊ทผ๊ฑฐ๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.

1990๋…„ 1์›” 1์ผ ์–‘๋ ฅ์ด๊ณ  ํƒœ์–ด๋‚œ ์‹œ๊ฐ„์€ ๋ชฐ๋ผ.
์•ž์œผ๋กœ 3๋…„ ์ง์—…๊ณผ ๋ˆ์„ ๋ด์ค˜.

์ถœ์ƒ์‹œ๊ฐ„์„ ๋ชจ๋ฅธ๋‹ค๊ณ  ๋งํ•˜๋ฉด ์—”์ง„์€ ์ž์‹œ์˜ ๋‚ ์งœ ๊ฒฝ๊ณ„ ๋‘ ๋ฐฉ์‹๊นŒ์ง€ ํฌํ•จํ•œ ํ›„๋ณด ์ฐจํŠธ๋ฅผ ๋ถ„๋ฆฌํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ž„์˜์˜ ์ •์˜ค ๋Œ€์ž… ๋Œ€์‹  ํ›„๋ณด๊ตฐ ์ „์ฒด๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

๊ฐœ๋ฐœ์ž๋กœ ์‹คํ–‰ํ•˜๊ธฐ

git clone https://github.com/SihyeonJeon/legend-saju.git
cd legend-saju
npm ci
npm test
npm run build
npm run demo

Node.js 20 ์ด์ƒ์ด ํ•„์š”ํ•˜๋ฉฐ ESM ์ „์šฉ์ด๋‹ค.

import { resolve } from "./dist/index.js";

const result = resolve({
  birth: {
    year: 1990,
    month: 1,
    day: 1,
    hour: 12,
    minute: 0,
    calendar: "solar",
    gender: "์—ฌ",
    birthTimeAccuracy: "recorded"
  },
  question: "์ง์—…๊ณผ ์žฌ๋ฌผ, ์—ฐ์•  ๊ฒฐํ˜ผ, ์•ž์œผ๋กœ 3๋…„",
  timelineRange: { startYear: 2026, endYear: 2028 }
});

console.log(result.dossier?.claims);
console.log(result.dossier?.conflicts);
console.log(result.routes);

๋ฐ˜ํ™˜๊ฐ’์€ ๊ณ„์‚ฐ๊ณผ ํ•ด์„์˜ ๊ทผ๊ฑฐ ๋ฐ์ดํ„ฐ๋‹ค. ์™„์„ฑ๋œ ์ ์‚ฌ ๋ฌธ์žฅ ๋Œ€์‹  claim, ์ถฉ๋Œ, ์‹คํ–‰ ๊ฒฝ๋กœ๊ฐ€ ๋Œ์•„์˜จ๋‹ค.

{
  executionPlan: {
    entryIntent: string;
    domains: string[];
    core: string[];
    supporting: string[];
    selected: string[];
  };
  selection: { requested: string[]; selected: string[]; unsupported: string[] };
  routes: CapabilityPreflight[];
  dossier?: {
    claims: EngineClaim[];
    conflicts: ClaimConflict[];
    synthesis: DomainSynthesis[];
    timeline?: LifeTimeline;
    methodResults: Record<string, unknown>;
    blockedSystems: { capabilityId: string; reason: string }[];
  };
  evidence: SajuEvidence[];
  nameAnalysis?: KoreanNameAnalysis;
  noModelCalls: true;
}

์ƒ์„ธ๋„๋Š” brief, standard, expert, raw์ด๊ณ  ์ถœ๋ ฅ์€ action_only, consumer, evidence, debug๋‹ค. action_only๋Š” ํ–‰๋™ ์ œ์•ˆ๋งŒ, consumer๋Š” ์š”์•ฝยทํŒ์ •ยท์˜์—ญ๋ณ„ ํ•ด์„ยทํƒ€์ž„๋ผ์ธ, evidence๋Š” claimยท๊ณ„์‚ฐ ๊ฒฐ๊ณผยท์ง€์‹ ์ž์‚ฐยท์›๋ฌธยท์ถœ์ฒ˜, debug๋Š” ๋‚ด๋ถ€ ์‹คํ–‰ ๊ธฐ๋ก์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. maxClaims๋Š” debug๋ฅผ ์ œ์™ธํ•œ ์‘๋‹ต์—์„œ ํ•ด์„ยทํ–‰๋™ยทํƒ€์ž„๋ผ์ธยทclaimยท๊ณ„์‚ฐ ๊ฒฐ๊ณผ์— ํ•˜๋‚˜์˜ ๊ณตํ†ต ์˜ˆ์‚ฐ์œผ๋กœ ์ ์šฉ๋œ๋‹ค.

consumer ์‘๋‹ต์—๋Š” ์™•์‡ ยท๊ฒฉ๊ตญยท์šฉ์‹  ํŒ์ •์ด ์ƒ์‹œ ํฌํ•จ๋˜๊ณ , ์‘๋‹ต์— ์‹ฃ์ง€ ๋ชปํ•œ ๋‚ด๋ถ€ claim์€ evidenceIndex ์ƒ‰์ธ์œผ๋กœ ๋…ธ์ถœ๋œ๋‹ค. ๊ฐ™์€ ์ž…๋ ฅ์œผ๋กœ claimIds๋ฅผ ๋„˜๊ฒจ ์žฌํ˜ธ์ถœํ•˜๋ฉด ์ƒ‰์ธ์˜ claim ์ „๋ฌธ์„ ์„ ํƒ์ ์œผ๋กœ ๋ฐ›๋Š”๋‹ค.

์™œ ๋งŒ๋“ค์—ˆ๋‚˜

๋งŽ์€ ์—ญํ•™ AI ์„œ๋น„์Šค๋Š” ํ”„๋กฌํ”„ํŠธ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค. Legend Saju๋Š” ๊ทธ๋ณด๋‹ค ํ•œ ์ธต ์•„๋ž˜์ธ ๊ณ„์‚ฐ๊ณผ ๊ทผ๊ฑฐ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค.

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

์‹ค์ œ๋กœ ๋“ค์–ด ์žˆ๋Š” ์ž์‚ฐ

์ด ์ €์žฅ์†Œ๋Š” ๋ชจ๋ธ ํ˜ธ์ถœ ์ธํ„ฐํŽ˜์ด์Šค์™€ ํ•จ๊ป˜, ์–ด๋ ค์šด ๋ฐ์ดํ„ฐ์™€ ๊ทœ์น™ ์ž‘์—… ์ž์ฒด๋ฅผ ๊ณต๊ฐœํ•œ๋‹ค.

์ž์‚ฐ ๊ณต๊ฐœ ๋ฒ”์œ„
๋‹ค๊ตญ์–ด ์—ญํ•™ ์ง€์‹ ์ €์žฅ์†Œ 36๊ฐœ ์˜์—ญ, 777๊ฐœ ๊ทผ๊ฑฐ ํ•ญ๋ชฉ
๋ช…๋ฆฌ ์šฉ์–ด์ง‘ ํ•œ๊ตญ์–ดยทํ•œ์žยท์ค‘๊ตญ์–ดยท์ผ๋ณธ์–ด 777๊ฐœ ํ•ญ๋ชฉ
์ž๋ฏธ๋‘์ˆ˜ ์šฉ์–ด์ง‘ ์–ธ์–ด๋ณ„๋กœ ์ •๋ ฌ๋œ 214๊ฐœ ํ•ญ๋ชฉ
๊ถํ†ต๋ณด๊ฐ ์ผ๊ฐ„ร—์›”๋ น 120์นธ๊ณผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ•˜์œ„ ์˜ˆ์™ธ์ ˆ 66๊ฐœ
์ž๋ฏธ๋‘์ˆ˜ ๊ถ์„ฑ ์ด๋ก  ๊ตฌ์กฐํ™” ๊ทœ์น™ 163๊ฐœ์™€ ์„œ๋กœ ๋ถ„๋ฆฌ ๊ณ„์‚ฐ๋˜๋Š” ์‚ฌํ™” ํ”„๋กœํ•„ 3์ข…
๋Œ€์œก์ž„ 60์ผ์ง„ร—12์ฒœ๋ฐ˜, ๋‹ซํžŒ 720๊ตญ ์ „์†กํ‘œ
์ฒ ํŒ์‹ ์ˆ˜ ์งˆ๋ฌธ์‹œ๊ฐ ๊ฒฝ๋กœ ๊ด˜ 1,500์นธ, ์„ ์ฒœ 144ํ–‰, ํ‰์ƒ 2,028ํ–‰
ํ•œ๊ตญ ์„ฑ๋ช…ํ•™ ๋Œ€๋ฒ•์› ์ธ๋ช…์šฉ ํ•œ์ž ๊ด€์ธก 9,495๊ฑด๊ณผ ํš์ˆ˜ ์ดํ˜• ๊ด€์ธก 2,003๊ฑด
์›์ „ ๋ฒ”์œ„๊ฐ€ ๋ช…์‹œ๋œ 81์ˆ˜ 81๊ฐœ ์ „์ฒด ํ–‰๊ณผ 1์ฐจ ์ถœ์ฒ˜ ๋Œ€์กฐ
ํ•ด๋ชฝ ์ฃผ๊ณตํ•ด๋ชฝ 988๊ฐœ, ์•„๋ฅดํ…Œ๋ฏธ๋„๋กœ์Šค 211์ ˆ, ์˜๋ฏธ ๋Œ€์กฐ๊ฐ€ ๋๋‚œ ๊ต์ฐจ๋ฌธํ™” ๊ฐœ๋… 5๊ฐœ

๊ฒ€์‚ฌ ๊ฐ€๋Šฅํ•œ ์›๋ณธ ๋ฐ์ดํ„ฐ๋Š” data/์— ์žˆ๋‹ค. ์‹คํ–‰์— ํ•„์š”ํ•œ ์ง€์‹์€ ๋Ÿฐํƒ€์ž„์— ํฌํ•จ๋˜๋ฏ€๋กœ ์›๊ฒฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์ˆจ๊ฒจ์ง„ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค ์—†์ด ๋™์ž‘ํ•œ๋‹ค.

์ž๋ฏธ๋‘์ˆ˜ ๊ถ์„ฑ ๊ณ„์‚ฐ์˜ ์ตœ์ ํ™” ์ „ํ›„ ๊ฒฐ๊ณผ๋Š” 144๊ฐœ ์กฐํ•ฉ์—์„œ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ผ์น˜ํ–ˆ๋‹ค. ์ž์„ธํ•œ ๊ฒ€์ฆ ๋ฒ”์œ„๋Š” docs/PARITY.md์— ๊ธฐ๋ก๋ผ ์žˆ๋‹ค.

๊ตฌํ˜„ ๋ฒ”์œ„

์ฒด๊ณ„ ํ˜„์žฌ ๊ตฌํ˜„ ๊ฒฝ๊ณ„
๋งŒ์„ธ๋ ฅยท์‚ฌ์ฃผ ์›๊ตญ ์–‘๋ ฅยท์Œ๋ ฅยท์œค๋‹ฌ ๋ณ€ํ™˜, ์‚ฌ์ฃผํŒ”์ž, ๋Œ€์šด, ๋‚ ์งœ ๊ฒฝ๊ณ„
๋ช…๋ฆฌ ์›”๋ น, ํ†ต๊ทผ, ์ง€์žฅ๊ฐ„, ์‹ญ์„ฑ, ํ•ฉ์ถฉํ˜•ํŒŒํ•ด, ์šฉ์‹  ๊ด€๋ฒ• 3์ข…, ๊ถํ†ต๋ณด๊ฐ 120์นธ
์ž๋ฏธ๋‘์ˆ˜ 12๊ถ, ์‚ผ๋ฐฉ์‚ฌ์ •, ๋ณต์ˆ˜ ์‚ฌํ™” ํ”„๋กœํ•„, ๋น„์„ฑ ์—ฐ๊ฒฐ, ์ค‘์ฒฉ ์šดํ•œ
๋Œ€์œก์ž„ 60์ผ์ง„ร—12์ฒœ๋ฐ˜์˜ ๋‹ซํžŒ ํ‘œ์™€ ๊ฒฝ๊ณ„๊ฐ€ ๋ช…์‹œ๋œ ๊ณผ์ „๋ฒ•
๊ธฐ๋ฌธ๋‘”๊ฐ‘ ์‹œ๊ฐ€์ „๋ฐ˜, ๊ตฌ๊ถ, ๊ตฌ์„ฑ, ํŒ”๋ฌธ, ํŒ”์‹ , ์ง๋ถ€ยท์ง์‚ฌ, ๊ณต๋ง
์ฒ ํŒ์‹ ์ˆ˜ ์„ธ ํŒ๋ณธ์˜ ํ™ฉ๊ทน ์—ฐ์‡„์™€ ๋ณ„๋„ ์งˆ๋ฌธ์‹œ๊ฐ 14๊ณ„์—ด ํ‘œ, ์„ ์ฒœ์ˆ˜, 108๋…„ ์กฐ๋ฌธ์ˆ˜
ํ•œ๊ตญ ์„ฑ๋ช…ํ•™ ์ธ๋ช…์šฉ ํ•œ์ž 9,495๊ฑด, ์œ ๋‹ˆ์ฝ”๋“œยท์žํ˜• ๋ถ„ํ•ด, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐํžŒ ํš์ˆ˜ ์ฒด๊ณ„์˜ ์˜ค๊ฒฉ ๊ณ„์‚ฐ, ์›์ „ ๋ฒ”์œ„ 81์ˆ˜
ํ•ด๋ชฝ ๋ฐฐ์„ค๋ฌผยท๋ฌผยท์ดยท๋ถˆยท๊ณ ์ธ 5๊ฐœ ๊ฐœ๋…์˜ ๋…๋ฆฝ ์ „์Šน ๊ณตํ†ต์ ๊ณผ ์ถฉ๋Œ ์กฐ๊ฑด, ์—ฐ๊ฒฐ๋œ ์›๋ฌธ ๋ฐœ์ทŒ

๊ธฐ๋Šฅ ์ˆ˜๋ฅผ README์˜ ๊ณ ์ • ์ˆซ์ž๋กœ ๋ฏฟ๊ธฐ๋ณด๋‹ค getEngineManifest()๋กœ ํ˜„์žฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๋Š” ํŽธ์ด ์ •ํ™•ํ•˜๋‹ค.

์ถœ์ƒ์‹œ๊ฐ์€ ํ˜„์ง€ ๋ฏผ๊ฐ„์‹œ๋กœ ํ•ด์„ํ•œ๋‹ค. timezone๊ณผ longitudeE๋Š” ์ถœ์ƒ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ๋ณด์กดํ•˜๊ณ , ๊ธฐ๋ณธ ์ฐจํŠธ๋Š” ๊ทผ์‚ฌ ์ง„ํƒœ์–‘์‹œ ๋ณด์ • ์—†์ด ๋ฏผ๊ฐ„์‹œ๋ฅผ ๊ทธ๋Œ€๋กœ ์“ด๋‹ค. ์ด ์ •์ฑ…์€ ๊ธฐ๋Šฅ ๋ฐ ์ž…๋ ฅ ๊ฐ์‚ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๊ธฐ๋ก๋œ๋‹ค.

์ž˜๋ชป๋œ ์ถœ์ƒ ์ •๋ณด๋Š” ๊ตฌ์กฐํ™”๋œ blocked ๊ฒฝ๋กœ๋กœ ๋ฐ˜ํ™˜๋ผ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ์™€ ํ•จ๊ป˜ ์ •์ • ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์กด์žฌํ•  ์ˆ˜ ์—†๋Š” targetDate๋‚˜ questionDateTime์€ ๋‚ ์งœ ๊ธฐ๋ฐ˜ ๊ณ„์‚ฐ ์ „์ฒด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์š”์ฒญ ์ž์ฒด๋ฅผ ๊ฑฐ์ ˆํ•œ๋‹ค.

ํ•˜๋‚˜์˜ ์—ด๋ฆฐ ์ง„์ž…์ 

import { resolve } from "./dist/index.js";

resolve({ question, ...inputs })๋Š” ํ˜„์žฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ , ์งˆ๋ฌธ์„ ๋ผ์šฐํŒ…ํ•˜๊ณ , ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ณ„์‚ฐ๊ธฐ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ๋ถ€์กฑํ•œ ์ž…๋ ฅ์„ ์ˆจ๊ธฐ์ง€ ์•Š์€ ์ฑ„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. requestedCapabilities๋Š” ๋‹ซํžŒ enum์ด ์•„๋‹Œ ์ผ๋ฐ˜ ๋ฌธ์ž์—ด์„ ๋ฐ›๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์—”์ง„์— ์ƒˆ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•ด๋„ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ ์Šคํ‚ค๋งˆ๋ฅผ ํ•จ๊ป˜ ๋ฐ”๊ฟ€ ํ•„์š”๊ฐ€ ์—†๋‹ค.

์ด๋ฆ„์„ resolveAsync์˜ name์œผ๋กœ ๋„˜๊ธฐ๋ฉด ๋ณ„๋„์˜ ํ•œ๊ตญ ์„ฑ๋ช…ํ•™ ์ „์ฒด ๊ฒฝ๋กœ๊ฐ€ ์—ด๋ฆฐ๋‹ค. ์‹ค์ œ ์„ฑ๊ณผ ์ด๋ฆ„ ํ•œ์ž๋ฅผ 9,495๊ฐœ ๊ด€์ธก ์Šค๋ƒ…์ƒท๊ณผ ๋Œ€์กฐํ•˜๊ณ , ๋ฒ•์  ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ, ๋ฐฐ์ • ์Œ, ๊ด€์ธก ํš์ˆ˜ ํ›„๋ณด, ์œ ๋‹ˆ์ฝ”๋“œ, ์žํ˜• ๋ถ„ํ•ด, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐํžŒ ์˜ค๊ฒฉ ๊ณ„์‚ฐ๋ฒ•, 81์ˆ˜ ๋Œ€์กฐ๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ๊ทผ๊ฑฐ ์ธต์œผ๋กœ ์œ ์ง€ํ•œ๋‹ค.

๊ธฐ์กด ๋™๊ธฐ์‹ resolve๋Š” ๊ณ„์‚ฐ ์ „์šฉ ์‚ฌ์šฉ์ž์™€ ํ˜ธํ™˜๋œ๋‹ค. ๋น„๋™๊ธฐ์‹์€ ์ด๋ฆ„์ด ๋“ค์–ด์™”์„ ๋•Œ๋งŒ ํฐ ์„ฑ๋ช…ํ•™ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์—ฐ ๋กœ๋”ฉํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜ ์‚ฌ์ฃผ ๊ณ„์‚ฐ์˜ ์‹œ์ž‘ ๋น„์šฉ์ด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค.

analyze(input)๋Š” ํƒ€์ž…์ด ์ •ํ•ด์ง„ ์ถœ์ƒ ๋ช…์„ธ API๋‹ค. query({ intent, ... })๋Š” 26๊ฐœ intent๋ฅผ ์ง€์›ํ•˜๋Š” ํ˜ธํ™˜ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ์„ค๋ช…๊ณผ UI ๊ฐ™์€ ์–ด๋Œ‘ํ„ฐ๋Š” ๊ณ„์‚ฐ ์ฝ”์–ด์™€ ๋ถ„๋ฆฌํ•œ๋‹ค.

์„ฑ๋Šฅ

์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฒค์น˜๋งˆํฌ๊ฐ€ ํฌํ•จ๋ผ ์žˆ๋‹ค.

npm run benchmark

ํ˜„์žฌ Apple Silicon ๊ฐœ๋ฐœ ์žฅ๋น„์™€ Node 26์—์„œ ์ตœ์ ํ™” ๊ธฐ์ค€๊ฐ’์€ ์‚ฌ์ฃผ ์›๊ตญ ์งˆ์˜ ์ค‘์•™๊ฐ’ 1.13ms, ์ถœ์ƒ์‹œ๊ฐ„์„ ์•„๋Š” ์ „์ฒด ๋ช…์„ธ ์ค‘์•™๊ฐ’ ์•ฝ 600ms, ์ƒˆ ํ”„๋กœ์„ธ์Šค import ์ค‘์•™๊ฐ’ 63.1ms์˜€๋‹ค. ๊ธฐ๊ธฐ์™€ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋Š” ๊ณตํ•™์  ๊ด€์ธก๊ฐ’์ด๋‹ค. ์ตœ์‹  ํ™˜๊ฒฝ๊ณผ ์ธก์ •๋ฒ•์€ PERFORMANCE.md๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.

์ถœ์ƒ์‹œ๊ฐ„์„ ๋ชจ๋ฅผ ๋•Œ

const result = analyze({
  birth: {
    year: 1990,
    month: 1,
    day: 1,
    calendar: "solar",
    gender: "๋‚จ",
    birthTimeAccuracy: "unknown"
  },
  question: "์ „์ฒด ์ธ์ƒ"
});

๊ณ ์ •๋˜๋Š” ๊ธฐ๋‘ฅ, ๋‹ฌ๋ผ์ง€๋Š” ๊ด€๊ณ„, ๋ชจ๋“  ์‹œ์ฃผ ํ›„๋ณด๋ฅผ ๋ถ„๋ฆฌํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ›„๋ณด ํ™•์ •์€ ๊ณผ๊ฑฐ ์‚ฌ๊ฑด ๋Œ€์กฐ์™€ ์‚ฌ์šฉ์ž์˜ ๋ชซ์œผ๋กœ ๋‚จ๊ธด๋‹ค.

์‹ ๋น„๋ณด๋‹ค ๋ฐฉ๋ฒ•๋ก 

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.

  1. ์—ญ๋ฒ•๊ณผ ์›๊ตญ ๊ณ„์‚ฐ
  2. ๊ตฌ์กฐ ๊ด€์ฐฐ
  3. ์œ ํŒŒ์— ๋”ฐ๋ฅธ ํ•ด์„
  4. ์—ฌ๋Ÿฌ ์ฒด๊ณ„์˜ ์ข…ํ•ฉ
  5. ์ธ๊ฐ„ ๋˜๋Š” LLM์ด ์ž‘์„ฑํ•œ ์„ค๋ช…

์ œํ’ˆ ์ˆ˜์ค€์˜ ์ฃผ์žฅ์„ ํ•˜๊ธฐ ์ „ ๋ฐฉ๋ฒ•๋ก ๊ณผ ๊ธฐ๋Šฅ ๊ฒฝ๊ณ„๋ฅผ ์ฝ์–ด์•ผ ํ•œ๋‹ค.

์‹ค์ œ ๊ฐœ๋ฐœ ๊ณผ์ •์—๋Š” ๊ฐœ๋ฐœ ์ˆœ์„œ, ๋‹ค๊ตญ์–ด ์กฐ์‚ฌ ์ฟผ๋ฆฌ, ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์—์ด์ „ํŠธ ์ž‘์—… ์ง€์‹œ๊ฐ€ ๋“ค์–ด ์žˆ๋‹ค.

๋ผ์ด์„ ์Šค

ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” Apache-2.0์ด๋‹ค. ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋ฐ์ดํ„ฐ์…‹์€ ๊ฐ์ž์˜ ์ด์šฉ ์กฐ๊ฑด์„ ๋”ฐ๋ฅธ๋‹ค. DATA_LICENSES.md์™€ THIRD_PARTY_NOTICES.md๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.