ainote를 동기화 백엔드로 쓰기
핵심 아이디어: 사용자가 ainote 키 하나만 있으면, 다른 앱이 그 키로 그 사용자의 데이터를 읽고 쓰며, ainote가 모든 클라이언트 간에 동기화합니다. 당신 앱은 동기화 엔진을 만들 필요가 없어요.
두 종류의 "동기화"
ainote에는 별개의 두 동기화가 있습니다. 목적에 맞는 걸 쓰세요.
1. 태스크/노트 DB 동기화 (구조화된 데이터)
할 일·노트를 ainote에 쓰면, 그 사용자의 ainote 앱 · Claude · CLI · 당신 앱 · 또 다른 앱 전부에서 같은 데이터가 보입니다. ainote가 공유 백엔드이기 때문이에요.
ts
// 당신 앱에서 쓰기
await ai.tasks.create({ content: '회의 준비', due_date: '2026-06-12' });
// → 사용자의 모든 ainote 표면에 즉시 나타남타입 있는 REST(ai.tasks / ai.papers / ai.categories)로 접근. 인증은 Bearer.
2. Vault 파일 동기화 (마크다운/텍스트)
CLAUDE.md·메모 파일 등 파일을 git-backed vault로 동기화. CAS·3-way merge·충돌 추적 포함. MCP 미러로 접근 — 응답은 사람이 읽는 text와 구조화 JSON resources 둘 다 옵니다.
ts
// push: 보호 경로는 CAS를 위해 base_sha 필요 (멀티디바이스 silent overwrite 방지).
// 권장 흐름: 먼저 sync_list/diff 로 remote sha 확인 → base_sha 와 함께 push.
await ai.sync.push({ path: 'notes/idea.md', content: '...', base_sha: '<remote sha>' });
const conflicts = await ai.sync.pendingConflicts();
console.log(conflicts.text); // "✅ no pending conflicts" (사람용)
const [data] = conflicts.resources; // { vault_id, count, conflicts: [...] } (기계용 JSON)
const merged = await ai.sync.diff({ path: 'notes/idea.md' });동기화 엔진을 직접 짠다면
.text(사람용)가 아니라.resources(구조화 JSON) 를 파싱하세요. 충돌 머지 사이클(sync_merge→base_sha로sync_push)과 보호 경로의 base_sha 규칙은 sync 레퍼런스를 참고하세요.
키 하나로 가능한가? — 네
MCP 키 하나가 그 사용자의 모든 MCP 도구(태스크·노트·vault·파일동기화)를 엽니다. 그래서 외부 앱이 키만 받으면 동기화를 바로 쓸 수 있습니다. 단:
- MCP 키는 계정 전체 접근(coarse). 서버에 보관하세요.
apiKey로 넘기면 SDK가 REST엔Bearer, MCP엔McpKey로 같은 키를 보냅니다.auth: { type: 'mcpKey' }로 고정하면 MCP 전용 — 그땐ai.mcp/ai.sync/ai.vault만. 확실한 REST 접근은 Bearer 토큰(ainote JWT) 권장.- 다중 사용자 서비스: 오늘은 사용자별 BYO 키(또는 onboarding 도구
signup_and_get_key)로 구현합니다. 스코프 있는 권한의 Sign in with logi는 🚧 계획됨 — 아직 미제공.
전형적 통합 흐름
- 사용자가 ainote 계정 + 키 확보 (Sign in with logi는 🚧 계획됨)
- 당신 앱(서버)이 키를 안전 보관
@ainote/sdk로 그 사용자의 데이터 read/write- ainote가 모든 디바이스·앱·에이전트 간 동기화 — 끝
자세한 메서드: @ainote/sdk 레퍼런스.