Skip to content

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_mergebase_shasync_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🚧 계획됨 — 아직 미제공.

전형적 통합 흐름

  1. 사용자가 ainote 계정 + 키 확보 (Sign in with logi는 🚧 계획됨)
  2. 당신 앱(서버)이 키를 안전 보관
  3. @ainote/sdk로 그 사용자의 데이터 read/write
  4. ainote가 모든 디바이스·앱·에이전트 간 동기화 — 끝

자세한 메서드: @ainote/sdk 레퍼런스.