계정 백업 및 마이그레이션: 가져오기/내보내기, V1/DB 핫 마이그레이션
진정으로 "백업"하고 싶은 것은 할당량 숫자가 아니라 계정을 다시 로그인할 수 있게 하는 refresh_token입니다. 이 수업에서는 Antigravity Tools의 여러 마이그레이션 방법을 명확히 설명합니다: JSON 가져오기/내보내기, state.vscdb 가져오기, V1 데이터 디렉토리 가져오기, 자동 동기화 작동 방식.
학습 완료 후 가능한 작업
- 계정 풀을 JSON 파일로 내보내기 (email + refresh_token만 포함)
- 새 기기에서 이 JSON을 가져와서 계정 풀 빠르게 복구
- Antigravity/IDE의
state.vscdb에서 "현재 로그인 계정" 직접 가져오기 (기본 경로 및 사용자 정의 경로 지원) - V1 데이터 디렉토리에서 자동 스캔 및 구 계정 가져오기
- "현재 계정 자동 동기화"가 정확히 무엇을 하는지, 언제 건너뛰는지 이해
현재 겪고 있는 문제
- 시스템 재설치/컴퓨터 교체 후, 계정 풀을 다시 추가해야 하는 비용이 높음
- Antigravity/IDE에서 로그인 계정을 변경했지만, Manager의 "현재 계정"이 따라가지 않음
- 이전에 V1/스크립트 버전을 사용했는데, 구 데이터 파일만 가지고 있어서 직접 마이그레이션할 수 있는지 모름
이 기능을 언제 사용해야 할까
- 계정 풀을 다른 기기로 옮길 때 (데스크톱/서버/컨테이너)
- Antigravity를 "권위 있는 로그인 진입점"으로 사용하면서 Manager가 현재 계정을 자동 동기화하기를 원할 때
- 구 버전(V1 데이터 디렉토리)에서 계정을 가져올 때
🎒 시작 전 준비
- Antigravity Tools를 실행 가능한 상태이고 계정 풀에 최소 하나의 계정이 있음
- 계정 데이터는 민감한 정보(
refresh_token포함)라는 점을 인지
보안 경고: 백업 파일을 암호처럼 취급
내보내기한 JSON 파일은 refresh_token을 포함합니다. 이를 얻은 사람은 access token을 갱신하는 데 사용할 수 있습니다. 백업 파일을 클라우드 스토리지 공개 링크에 업로드하거나 그룹에 보내거나 Git에 제출하지 마세요.
핵심 개념
Antigravity Tools의 "마이그레이션"은 본질적으로 두 가지:
- 사용 가능한
refresh_token찾기 - 이를 사용하여 access token 교환, Google에서 실제 이메일 가져오기, 계정을 로컬 계정 풀에 작성
세 가지 진입점 제공:
- JSON 가져오기/내보내기: 명확하게 "제어 가능한 백업"을 하고 싶을 때 적합
- DB 가져오기: Antigravity/IDE의 로그인 상태를 권위 있는 원본으로 취급할 때 적합 (기본
state.vscdb찾기, 파일 수동 선택도 지원) - V1 가져오기: 구 데이터 디렉토리에서 자동 스캔 및 마이그레이션에 적합
또한 "자동 동기화"가 있음: 주기적으로 DB의 refresh_token을 읽고, Manager의 현재 계정과 다르면 자동으로 DB 가져오기 실행; 같으면 바로 건너뜀 (트래픽 절약).
함께 실습
1단계: 계정 풀 내보내기 (JSON 백업)
이유 가장 안정적이고 제어 가능한 마이그레이션 방식. 파일을 하나만 있으면 다른 기기에서 계정 풀 복구 가능.
작업: Accounts 페이지로 이동하여 내보내기 버튼 클릭.
- 설정에서
default_export_path를 구성한 경우, 내보내기가 해당 디렉토리에 직접 기록되고 파일명antigravity_accounts_YYYY-MM-DD.json사용. - 기본 디렉토리를 구성하지 않은 경우, 시스템 저장 대화상자가 표시되어 경로 선택.
내보내기 파일 내용은 대략 다음과 같음 (배열의 각 항목은 필수 필드만 보유):
[
{
"email": "alice@example.com",
"refresh_token": "1//xxxxxxxxxxxxxxxxxxxxxxxx"
},
{
"email": "bob@example.com",
"refresh_token": "1//yyyyyyyyyyyyyyyyyyyyyyyy"
}
]예상 화면: 페이지에서 내보내기 성공 메시지 표시 및 저장 경로 표시.
2단계: 새 기기에서 JSON 가져오기 (계정 풀 복구)
이유 가져오기는 순차적으로 "계정 추가" 로직을 호출하여 refresh_token으로 실제 이메일을 가져와서 계정 풀에 작성.
작업: 여전히 Accounts 페이지에서 "JSON 가져오기" 클릭, 방금 내보낸 파일 선택.
형식 요구사항 (최소 1개의 유효한 레코드 포함):
- JSON 배열이어야 함
refresh_token을 포함하고1//로 시작하는 항목만 시스템에서 가져옴
예상 화면: 가져오기 완료 후, 계정 목록에 가져온 계정 표시됨.
가져오기 시 Proxy 실행 중인 경우
每次 "계정 추가" 성공 후, 백엔드는 역방향 프록시 토큰 풀 리로드를 시도하여 새 계정이 즉시 적용되도록 함.
3단계: state.vscdb에서 "현재 로그인 계정" 가져오기
이유 때로는 백업 파일을 유지하고 싶지 않고, "Antigravity/IDE의 로그인 상태를 기준으로" 하고 싶음. DB 가져오기는 이 시나리오를 위해 제공됨.
작업: Accounts 페이지로 이동하여 Add Account 클릭, Import 탭으로 전환:
- "데이터베이스에서 가져오기" 클릭 (기본 DB 경로 사용)
- 또는 "Custom DB (state.vscdb)" 클릭하여
*.vscdb파일 수동 선택
기본 DB 경로는 플랫폼 간 (또한 --user-data-dir 또는 portable mode를 우선 인식):
~/Library/Application Support/Antigravity/User/globalStorage/state.vscdb%APPDATA%\Antigravity\User\globalStorage/state.vscdb~/.config/Antigravity/User/globalStorage/state.vscdb예상 화면:
- 가져오기 성공 후, 이 계정이 Manager의 "현재 계정"으로 자동 설정됨
- 시스템이 자동으로 할당량 갱신 트리거
4단계: V1 데이터 디렉토리 마이그레이션 (구 버전 가져오기)
이유 이전에 V1/스크립트 버전을 사용했던 경우, Manager는 구 데이터 디렉토리를 직접 스캔하여 가져오기 시도를 허용.
작업: Import 탭에서 "V1 가져오기" 클릭.
home 디렉토리에서 다음 경로(및 그 안의 인덱스 파일)를 찾음:
~/.antigravity-agent/
- antigravity_accounts.json
- accounts.json예상 화면: 가져오기 완료 후, 목록에 계정 표시됨; 인덱스 파일을 찾지 못하면 백엔드는 오류 V1 account data file not found 반환.
5단계(선택): "현재 계정 자동 동기화" 활성화
이유 Antigravity/IDE에서 로그인 계정을 전환할 때, Manager는 고정 간격으로 DB의 refresh_token 변화를 감지하고, 변화 시 자동으로 가져올 수 있음.
작업: Settings로 이동하여 auto_sync 활성화, sync_interval 설정 (단위: 초).
예상 화면: 활성화 후 즉시 동기화 한 번 실행; 이후 간격으로 주기적 실행. DB의 refresh_token이 현재 계정과 같으면 바로 건너뛰며, 중복 가져오지 않음.
체크포인트 ✅
Accounts목록에서 가져온 계정 확인 가능- "현재 계정"이 원하는 계정으로 전환되었는지 확인 가능 (DB 가져오기는 자동으로 현재로 설정)
- Proxy를 시작한 후, 새로 가져온 계정이 정상적으로 요청에 사용됨 (실제 호출 결과 기준)
흔한 오류
| 시나리오 | 잘못된 방법 (❌) | 권장 방법 (✓) |
|---|---|---|
| 백업 파일 보안 | 내보내기한 JSON을 일반 설정 파일로 여기저기 보냄 | JSON을 암호처럼 취급, 전파 범위 최소화, 공개 인터넷 노출 피함 |
| JSON 가져오기 실패 | JSON이 배열이 아니거나, refresh_token에 1// 접두사가 없음 | 이 프로젝트에서 내보내기한 JSON을 템플릿으로 사용, 필드명과 구조 일치 유지 |
| DB 가져오기에서 데이터를 찾지 못함 | Antigravity 로그인하지 않았거나, DB에 jetskiStateSync.agentManagerInitState 누락 | Antigravity/IDE 로그인 확인 후 다시 가져오기 시도; 필요 시 Custom DB로 올바른 파일 선택 |
| V1 가져오기 후 계정 사용 불가 | 구 refresh_token 무효화 | 해당 계정 삭제 후 OAuth/새 refresh_token으로 다시 추가 (오류 메시지 기준) |
| auto_sync가 너무 자주 | sync_interval을 매우 작게 설정하여 DB를 자주 스캔 | "상태 추적"으로 취급, 허용 가능한 빈도로 간격 설정 |
이 수업 요약
- JSON 내보내기/가져오기는 가장 제어 가능한 마이그레이션 방식: 백업 파일에
email + refresh_token만 보유 - DB 가져오기는 "Antigravity/IDE 현재 로그인 계정 기준"에 적합하며, 자동으로 Manager 현재 계정으로 설정
- V1 가져오기는
~/.antigravity-agent를 스캔하고 다양한 구 형식 호환 - auto_sync는 refresh_token 비교; 같으면 건너뛰고, 중복 가져오기 없음
다음 수업 예고
다음 수업에서는 "마이그레이션된 계정 풀"을 실제로 사용합니다: 로컬 역방향 프록시 시작 및 첫 번째 클라이언트 연결 (/healthz + SDK 설정).
배울 내용:
- Proxy 시작/중지 방법,
/healthz로 최소 검증- SDK/클라이언트에서 Base URL 설정 방법
부록: 소스 코드 참조
확장하여 소스 코드 위치 보기
업데이트 시간: 2026-01-23
| 기능 | 파일 경로 | 행 번호 |
|---|---|---|
Accounts 내보내기/가져오기 JSON (save_text_file / read_text_file) | src/pages/Accounts.tsx | 458-578 |
| Dashboard 계정 JSON 내보내기 | src/pages/Dashboard.tsx | 113-148 |
| Import 탭: DB 가져오기 / Custom DB / V1 가져오기 버튼 | src/components/accounts/AddAccountDialog.tsx | 491-539 |
| 계정 추가: 프론트엔드 email 무시, refresh_token으로 실제 이메일 가져오기, 자동 할당량 갱신, Proxy 핫 리로드 | src-tauri/src/commands/mod.rs | 19-60 |
| --- | --- | --- |
DB 가져오기: state.vscdb에서 refresh_token 추출 (ItemTable + base64 + protobuf) | src-tauri/src/modules/migration.rs | 192-267 |
| --- | --- | --- |
| DB 가져오기 후 자동으로 "현재 계정"으로 설정 및 할당량 갱신 | src-tauri/src/commands/mod.rs | 495-511 |
| auto_sync: refresh_token 비교, 같으면 바로 건너뜀; 변화 시 DB 가져오기 트리거 | src-tauri/src/commands/mod.rs | 532-564 |
프론트엔드 백그라운드 작업: sync_interval으로 주기적 syncAccountFromDb() 호출 | src/components/common/BackgroundTaskRunner.tsx | 43-72 |