7.4 KiB
7.4 KiB
📍 Cloudflare D1 로컬 데이터베이스 파일 위치
🗂️ 데이터베이스 파일 위치
Cloudflare Workers의 로컬 개발 환경(pnpm cf:dev)에서 사용하는 D1 데이터베이스는 다음 위치에 저장됩니다:
C:\giteat\dd\.wrangler\state\v3\d1\miniflare-D1DatabaseObject\
└── e833abeb83abd38e60de8166ab13bbd4d7a5636dc148a7fd8ec47b7678c87854.sqlite
전체 경로
프로젝트폴더\.wrangler\state\v3\d1\miniflare-D1DatabaseObject\[해시].sqlite
📊 현재 데이터베이스 정보
파일 크기
- 20,480 bytes (약 20 KB)
포함된 테이블
┌─────────────────┐
│ name │
├─────────────────┤
│ users │ ← 우리가 생성한 테이블
│ sqlite_sequence │ ← SQLite 내부 테이블 (AUTO_INCREMENT 관리)
│ _cf_METADATA │ ← Cloudflare 메타데이터
└─────────────────┘
🔍 왜 프로젝트 폴더에서 찾을 수 없나요?
1. 숨김 디렉토리
.wrangler 디렉토리는 앞에 점(.)이 있어서 기본적으로 숨겨진 폴더입니다.
2. Wrangler가 자동 관리
wrangler dev 실행 시 자동으로 생성되고 관리됩니다.
3. gitignore에 포함
일반적으로 .gitignore에 포함되어 Git에 커밋되지 않습니다.
📁 전체 .wrangler 구조
.wrangler/
├── state/
│ └── v3/
│ ├── d1/ # D1 데이터베이스
│ │ └── miniflare-D1DatabaseObject/
│ │ └── [해시].sqlite # ← 여기!
│ ├── do/ # Durable Objects
│ │ └── dd-CounterDurableObject/
│ │ ├── [해시].sqlite
│ │ ├── [해시].sqlite-shm
│ │ └── [해시].sqlite-wal
│ ├── cache/ # Cache API
│ │ └── miniflare-CacheObject/
│ │ └── [해시].sqlite
│ └── workflows/ # Workflows (비어있음)
└── tmp/ # 임시 파일
🛠️ 데이터베이스 파일 직접 접근
방법 1: Wrangler CLI 사용 (권장)
# 테이블 조회
pnpm wrangler d1 execute auth-db --local --command="SELECT * FROM users"
# 스키마 확인
pnpm wrangler d1 execute auth-db --local --command="PRAGMA table_info(users)"
# 모든 테이블 조회
pnpm wrangler d1 execute auth-db --local --command="SELECT name FROM sqlite_master WHERE type='table'"
방법 2: SQLite CLI 도구 사용
# SQLite CLI가 설치되어 있다면
sqlite3 .wrangler\state\v3\d1\miniflare-D1DatabaseObject\[해시].sqlite
# SQLite 프롬프트에서
sqlite> .tables
sqlite> SELECT * FROM users;
sqlite> .schema users
방법 3: DB Browser for SQLite (GUI)
- DB Browser for SQLite 다운로드
- 파일 열기:
.wrangler\state\v3\d1\miniflare-D1DatabaseObject\[해시].sqlite - GUI로 데이터 확인 및 편집
방법 4: Drizzle Studio (권장!)
pnpm db:studio
브라우저에서 자동으로 열리며 데이터베이스를 시각적으로 관리할 수 있습니다.
🔐 해시 파일명의 의미
파일명인 e833abeb83abd38e60de8166ab13bbd4d7a5636dc148a7fd8ec47b7678c87854.sqlite는:
- 데이터베이스 ID의 해시값
wrangler.jsonc의database_id: "local-db"를 기반으로 생성- 각 데이터베이스마다 고유한 해시를 가짐
📝 데이터베이스 파일 관리
데이터베이스 초기화 (리셋)
로컬 데이터베이스를 완전히 초기화하고 싶다면:
# 방법 1: .wrangler 폴더 삭제
rmdir /s /q .wrangler
# 방법 2: D1 폴더만 삭제
rmdir /s /q .wrangler\state\v3\d1
# 그 후 다시 마이그레이션 실행
pnpm db:push
데이터베이스 백업
# 백업 디렉토리 생성
mkdir backups
# 데이터베이스 파일 복사
copy .wrangler\state\v3\d1\miniflare-D1DatabaseObject\*.sqlite backups\local-db-backup.sqlite
# 또는 SQL 덤프로 백업
pnpm wrangler d1 export auth-db --local --output=backups\backup.sql
데이터베이스 복원
# SQL 파일로 복원
pnpm wrangler d1 execute auth-db --local --file=backups\backup.sql
🆚 로컬 vs 프로덕션 데이터베이스
로컬 개발 (--local)
위치: .wrangler\state\v3\d1\miniflare-D1DatabaseObject\[해시].sqlite
접근: pnpm wrangler d1 execute auth-db --local --command="..."
프로덕션 (--remote)
위치: Cloudflare 클라우드 (물리적 접근 불가)
접근: pnpm wrangler d1 execute auth-db --remote --command="..."
🎯 NPM 스크립트로 쉽게 접근
package.json에 이미 추가된 스크립트:
{
"scripts": {
"db:query": "wrangler d1 execute auth-db --local --command=\"SELECT * FROM users\"",
"db:query:remote": "wrangler d1 execute auth-db --remote --command=\"SELECT * FROM users\"",
"db:studio": "drizzle-kit studio"
}
}
사용법:
# 로컬 사용자 조회
pnpm db:query
# 프로덕션 사용자 조회
pnpm db:query:remote
# Drizzle Studio 실행
pnpm db:studio
🔍 현재 데이터 확인
로컬 데이터베이스의 현재 사용자를 확인하려면:
pnpm db:query
또는:
pnpm wrangler d1 execute auth-db --local --command="SELECT id, email, nickname, datetime(created_at, 'unixepoch') as created_at FROM users"
📊 데이터베이스 통계
# 사용자 수 확인
pnpm wrangler d1 execute auth-db --local --command="SELECT COUNT(*) as user_count FROM users"
# 데이터베이스 크기 확인
pnpm wrangler d1 execute auth-db --local --command="SELECT page_count * page_size as size FROM pragma_page_count(), pragma_page_size()"
# 마지막 생성된 사용자
pnpm wrangler d1 execute auth-db --local --command="SELECT * FROM users ORDER BY created_at DESC LIMIT 1"
🚨 주의사항
1. 직접 파일 수정 금지
SQLite 파일을 직접 편집하는 것은 권장하지 않습니다. 항상 Wrangler CLI나 Drizzle Studio를 사용하세요.
2. 개발 중 데이터 손실 주의
.wrangler 폴더는 개발용이므로 중요한 데이터를 저장하지 마세요. 프로덕션에는 --remote를 사용하세요.
3. Git에 커밋하지 않기
.gitignore에 .wrangler 포함 확인:
.wrangler/
4. 팀원과 DB 공유 불가
각 개발자는 자신의 로컬 DB를 가집니다. 스키마는 마이그레이션 파일(drizzle/)로 공유됩니다.
🎓 정리
질문: cf:dev에서 동작할 때 로컬 서버가 바라보고 있는 db 파일은 어디에 있나요?
답변:
C:\giteat\dd\.wrangler\state\v3\d1\miniflare-D1DatabaseObject\
└── e833abeb83abd38e60de8166ab13bbd4d7a5636dc148a7fd8ec47b7678c87854.sqlite
쉽게 접근하는 방법:
# Drizzle Studio (GUI)
pnpm db:studio
# CLI로 쿼리
pnpm db:query
# 직접 SQL 실행
pnpm wrangler d1 execute auth-db --local --command="SELECT * FROM users"
작동이 정상인 이유:
- Wrangler가 자동으로
.wrangler폴더에 SQLite 파일을 생성하고 관리 wrangler.jsonc의 D1 바인딩 설정에 따라 자동으로 연결- 마이그레이션 파일(
drizzle/)을 실행하여 테이블 생성 완료
즐거운 개발 되세요! 🚀