환경변수 / .env 동기화
여러 프로젝트의 .env 파일을 ainote + macOS Keychain 으로 안전 동기화.
설계
.env 파일
├─ 실제 값 → macOS Keychain (service: dev-env/{project})
│ └─ iCloud Keychain 으로 맥미니 ↔ 맥북 자동 sync
└─ 키 목록 → ainote ({project}-env-ref.md)
└─ 키 이름 + 타입(secret/config) + Keychain 서비스명왜 분리:
- 값은 Keychain (OS 레벨 암호화 + iCloud 동기화)
- 참조만 ainote (어떤 키 있는지 파악, 새 기기 셋업 가이드)
스크립트 사용
~/scripts/ainote-env-sync.sh (이미 셋업됨, 미설치라면 GitHub repo).
Push: .env → Keychain + ainote
bash
ainote-env-sync.sh push tennis-bracket스크립트 동작:
~/tennis_bracket/.env읽음- 각 KEY=VALUE 를 Keychain 에 저장 (service:
dev-env/tennis-bracket, account: KEY) - 키 목록 (이름만) 을 ainote 에
tennis-bracket-env-ref.md로 저장
Pull: Keychain → .env (새 기기)
bash
ainote-env-sync.sh pull tennis-bracket스크립트 동작:
- ainote 에서
tennis-bracket-env-ref.md받음 → 키 목록 파싱 - 각 키를 Keychain 에서 read (iCloud Keychain 으로 이미 sync 됨)
~/tennis_bracket/.env생성
일괄
bash
ainote-env-sync.sh push-all # 등록된 모든 프로젝트
ainote-env-sync.sh pull-all
ainote-env-sync.sh list # 등록된 프로젝트 목록등록된 프로젝트 (예)
bash
ainote-env-sync.sh listtennis-bracket 12 keys Last sync: 2026-05-07
launchcrew 18 keys Last sync: 2026-05-06
keeps 8 keys Last sync: 2026-05-05
triphelper 15 keys
realpick 9 keys
talkk 14 keys
ax-admin 22 keys
ainote-app 11 keysainote 에 저장되는 형식
{project}-env-ref.md:
markdown
---
name: tennis-bracket-env-ref
type: reference
ainote_sync: env-refs/tennis-bracket-env-ref.md
---
# tennis-bracket .env Reference
| Key | Type | Keychain Service |
|-----|------|------------------|
| RAILS_ENV | config | (env) |
| DATABASE_URL | secret | dev-env/tennis-bracket |
| TOSS_CLIENT_KEY | secret | dev-env/tennis-bracket |
| TOSS_SECRET_KEY | secret | dev-env/tennis-bracket |
| FIREBASE_PROJECT_ID | config | (env) |
| ... |값은 ainote 에 안 저장됨. 이름만.
비밀 누출 방지
- ❌
.env자체를 ainote 에 push 금지 (값 노출) - ❌ git 에
.env커밋 금지 (.gitignore에.env*추가) - ✅
.env.example만 git 에 커밋 (값 placeholder) - ✅ 정기적으로 키 회전 (분기마다)
새 기기 셋업 (5분)
bash
# 1. ainote-env-sync.sh 받기
curl -O https://raw.githubusercontent.com/seunghan91/ainote-tools/main/ainote-env-sync.sh
chmod +x ainote-env-sync.sh
# 2. ainote 환경변수
export AINOTE_API_KEY="..."
# 3. iCloud Keychain 켜져 있는지 확인 (시스템 설정 → Apple ID)
# 4. 일괄 pull
./ainote-env-sync.sh pull-all→ 모든 프로젝트의 .env 가 자기 자리에 복원.