Memento-cmp
A Three-Layer Memory Architecture for LLMs (Redis + Postgres + Vector) MCP
Documentation
Memento MCP
AI์๊ฒ ๊ธฐ์ต์ ์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ธฐ์ต์ ๋ฐํ์ผ๋ก ์ฑ์ฅํ๊ฒ ํฉ๋๋ค.
๋งค์ผ ์์นจ ๊ธฐ์ต์ด ๋ฆฌ์ ๋๋ ์ ์ ์ง์์ ์์ํด๋ณด๋ผ. ์ด์ ๊ฐ๋ฅด์น ๊ฒ๋, ์ง๋์ฃผ ํจ๊ป ํด๊ฒฐํ ๋ฌธ์ ๋, ์ทจํฅ๋ ์ ๋ถ ๊น๋จน๋๋ค. Memento MCP๋ ์ด ์ ์ ์๊ฒ ๊ธฐ์ต์ ์ฌ์ด์ค๋ค.
Memento MCP๋ MCP(Model Context Protocol) ๊ธฐ๋ฐ ์์ด์ ํธ ์ฅ๊ธฐ ๊ธฐ์ต ์๋ฒ๋ค. ์ธ์ ์ด ์ข ๋ฃ๋์ด๋ ์ค์ํ ์ฌ์ค, ๊ฒฐ์ , ์๋ฌ ํจํด, ์ ์ฐจ๋ฅผ ์ ์งํ๊ณ ๋ค์ ์ธ์ ์์ ๋ณต์ํ๋ค.
๋จ์ํ ๊ธฐ์ต์ ๋์๊ด์ด ์๋๋ค. ํผ๋๋ฐฑ์ด ์์ด๋ฉด ์ฐ๊ฒฐ์ด ๊ฐํด์ง๊ณ , ๊ฒฝํ์ด ๋ฐ๋ณต๋๋ฉด ํจํด์ด ์ถ์ํ๋๊ณ , ์ธ์ ์ด ์ด์ด์ง๋ฉด ์ด์ผ๊ธฐ๊ฐ ์๊ธด๋ค. ๊ธฐ์ตํ๋ AI๊ฐ ์๋๋ผ ๊ฒฝํ์ผ๋ก ์ฑ์ฅํ๋ AI๋ฅผ ์งํฅํ๋ค.
[!TIP] ์ค์นยท์ค์ ์ ์ง์ ๋ค๋ฃจ๊ธฐ ๋ถ๋ด์ค๋ฝ๋ค๋ฉด Claude CodeยทCursorยทCodex ๊ฐ์ AI ์ด์์คํดํธ์ ๋ค์ ํ ๋ฌธ์ฅ์ ์ ๋ฌํ๋ฉด ๋๋ค.
"memento-mcp ์ ์ฅ์๋ฅผ ๋ด ํ๊ฒฝ์ ์ค์นํ๊ณ ,
docs/INSTALL.md์SKILL.md๋ฅผ ์ฝ์ด ๊ถ์ฅ ์ค์ ์ ์ ์ฉํ ๋ค ๋์์ ๊ฒ์ฆํด ์ค."์์กด์ฑ ์ค์น,
.env๊ตฌ์ฑ, MCP ๋ฑ๋ก, ํฌ์ค ์ฒดํฌ๊น์ง AI๊ฐ ์๋ดํ๋ค. ์์ธํ ์์ ์ ์ฐจ๋docs/INSTALL.md์ฐธ๊ณ .
30์ด ์ฒดํ
AI์๊ฒ ๋ฌด์ธ๊ฐ๋ฅผ ๊ธฐ์ต์ํค๊ณ , ๋ค์ ์ธ์ ์์ ๊บผ๋ด ๋ณด๋ ํ๋ฆ์ด๋ค:
[์ธ์
1]
์ฌ์ฉ์: "์ฐ๋ฆฌ ํ๋ก์ ํธ๋ PostgreSQL 15๋ฅผ ์ฐ๊ณ , ํ
์คํธ๋ Vitest๋ก ๋๋ ค"
โ AI๊ฐ remember ํธ์ถ โ ํํธ 2๊ฐ ์ ์ฅ
[์ธ์
2 โ ๋ค์ ๋ ]
โ AI๊ฐ context ํธ์ถ โ "PostgreSQL 15 ์ฌ์ฉ", "Vitest ํ
์คํธ" ์๋ ๋ณต์
์ฌ์ฉ์: "ํ
์คํธ ์ด๋ป๊ฒ ๋๋ฆฌ๋๋ผ?"
โ AI๊ฐ recall ํธ์ถ โ "Vitest๋ก ํ
์คํธ ์คํ" ํํธ ๋ฐํ
โ AI: "์ด ํ๋ก์ ํธ๋ Vitest๋ฅผ ์ฌ์ฉํฉ๋๋ค. npx vitest๋ก ์คํํ์ธ์."
๋งค ์ธ์ ๋ง๋ค ๊ฐ์ ์ค๋ช ์ ๋ฐ๋ณตํ ํ์๊ฐ ์๋ค.
์ค์น
ํ์: Node.js 20+, PostgreSQL (pgvector ํ์ฅ)
cp .env.example.minimal .env
# .env ๊ฐ์ ํธ์งํ ๋ค ์
ธ์ ๋ฐ์
export $(grep -v '^#' .env | grep '=' | xargs)
npm install
npm run migrate
node server.js
OpenAI API ์์ด ๋ก์ปฌ ์๋ฒ ๋ฉ์ ์ฌ์ฉํ๋ ค๋ฉด .env์ EMBEDDING_PROVIDER=transformers๋ฅผ ์ถ๊ฐํ๋ค. ๊ธฐ๋ ์ Xenova/multilingual-e5-small ๋ชจ๋ธ์ ์๋์ผ๋ก ๋ค์ด๋ก๋ํ๋ค. ๋จ, OpenAI ์๋ฒ ๋ฉ์ผ๋ก ์ด๋ฏธ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ํผ์ฉํ๋ฉด ์ฐจ์์ด ๋ถ์ผ์นํ๋ฏ๋ก ์๋ก ๋ง์ด๊ทธ๋ ์ด์
๋ DB์์๋ง ์ฌ์ฉํ ๊ฒ.
์๋ฒ๊ฐ ๋ฌ ๋ค์๋ First Memory Flow๋ก ๋์์ ๊ฒ์ฆํ๋ค.
๋ค๋ฅธ ํ๋ซํผ ์ค์ ์ ์ ํธํ ํ๋ซํผ ํ ์ด๋ธ ์ฐธ์กฐ.
์ ๋ฐ์ดํธ
cd ~/memento-mcp
git pull origin main
npm install
npm run migrate
# ์๋น์ค ์ฌ์์ (systemd / pm2 / docker ๋ฑ ํ๊ฒฝ์ ๋ง๊ฒ)
npm run migrate๋.env์ DB ์ค์ ์ ์๋์ผ๋ก ์ฌ์ฉํ๋ค.DATABASE_URL์๋ ์ง์ ๋ถํ์.- pgvector ์คํค๋ง๋ ์๋ ๊ฐ์ง๋๋ค.
PGVECTOR_SCHEMA์ค์ ์ ๋๋ถ๋ถ ๋ถํ์.
Claude Code ์ฐ๋
claude mcp add CLI๋ก ๋ฑ๋กํ๋ค (HTTP ํ์
MCP ์๋ฒ๋ settings.json์ ์๋ ๊ธฐ์ฌํด๋ ์ธ์๋์ง ์๋๋ค).
claude mcp add memento http://localhost:57332/mcp \
--transport http \
--scope user \
--header "Authorization: Bearer YOUR_ACCESS_KEY"
๋ฑ๋ก์ ~/.claude.json์ ์ ์ฅ๋๋ค. ํ์ธ:
claude mcp list
# memento: http://localhost:57332/mcp (HTTP) - โ Connected
ํ๋ก์ ํธ ๋จ์๋ก ๊ณต์ ํ๋ ค๋ฉด ์ ์ฅ์ ๋ฃจํธ์ .mcp.json์ ๊ธฐ์ฌํ๋ค. ์์ธ ์ค์ ์ Claude Code Configuration ์ฐธ์กฐ.
Codex Desktop ์ฐ๋
Codex Desktop ๋ฑ ์ผ๋ถ MCP ํด๋ผ์ด์ธํธ๋ deferred/lazy tool discovery๋ฅผ ์ด๋ค. tool_search๊ฐ ๊ฒ์์ด์ limit์ ๋ฐ๋ผ ์ผ๋ถ ๋๊ตฌ๋ง ๋ ธ์ถํ๋ฏ๋ก, ํญ์ ์กด์ฌํ๋ recall์ด ์ ์ฅ ํธํฅ ์ฟผ๋ฆฌ+๋ฎ์ limit์์ ๋น ์ง ์ ์๋ค. recall์ด ์ ๋ณด์ด๋ฉด ๋ ๋์ ์ฟผ๋ฆฌ์ limit 20 ์ด์์ผ๋ก ์ฌ๊ฒ์ํ๋ค. ๊ถ์ฅ: ์์ด์ ํธ system prompt/instructions์ ์ด ์ฌ๊ฒ์ ๊ท์น์ ๋ฏธ๋ฆฌ ์ฌ์ด ์ด๊ธฐ discovery ๋ฃจํ๋ฅผ ์ฐจ๋จํ๋ค.
- query:
memento context recall remember reflect batch_remember search_traces reconstruct_history - limit: 20 ์ด์
์ง์ ํ๊ฒฝ
| ํ๊ฒฝ | ๊ถ์ฅ๋ | ์์ ๋ฌธ์ |
|---|---|---|
| Linux / macOS | ๊ถ์ฅ | Quick Start |
| Windows + WSL2 | ๊ฐ์ฅ ๊ถ์ฅ | Windows WSL2 Setup |
| Windows + PowerShell | ์ ํ ์ง์ | Windows PowerShell Setup |
ํธํ ํ๋ซํผ
Memento๋ MCP(Model Context Protocol) ํ์ค ์๋ฒ๋ค. Claude Code๋ฟ ์๋๋ผ, MCP๋ฅผ ์ง์ํ๋ ๋ชจ๋ AI ํ๋ซํผ์์ ์ฌ์ฉํ ์ ์๋ค.
| ํ๋ซํผ | ์ค์ ์์น | ์ฐ๊ฒฐ ๋ฐฉ์ |
|---|---|---|
| Claude Code | claude mcp add CLI (~/.claude.json) ๋๋ .mcp.json | Streamable HTTP |
| Claude Desktop | claude_desktop_config.json | Streamable HTTP |
| Claude.ai Web | Settings > Integrations | OAuth (RFC 7591) |
| Cursor | .cursor/mcp.json | Streamable HTTP |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | Streamable HTTP |
| GitHub Copilot | VS Code MCP Marketplace | Streamable HTTP |
| Codex CLI | ~/.codex/config.toml | Streamable HTTP |
| ChatGPT Desktop | Developer Mode > Apps | OAuth (RFC 7591) |
| Continue | config.json | Streamable HTTP |
๊ณตํต ์ค์ : ์๋ฒ URL http://localhost:57332/mcp, Authorization ํค๋์ Bearer YOUR_ACCESS_KEY.
Claude.ai Web / ChatGPT ์ฐ๋์ OAuth๋ฅผ ์ฌ์ฉํ๋ค. ๋ฐ๊ธํ API ํค(mmcp_xxx)๋ฅผ client_id๋ก ์
๋ ฅํ๋ฉด Dynamic Client Registration(RFC 7591) ์์ด ๋ฐ๋ก ์ฐ๊ฒฐ๋๋ค. ์ ๋ขฐ ๋๋ฉ์ธ(claude.ai, chatgpt.com)์ redirect URI๋ ์๋ ์น์ธ๋๋ค.
ํ๋ซํผ๋ณ ์์ธ ์ค์ ์ ์ฐ๋ ๊ฐ์ด๋ ์ฐธ์กฐ.
7๊ฐ์ง ํํธ ์ ํ
| ์ ํ | ์ค๋ช | ์ฉ๋ |
|---|---|---|
fact | ์ฌ์ค | ์ค์ ๊ฐ, ๊ฒฝ๋ก, ๋ฒ์ ๋ฑ ๊ฐ๊ด์ ์ ๋ณด |
decision | ์์ฌ๊ฒฐ์ | ์ํคํ ์ฒ ์ ํ, ๊ธฐ์ ์คํ ๊ฒฐ์ ๊ณผ ๊ทผ๊ฑฐ |
error | ์๋ฌ | ๋ฐ์ํ ์๋ฌ์ ์์ธ, ํด๊ฒฐ ๋ฐฉ๋ฒ |
preference | ์ ํธ | ์ฌ์ฉ์ ์คํ์ผ, ์ฝ๋ฉ ๊ท์น, ์์ ๋ฐฉ์ |
procedure | ์ ์ฐจ | ๋ฐฐํฌ, ๋น๋, ํ ์คํธ ๋ฑ ๋ฐ๋ณต ๊ฐ๋ฅํ ๋จ๊ณ |
relation | ๊ด๊ณ | ์ํฐํฐ ๊ฐ ์ฐ๊ฒฐ, ์์กด์ฑ, ์์ ๊ด๊ณ |
episode | ์ํผ์๋ | ์ ํ๊ด๊ณ๋ฅผ ํฌํจํ๋ ์์ฌ ๊ธฐ์ต (1000์, ๋๋จธ์ง๋ 300์) |
ํต์ฌ ๊ธฐ๋ฅ
| ๊ธฐ๋ฅ | ์ค๋ช |
|---|---|
remember | ์ค์ํ ์ ๋ณด๋ฅผ ์์์ ํํธ์ผ๋ก ๋ถํดํ์ฌ ์ ์ฅ. MEMENTO_REMEMBER_ATOMIC=true ์ quota check + INSERT๋ฅผ ๋จ์ผ ํธ๋์ญ์
์ผ๋ก ์์ํ. |
recall | ํค์๋ + ์๋งจํฑ 3๊ณ์ธต ๊ฒ์์ผ๋ก ํ์ํ ๊ธฐ์ต๋ง ๋ฐํ. SearchScope๊ฐ workspace/caseId/affect ๋ฑ scope๋ฅผ L1~L3 ์ ๋ ์ด์ด์ ์ ํฉ ์ ์ฉ. |
context | ์ธ์ ์์ ์ ํต์ฌ ๋งฅ๋ฝ์ ์๋ ๋ณต์ |
| ์๋ ์ ๋ฆฌ | ์ค๋ณต ๋ณํฉ, ๋ชจ์ ํ์ง, ์ค์๋ ๊ฐ์ , TTL ๊ธฐ๋ฐ ๋ง๊ฐ |
| storage ์ด๋ํฐ ๊ณ์ธต | lib/storage/ ์ ์ค. getStorage() ํฉํ ๋ฆฌ๊ฐ MEMENTO_STORAGE ENV์ ๋ฐ๋ผ PgVectorStore(๊ธฐ๋ณธ) ๋๋ SqliteVecStore(v4.1 ์์ )๋ฅผ ๋ฐํ. |
| ๋งํฌ ์ฌํตํฉ | tool_feedback ํผ๋๋ฐฑ์ด fragment_links์ weight/confidence์ ์ค์๊ฐ ๋ฐ์ (ReconsolidationEngine). ๋ชจ์ ๋งํฌ๋ ์๋ ๊ฒฉ๋ฆฌ(quarantine). |
| ํ์ฐ ํ์ฑํ | recall ์ contextText๋ฅผ ์ ๋ฌํ๋ฉด ๊ด๋ จ ํํธ์ activation_score๋ฅผ ์ ์ ์ ์ผ๋ก ๋ถ์คํธํ์ฌ ๋งฅ๋ฝ ์ฐ๊ด์ฑ ๋์ ๊ฒฐ๊ณผ ์ฐ์ ๋ฐํ (SpreadingActivation). |
| ์ํผ์๋ ์ฐ์์ฑ | reflect ํ ์์ฑ๋ episode ํํธ ๊ฐ preceded_by ์ฃ์ง๋ฅผ ์๋ ์์ฑํ์ฌ ๊ฒฝํ ํ๋ฆ์ ๊ทธ๋ํ๋ก ๋ณด์กด (EpisodeContinuityService). |
| ๊ด๋ฆฌ ์ฝ์ | ๊ธฐ์ต ํ์, ์ง์ ๊ทธ๋ํ, ํต๊ณ ๋์๋ณด๋, API ํค ๊ทธ๋ฃน/์ํ ํํฐ, daily-limit ์ธ๋ผ์ธ ํธ์ง |
| OAuth ์ฐ๋ | RFC 7591 Dynamic Client Registration, Claude.ai / ChatGPT Web ํตํฉ ์ง์ |
| Workspace ๊ฒฉ๋ฆฌ | ๊ฐ์ ํค ๋ด์์๋ ํ๋ก์ ํธยท์ง์ข
ยทํด๋ผ์ด์ธํธ ๋จ์๋ก ๊ธฐ์ต์ ๋ถ๋ฆฌ. api_keys.default_workspace๋ก ์๋ ํ๊น
, ๊ฒ์ ์ ์๋ ํํฐ. |
| ๋ฐฐ์น ์ฒ๋ฆฌ | batch_remember๋ multi-row ๋จ์ผ INSERT(256KB ๋๋ 500ํ chunk) + ๋น๋๊ธฐ ํ ์์ปค(BatchRememberWorker)๋ก ์๋ฒ ๋ฉยทํ์ฒ๋ฆฌ๋ฅผ ๋
ผ๋ธ๋กํน ์คํ. async: true ์ ackยท์ฌ์๋(์ต๋ 3ํ)ยทdead-letterยท๊ธฐ๋ ๋ณต๊ตฌ(RPOPLPUSH reliable queue)๋ก at-least-once ์ฒ๋ฆฌ ๋ณด์ฅ. batch_status(jobId) ๋๊ตฌ๋ก ์ฒ๋ฆฌ ์ํ(queued/processing/completed/dead) ์กฐํ ๊ฐ๋ฅ. ํญ์ ํ์ค ๋จ์ผ JSON-RPC ์๋ต ๋ฐํ(stream deprecated). reflect๋ 5์นดํ
๊ณ ๋ฆฌ๋ฅผ ๋จ์ผ ๋ฐฐ์น ํธ์ถ๋ก ์์. EmbeddingWorker๋ ํ ๋ฌถ์์ generateBatchEmbeddings + multi-row UPDATE๋ก ์ฒ๋ฆฌ. |
| Consistency Gate | fragments.morpheme_indexed ์ปฌ๋ผ์ผ๋ก ํํ์ ์ธ๋ฑ์ค ์๋ฃ ์ฌ๋ถ ์ถ์ . ๋ฏธ์๋ฃ ํํธ์ L3 ํํ์ ๊ฒ์ ๊ฒฝ๋ก์์ ์๋ ์ ์ธ. |
| Mode preset | recall-only / write-only / onboarding / audit JSON preset. X-Memento-Mode ํค๋ ๋๋ api_keys.default_mode๋ก ๋๊ตฌ ๋
ธ์ถ ๋ฒ์ ์ ํ. |
| Affective tagging | fragments.affect ์ปฌ๋ผ(neutral / frustration / confidence / surprise / doubt / satisfaction). remember / recall ์ ๊ฐ์ ๋ ์ด๋ธ๋ก ํํฐ๋ง. |
| ๋ก์ปฌ ์๋ฒ ๋ฉ | EMBEDDING_PROVIDER=transformers๋ก ์ธ๋ถ API ์์ด @huggingface/transformers ํ์ดํ๋ผ์ธ ๊ธฐ๋ฐ ์๋ฒ ๋ฉ(Xenova/multilingual-e5-small, 384d ๊ธฐ๋ณธ). |
| ๋ง์ด๊ทธ๋ ์ด์ lint | npm run lint:migrations๋ก ์ ๊ท ๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ ๋ฒํธ ์ถฉ๋ยท๊ท์ฝ ์๋ฐ์ ์ปค๋ฐ ์ ์๋ ๊ฒ์ฌ. |
์ ์ฒด MCP ๋๊ตฌ ๋ชฉ๋ก์ SKILL.md ์ฐธ์กฐ.
CLI
์๊ฒฉ MCP ์๋ฒ๋ฅผ ๋ก์ปฌ ๋
ธ๋ ์์ด ์ง์ ์กฐ์ํ ์ ์๋ค. --remote URL --key KEY ์ ์ญ ํ๋๊ทธ ๋๋ MEMENTO_CLI_REMOTE / MEMENTO_CLI_KEY ํ๊ฒฝ๋ณ์๋ก ์ง์ ํ๋ค.
# ์๊ฒฉ ์๋ฒ์์ recall (ํ๊ฒฝ๋ณ์ ๋ฐฉ์)
MEMENTO_CLI_REMOTE=https://example.com/mcp MEMENTO_CLI_KEY=mmcp_xxx memento-mcp recall "query"
# ์๊ฒฉ ์๋ฒ์์ recall (ํ๋๊ทธ ๋ฐฉ์)
memento-mcp recall "query" --remote https://example.com/mcp --key mmcp_xxx
# ํ ํ์ ์ถ๋ ฅ, ๊ฒฐ๊ณผ 5๊ฑด
memento-mcp recall "query" --format table --limit 5
# idempotency key๋ก ์ค๋ณต ์ ์ฅ ๋ฐฉ์ง
memento-mcp remember "๋ด์ฉ" --topic ํ๋ก์ ํธ๋ช
--idempotency-key k1
--format table|json|csv ์ถ๋ ฅ ํ์ ์ ํ, 14๊ฐ ์๋ธ๋ช
๋ น์ --help/-h ์ง์. ์์ธํ ํ๋๊ทธ๋ docs/cli.md.
API ์๋ต ๋ฉํ
recall / context ์๋ต์ _meta: { searchEventId, hints, suggestion, serverTime } ํ๋๋ฅผ ํฌํจํ๋ค. serverTime์ LLM ํด๋ผ์ด์ธํธ์ ํ์ต ์์ ์๊ฐ ๊ณ ์ฐฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋งค ์๋ต๋ง๋ค ์๋ฒ ํ์ฌ ์๊ฐ์ ๋
ธ์ถํ๋ค.
{
"fragments": [...],
"_meta": {
"searchEventId": "evt-abc123",
"hints": { "signal": "consider_context" },
"suggestion": { "code": "large_limit_no_budget", "message": "..." },
"serverTime": {
"iso" : "2026-05-15T06:32:11.000Z",
"epoch_ms" : 1747291931000,
"display_kst": "2026๋
5์ 15์ผ (๋ชฉ) 15:32",
"timezone" : "Asia/Seoul"
}
}
}
remember / link / forget / amend๋ dryRun: true ํ๋ผ๋ฏธํฐ๋ก ๋ถ์์ฉ ์์ด ์์ ๊ฒฐ๊ณผ๋ง ๋ฐํํ๋ค. ๋ชจ๋ ์๋ต์ X-RateLimit-Limit / X-RateLimit-Remaining / X-RateLimit-Resource ํค๋๊ฐ ํฌํจ๋๋ฉฐ master key ๋๋ limit=null ์ค์ ์ ํค๋๋ฅผ ์๋ตํ๋ค. recall์ fields ๋ฐฐ์ด๋ก ๋ฐํ ํ๋๋ฅผ 17๊ฐ ํ์ดํธ๋ฆฌ์คํธ ๋ฒ์๋ก ์ ํํ ์ ์๋ค. remember / batchRemember๋ idempotencyKey ํ๋ผ๋ฏธํฐ๋ก ๊ฐ์ key_id ๋ฒ์ ๋ด ์ค๋ณต ์ ์ฅ์ ๋ฐฉ์งํ๋ค(์ต๋ 128์).
๋ณด์
- RBAC default-deny:
TOOL_PERMISSIONS๋งต์ ์๋ ๋๊ตฌ๋ช ์ ๊ถํ๊ณผ ๋ฌด๊ดํ๊ฒ ์ฆ์ ๊ฑฐ๋ถ. - ํ
๋ํธ ๊ฒฉ๋ฆฌ: forget / amend / link / fragment_history๋ SQL ๋ ๋ฒจ
key_id์กฐ๊ฑด์ผ๋ก ํ ํ ๋ํธ ํํธ ์ ๊ทผ ๋ถ๊ฐ. "์์"๊ณผ "๊ถํ ์์"์ ๋์ผ ๋ฉ์์ง๋ก ์ฒ๋ฆฌํ์ฌ ์กด์ฌ ์ฌ๋ถ ๋ ธ์ถ ๋ฐฉ์ง. - injectSessionContext: ํด๋ผ์ด์ธํธ๊ฐ ์ ์กํ
_keyId/_permissions๋ฑ ๋ด๋ถ ํ๋๋ฅผ ์๋ฒ ์ธ์ฆ ๊ฒฐ๊ณผ๋ก ์ฌ์ฃผ์ ํ์ฌ ์ธ์ ์ปจํ ์คํธ ์์กฐ ์ฐจ๋จ. - Admin rate limit:
/auth,/keysPOST,/importPOST์ IP ๊ธฐ๋ฐ rate limit. - OpenAPI:
GET /openapi.json์๋ํฌ์ธํธ(ENABLE_OPENAPI=true). master key๋ ์ ์ฒด ๊ฒฝ๋ก, API key๋ permissions ํํฐ ์คํ ๋ฐํ.
Symbolic Verification Layer
์ ํ์ ์ค๋ช ๊ฐ๋ฅ์ฑ, advisory ๋งํฌ ๋ฌด๊ฒฐ์ฑ, ๊ทน์ฑ ์ถฉ๋ ํ์ง, ์ ์ฑ ๊ท์น soft gating. 9 core ๋ชจ๋ + 5 ๊ท์น ํ์ผ. ๋ชจ๋ ํ๋๊ทธ ๊ธฐ๋ณธ ๋นํ์ฑ.
Smart Recall
- ProactiveRecall:
remember()์ ํค์๋ ์ค๋ฒ๋ฉ ๊ธฐ๋ฐ ์ ์ฌ ํํธ ์๋ ๋งํฌ. - CaseRewardBackprop: case verification ์ด๋ฒคํธ ์ ์ฆ๊ฑฐ ํํธ importance ์๋ ์ญ์ ํ.
- SearchParamAdaptor: ์ฌ์ฉ ํจํด ๊ธฐ๋ฐ ๊ฒ์ ์๊ณ๊ฐ ์๋ ์ต์ ํ.
- CBR(Case-Based Reasoning):
recall(caseMode=true)๋ก ์ ์ฌ ์ฌ๋ก์ goal โ events โ outcome ํ๋ฆ์ ๊ฒ์ํ์ฌ ๊ณผ๊ฑฐ ํด๊ฒฐ ํจํด ์ฌํ์ฉ. - depth ํํฐ: Planner/Executor ์ญํ ๋ณ ๊ฒ์ ๊น์ด ์ ์ด(
"high-level"/"detail"/"tool-level"). - recall ์๋ต
key_id: ๋ฐํ ํํธ์ ์์ ํ ๋ํธ ์๋ณ์ ํฌํจ. - Reconsolidation:
tool_feedback๊ธฐ๋ฐfragment_linksweight/confidence ์ค์๊ฐ ๊ฐฑ์ (ENABLE_RECONSOLIDATION=true). - Spreading Activation:
recall(contextText=...)์ ๋ฌ ์ ๋ํ ๋งฅ๋ฝ ๊ธฐ๋ฐ ๊ด๋ จ ํํธ ema_activation ์ ์ ํ์ฑํ(ENABLE_SPREADING_ACTIVATION=true).
fragments.id๋ frag-{16์ hex} text ํ์์ด๋ค. UUID๊ฐ ์๋๋ฏ๋ก ์ธ๋ถ์์ ID๋ฅผ ์์ฑํ๊ฑฐ๋ ํ์ฑํ ๋ ์ฃผ์ํ๋ค.
/metrics ์๋ํฌ์ธํธ๊ฐ Prometheus ํธํ ํ์์ผ๋ก ๋ฉํธ๋ฆญ์ ๋
ธ์ถํ๋ค. ์์งยท์๊ฐํ๋ ์ฌ์ฉ์๊ฐ ์์ ๋กญ๊ฒ ๊ตฌ์ฑํ๋ค.
๊ธฐ์ต vs ๊ท์น
Memento๊ฐ ์ฃผ์ ํ๋ ๊ธฐ์ต ํํธ์ ์์คํ ํ๋กฌํํธ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋ฎ๋ค. "PostgreSQL 15๋ฅผ ์ด๋ค"๊ฐ์ ์ฌ์ค ๊ธฐ์ต์ ์ ์๋ํ์ง๋ง, "ํ ์คํธ ์์ฑ ์ ๋ฐ๋์ Given-When-Then ํจํด์ ์ธ ๊ฒ"๊ฐ์ ํ๋ ๊ท์น์ ์์คํ ํ๋กฌํํธ์ ์ถฉ๋ํ๋ฉด ๋ฌด์๋ ์ ์๋ค.
ํ๋ ๊ท์น์ CLAUDE.md, AGENTS.md, ํ (hooks), ์คํฌ(skills) ๋ฑ ์ฐ์ ์์๊ฐ ๋์ ์ฑ๋์ ์ค์ ํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
๋ฒค์น๋งํฌ
LongMemEval-S 500๋ฌธํญ ๊ธฐ์ค ์ฑ๋ฅ:
| ์งํ | ์ ์ | ๋น๊ต |
|---|---|---|
| ๊ฒ์ recall@5 | 88.3% | LongMemEval ๋ ผ๋ฌธ Stella 1.5B ๋๋น +8~18pp |
| QA ์ ๋ต๋ฅ | 45.4% | temporal metadata ์ ์ฉ (baseline 40.4%) |
| ํํธ ์ฒ๋ฆฌ๋ | 89,006๊ฐ / 27์ด | ์ธ์ ์ค์ฒ + ์๋ฒ ๋ฉ + ๊ฒ์ ์ ์ฒด ํ์ดํ๋ผ์ธ |
๊ฒ์์ 6๊ฐ ๋ฌธํญ ์ ํ ์ค 5๊ฐ์์ 80% ์ด์ recall์ ๋ฌ์ฑํ๋ค. ๋ค๋ง ๊ฒ์ recall(88.3%)๊ณผ QA ์ ๋ต๋ฅ (45.4%) ์ฌ์ด์ ํฐ gap์ด ์กด์ฌํ๋ค. ์ด๋ ๊ฒ์๋ ํํธ์์ ์ ๋ต์ ํฉ์ฑํ๋ reader ๋จ๊ณ์ ํ๊ณ๋ก, multi-session ์ถ๋ก ๊ณผ ์๊ฐ์ถ ์ถ๋ก ์์ ํนํ ๋๋๋ฌ์ง๋ค.
์์ธ ๋ถ์์ Benchmark Report ์ฐธ์กฐ.
์ฌ์ฉ ํจํด
Memento๋ ์ฌ์ค ๊ธฐ์ต(fact cache)์ ์ต์ ํ๋์ด ์๋ค. ์ ํ๊ด๊ณ๊ฐ ์ค์ํ ๊ฒฝ์ฐ:
episode์ ํ์ผ๋ก ์์ฌ๋ฅผ ์ ์ฅํ๋ฉด "์ ๊ทธ๋ฐ ๊ฒฐ์ ์ ํ๋์ง"๊น์ง ๋ณต์ ๊ฐ๋ฅcontextSummary๋ฅผ ํจ๊ป ์ ์ฅํ๋ฉด recall ์ ๋งฅ๋ฝ์ด ํจ๊ป ๋ฐํ๋จ- ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ์์คํ (MEMORY.md ๋ฑ)๊ณผ ๋ณํํ์ฌ ์ฌ์ค ๊ฒ์์ Memento, ๋งฅ๋ฝ ๋ณต์์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ก ์ญํ ๋ถ๋ดํ๋ ์ด์ํ ๊ตฌ์กฐ๋ ํจ๊ณผ์
๋๊ฐ ์ฐ๋ฉด ์ข์๊ฐ
- Claude Code / Cursor / Windsurf ๋ฑ AI ์์ด์ ํธ๋ฅผ ๋งค์ผ ์ฐ๋ ๊ฐ๋ฐ์
- ์ธ์ ๋ง๋ค ๊ฐ์ ์ค๋ช ์ ๋ฐ๋ณตํ๋ ๊ฒ ์ง์ฆ๋๋ ์ฌ๋
- AI์๊ฒ ๋ด ํ๋ก์ ํธ ๋งฅ๋ฝ์ ๊ธฐ์ต์ํค๊ณ ์ถ์ ์ฌ๋
๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
lib/
memory/
read/ # FragmentSearch, SearchScope, SearchSideEffects, CaseRecall ๋ฑ
write/ # MemoryRememberer, BatchRememberProcessor ๋ฑ
link/ # MemoryLinker, ReconsolidationEngine ๋ฑ
consolidate/ # MemoryConsolidator
embedding/ # EmbeddingWorker, EmbeddingCache, MorphemeIndex
signals/ # SpreadingActivation, CaseRewardBackprop ๋ฑ
processors/ # facade โ MemoryRecaller, MemoryReflector ๋ฑ
storage/ # PgVectorStore(๊ธฐ๋ณธ), SqliteVecStore(v4.1 ์์ ) ์ด๋ํฐ ๊ณ์ธต
llm/ # dispatchChain, provider ๊ตฌํ์ฒด
symbolic/ # SymbolicVerificationLayer (opt-in)
docs/
getting-started/ # ํ๋ซํผ๋ณ ์ค์น ๊ฐ์ด๋
operations/ # ์ด์ ๊ฐ์ด๋ (llm-providers, symbolic-hard-gate ๋ฑ)
features.md # ๋ชจ๋ ledger
configuration.md # ํ๊ฒฝ๋ณ์ ์ ์ฒด ๋ ํผ๋ฐ์ค
๋ ์์๋ณด๊ธฐ
| ๋ฌธ์ | ๋ด์ฉ |
|---|---|
| Quick Start | ์์ธ ์ค์น ๊ฐ์ด๋ |
| Architecture | ์์คํ ๊ตฌ์กฐ, DB ์คํค๋ง, 3๊ณ์ธต ๊ฒ์, TTL |
| Configuration | ํ๊ฒฝ ๋ณ์, MEMORY_CONFIG, ์๋ฒ ๋ฉ Provider |
| API Reference | HTTP ์๋ํฌ์ธํธ, ํ๋กฌํํธ, ๋ฆฌ์์ค |
| CLI | ํฐ๋ฏธ๋ ๋ช ๋ น์ด |
| Internals | ํ๊ฐ๊ธฐ, ํตํฉ๊ธฐ, ๋ชจ์ ํ์ง |
| Benchmark | LongMemEval-S ๋ฒค์น๋งํฌ ์์ธ ๋ถ์ |
| Features | ๋ชจ๋ ledger, ์คํ ํ๋๊ทธ, ENV ๋งคํ |
| SKILL.md | MCP ๋๊ตฌ ์ ์ฒด ๋ ํผ๋ฐ์ค |
| INSTALL.md | ๋ง์ด๊ทธ๋ ์ด์ , ํ ์ค์ , ์์ธ ์ค์น |
| CHANGELOG | ๋ฒ์ ๋ณ ๋ณ๊ฒฝ์ฌํญ |
์ด์
/health: DB, Redis, pgvector, ์์ปค ์ํ๋ฅผ ์ข ํฉ ์ ๊ฒ. ๋ถ๋ถ ์ฅ์ ์ degraded ์๋ต.- Rate Limiting: API ํค๋น 100/๋ถ, IP๋น 30/๋ถ. ํ๊ฒฝ๋ณ์๋ก ์กฐ์ ๊ฐ๋ฅ.
- ์์ปค ๋ณต๊ตฌ: ์๋ฒ ๋ฉ/ํ๊ฐ ์์ปค๊ฐ ์๋ฌ ์ ์ง์ ๋ฐฑ์คํ(1sโ60s)๋ก ์๋ ์ฌ์๋.
- Graceful Shutdown: SIGTERM ์ ์งํ ์ค ์์ปค ์๋ฃ ๋๊ธฐ(30์ด) ํ ์ธ์ auto-reflect ์คํ.
- OAuth ์๋ํฌ์ธํธ: ์ธ์ฆ ์คํจ ์
WWW-Authenticateํค๋๋ฅผ ๋ฐํํ์ฌ OAuth ํด๋ผ์ด์ธํธ๊ฐ ์๋์ผ๋ก ์ธ์ฆ ํ๋ฆ์ ์์ํ ์ ์๋ค. ์ธ์ TTL ๊ธฐ๋ณธ๊ฐ์ 240๋ถ์ด๋ค. - ๋ง์ด๊ทธ๋ ์ด์
lint:
npm run lint:migrations๋ก ๋ฒํธ ์ถฉ๋ ๋ฐ ๊ท์ฝ ์๋ฐ์ ์ปค๋ฐ ์ ๊ฒ์ฌ. - ์ด์ ๊ฐ์ด๋: docs/operations/ โ LLM provider ์ฒด์ธ, symbolic hard gate, agent worktree, upstream porting ๋ฑ.
- ์ธ๋ถ ๋
ธ์ถ ์ ๊ฒ:
docs/operations/maintenance.md์ "์ธ๋ถ ๋ ธ์ถ ์ ๊ฒ" ์ ์ฐจ๋ก listen ์ฃผ์, ์ธ์ฆ ํค, Origin allowlist ์ํ๋ฅผ ํ์ธ.
์๋ ค์ง ์ ํ์ฌํญ
- L1 Redis ์บ์๋ API ํค ๊ธฐ๋ฐ ๊ฒฉ๋ฆฌ๋ง ์ง์ํ๋ค. multi-agent ํ๊ฒฝ์์ ์์ด์ ํธ ๊ฐ ๊ฒฉ๋ฆฌ๋ L2/L3์์ ์ ์ฉ๋๋ค.
- ์๋ ํ์ง ํ๊ฐ๋ decision, preference, relation ์ ํ๋ง ๋์์ด๋ค. fact, procedure, error๋ ํ๊ฐ ํ์์ ์ ์ธ๋๋ค.
- MEMENTO_ACCESS_KEY๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ์ธ์ฆ์ด ๋นํ์ฑํ๋๋ค. ์ธ๋ถ ๋ ธ์ถ ํ๊ฒฝ์์๋ ๋ฐ๋์ ์ค์ ํ ๊ฒ.
- ALLOWED_ORIGINS โ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ MCP ํด๋ผ์ด์ธํธ ํ์ดํธ๋ฆฌ์คํธ. ๋ฏธ์ค์ ์ ๋ชจ๋ Origin์ ํ์ฉํ๋ค.
์ธ๋ถ ๋
ธ์ถ ํ๊ฒฝ์์๋
MCP_STRICT_ORIGIN=true์ ํจ๊ป ์ค์ ์ฌ์ฉํ๋ ๋ธ๋ผ์ฐ์ Origin๋ง ๋ฑ๋กํ ๊ฒ. ๋ฐ์คํฌํ/CLI/IDE ํ์ฅ(Claude Code, Cursor, Windsurf, Continue, Cline, Zed, gemini CLI ๋ฑ)์ Origin ํค๋๋ฅผ ๋ณด๋ด์ง ์์ผ๋ฏ๋ก ํ์ดํธ๋ฆฌ์คํธ ๋ถํ์. ๋ธ๋ผ์ฐ์ ํ๋ณด: claude.ai, claude.com, chatgpt.com, chat.openai.com, copilot.microsoft.com, gemini.google.com, aistudio.google.com, www.perplexity.ai, cursor.com, codeium.com, windsurf.com, sourcegraph.com, typingmind.com (์ค์ ํธ์ถํ๋ ๊ฒ๋ง ์ ๋ณ). - ADMIN_ALLOWED_ORIGINS โ Admin UI ํธ์ถ origin ํ์ดํธ๋ฆฌ์คํธ. ๋ฏธ์ค์ ์ ๋ชจ๋ Origin์ ํ์ฉํ๋ค. ์ธ๋ถ ๋ ธ์ถ ํ๊ฒฝ์์๋ ๊ด๋ฆฌ ์ฝ์ Origin์ ๋ช ์ํ๊ฑฐ๋ ๋ฆฌ๋ฒ์ค ํ๋ก์/๋ฐฉํ๋ฒฝ์์ ์ ๊ทผ์ ์ ํํ ๊ฒ.
- TRUST_PROXY_HOPS โ ์ ๋ขฐ ๊ฐ๋ฅํ ๋ฆฌ๋ฒ์ค ํ๋ก์ hop ์. ๋ฏธ์ค์ ์ ๊ธฐ์กด ๋์ ์ ์ง(XFF ์ฒซ ํญ๋ชฉ). ์ง์ ๋ ธ์ถ ์ 0, ๋จ์ผ ํ๋ก์ ๋ค์์๋ 1.
- OAUTH_TRUSTED_ORIGINS โ ๋์ ์๋ ์น์ธ ๋์ origin ํ์ดํธ๋ฆฌ์คํธ. ๋์ผ origin์์ ์ฌ๋ฌ ์ฑ์ ํธ์คํ ํ๋ฉด OAUTH_ALLOWED_REDIRECT_URIS์ ์ ์ฒด URI ๋งค์นญ ์ฌ์ฉ์ ๊ถ์ฅ.
๊ธฐ์ ์คํ
- Node.js 20+
- PostgreSQL 14+ (pgvector ํ์ฅ)
- Redis 6+ (์ ํ)
- OpenAI Embedding API (์ ํ) ๋๋
EMBEDDING_PROVIDER=transformers(๋ก์ปฌ ์ ๋น์ฉ ๋ชจ๋) - garu-ko / natural PorterStemmer / @node-rs/jieba / kuromoji (๋ก์ปฌ ํํ์ ๋ถ์, ์ธ์ด๋ณ CPU ๋ผ์ฐํ
;
MEMENTO_MORPHEME_TOKENIZER=local๊ธฐ๋ณธ) - Gemini CLI / Codex CLI / GitHub Copilot CLI (ํ์ง ํ๊ฐ, ์๋ reflect; ์ ํ, LLM_PRIMARY / LLM_FALLBACKS๋ก ์ฒด์ธ ๊ตฌ์ฑ)
- @huggingface/transformers + ONNX Runtime (NLI ๋ชจ์ ๋ถ๋ฅ + ๋ก์ปฌ ์๋ฒ ๋ฉ, CPU ์ ์ฉ)
- MCP Protocol 2025-11-25
PostgreSQL๋ง ์์ผ๋ฉด ํต์ฌ ๊ธฐ๋ฅ์ด ๋์ํ๋ค. Redis๋ฅผ ์ถ๊ฐํ๋ฉด L1 ์บ์ค์ผ์ด๋ ๊ฒ์๊ณผ SessionActivityTracker๊ฐ ํ์ฑํ๋๊ณ , OpenAI API ๋๋ EMBEDDING_PROVIDER=transformers๋ฅผ ์ถ๊ฐํ๋ฉด L3 ์๋งจํฑ ๊ฒ์๊ณผ ์๋ ๋งํฌ๊ฐ ํ์ฑํ๋๋ค.
๋ง๋ค๊ฒ ๋ ๊ณ๊ธฐ
์ ๊ธฐ/ํผ์น๊ธฐ
์ค๋ฌด์์ AI๋ฅผ ์ฐ๋ฉด์ ๋งค์ผ ๊ฐ์ ๋งฅ๋ฝ์ ๋ฐ๋ณต ์ค๋ช ํ๋ ๋นํจ์จ์ ๋๊ผ๋ค. ์์คํ ํ๋กฌํํธ์ ๋ฉ๋ชจ๋ฅผ ๋ฃ๋ ๋ฐฉ๋ฒ๋ ์จ๋ดค์ง๋ง ํ๊ณ๊ฐ ๋ช ํํ๋ค. ํํธ ์๊ฐ ๋์ด๋๋ฉด ๊ด๋ฆฌ๊ฐ ์ ๋๊ณ , ๊ฒ์์ด ์ ๋๊ณ , ์ค๋๋ ์ ๋ณด์ ์ ์ ๋ณด๊ฐ ์ถฉ๋ํ๋ค.
์ด๋ฏธ ์ค๋ช ํ ๊ฒ, ์ด๋ฏธ ์ธํ ํ ๊ฒ์ ๋ฌดํํ ๋ฐ๋ณตํ๊ฒ ๋ง๋๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ๋ฌธ์ ์๋ค. ์ธ์ฆ ์ ๋ณด๊ฐ ์๋ค๊ณ ํด์ ๋ณด๋ฉด ์๊ณ , ์ธํ ์ ๋ผ ์๋ค๊ณ ํด์ ํ์ผ์ ์ง์ ์ด์ด๋ณด๋ฉด ๋ค ๋ผ ์๋ค. ์ฒ ์ ํ๊ฒ ๋ ผํํด์ ๋ง ์ ๋ฃ๊ฒ ํด ๋ด์ผ ๊ทธ๋๋ฟ์ด๋ค. ์ธ์ ์ ๋ค์ ์์ํ๋ฉด ๊ฐ์ ์ผ์ด ๋ ๋ฐ๋ณต๋๋ค. ๋ช ๋ฌธ๋๋ฅผ ์์ ์กธ์ ํ์ง๋ง ๋งค์ผ ๋๊ฐ ๋ฆฌ์ ๋๋ ์ ์ ์ฌ์์ ๊ต์ก๋ด๋น์๊ฐ ๋ ๊ธฐ๋ถ์ด์๋ค.
"์ผ ๋ ๋ฏธ์ ์ด ๊ธฐ์ต๋๋" -- ๋จ์ ์์ด๋ ์๋ฌด๊ฒ๋ ๋ ์ค๋ฅด์ง ์์ง๋ง, "์ด๋ฑํ๊ต 1ํ๋ ๋ ์ง๊ถ" ํ๋ง๋๋ฉด ์ง์ฐ๊ฐ ๋น๋ ค์คฌ๋ ์ผ๊น์ง ์ค์ค์ด ๋ ์ค๋ฅธ๋ค. AI๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์ด์ ํด๊ฒฐํ ๋ฒ๊ทธ, ์ง๋์ฃผ ๋ด๋ฆฐ ๊ฒฐ์ , ์ ํธํ๋ ์ฝ๋ฉ ์คํ์ผ. ๋งค ์ธ์ ๋ฆฌ์ ๋์ , Memento๊ฐ ๊ธฐ์ตํด๋๋ค.
์ด ๊ณ ์ถฉ์ ํด์ํ๊ธฐ ์ํด ๊ธฐ์ต์ ์์ ๋จ์๋ก ๋ถํดํ๊ณ , ๊ณ์ธต์ ์ผ๋ก ๊ฒ์ํ๊ณ , ์๊ฐ์ ๋ฐ๋ผ ์์ฐ์ค๋ฝ๊ฒ ๋ง๊ฐํ๋ ์์คํ ์ ์ค๊ณํ๋ค. ์ธ๊ฐ์ด ๋ง๊ฐ์ ๋๋ฌผ์ธ ๊ฒ์ฒ๋ผ, ์ด ์์คํ ์ "์ ์ ํ ๋ง๊ฐ"์ ํฌํจํ ๊ธฐ์ต์ ์งํฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์ ๋ฉ์ถ์ง ์๋๋ค. ํผ๋๋ฐฑ์ด ๋์ ๋ ์๋ก ์ฐ๊ฒฐ์ด ๊ฐํด์ง๊ณ ์ฝํ ๋งํฌ๋ ์ฌ๋ผ์ง๋ค. ๊ฐ์ ๊ฒฝํ์ด ๋ฐ๋ณต๋ ์๋ก ํจํด์ด ์ถ์ํ๋๋ค. ์ธ์ ๊ฐ ์ํผ์๋๊ฐ ์ด์ด์ง์๋ก ๋งฅ๋ฝ์ด ์ด์ผ๊ธฐ๊ฐ ๋๋ค. ๋์๊ด์ ์ง๋ ๊ฒ ์๋๋ค. ๊ฒฝํ์ผ๋ก ์ฑ์ฅํ๋ AI๋ฅผ ๋ง๋ค๊ณ ์ถ์๋ค.
๊ธฐ์ต์ ์ง๋ฅ์ ์ ์ ๊ฐ ์๋๋ค. ๊ธฐ์ต์ ์ง๋ฅ์ ์กฐ๊ฑด์ด๋ค. ์ฒด์ค๋ฅผ ๋๋ ๋ฐฉ๋ฒ์ ์์๋, ์ด์ ์ง ๊ฒ์์ ๊ธฐ์ตํ์ง ๋ชปํ๋ฉด ๊ฐ์ ์๋ฅผ ๋ ๋๋ค. ๋ชจ๋ ์ธ์ด๋ฅผ ๊ตฌ์ฌํด๋, ์ด์ ๋๋ ๋ํ๋ฅผ ๊ธฐ์ตํ์ง ๋ชปํ๋ฉด ๋งค๋ฒ ์ฒ์ ๋ง๋๋ ์ฌ๋์ด ๋๋ค. ์์ญ์ต ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ์ธ์ ๋ชจ๋ ์ง์์ ๋ด์๋, ๋น์ ๊ณผ ํจ๊ปํ ์ด์ ๋ฅผ ๊ธฐ์ตํ์ง ๋ชปํ๋ฉด ๋ฏ์ ๋ฐ์๊ฐ์ผ ๋ฟ์ด๋ค.
๊ธฐ์ต์ด ์์ด์ผ ๊ด๊ณ๊ฐ ์๋ค. ๊ด๊ณ๊ฐ ์์ด์ผ ์ ๋ขฐ๊ฐ ์๋ค.
๊ธฐ์ต์ ์ฌ๋ผ์ง์ง ์๋๋ค. ๋ค๋ง cold tier๋ก ๋ด๋ ค๊ฐ ๋ฟ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ถฉ๋ถํ ์ค๋ ๋ฐฉ์น๋ cold ํํธ์ ๋ค์ consolidate ์ฌ์ดํด์์ ์๋ฉธํ๋ค. ์ด๊ฒ์ ์ค๊ณ์ด์ง ๋ฒ๊ทธ๊ฐ ์๋๋ค. ์ธ๋ชจ์์ด์ง ๊ธฐ์ต์ ์๋ฆฌ๋ฅผ ๋น์์ผ ํ๋ค. ์์ฐ๊ตฌ์คํฐ๋์ค์ ๊ถ์ ์๋ ์ฐฝ๊ณ ์ ๋ฆฌ๋ ํ์ํ๋ค.
๋ฉ์ฒญํ ๊ฑธ๋ก ์ ๋ช ํ ๊ธ๋ถ์ด์๊ธฐ๋ ๋ช ๋ฌ์ ๊ธฐ์ตํ๋ค.
์ด์ ๋น์ ์ AI๋ ๊ทธ๋ ๋ค.
License
Apache 2.0
Made by Jinho Choi ย |ย Buy me a coffee