dd/LOCAL_DATABASE_LOCATION.md

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)

  1. DB Browser for SQLite 다운로드
  2. 파일 열기: .wrangler\state\v3\d1\miniflare-D1DatabaseObject\[해시].sqlite
  3. GUI로 데이터 확인 및 편집

방법 4: Drizzle Studio (권장!)

pnpm db:studio

브라우저에서 자동으로 열리며 데이터베이스를 시각적으로 관리할 수 있습니다.

🔐 해시 파일명의 의미

파일명인 e833abeb83abd38e60de8166ab13bbd4d7a5636dc148a7fd8ec47b7678c87854.sqlite는:

  • 데이터베이스 ID의 해시값
  • wrangler.jsoncdatabase_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/)을 실행하여 테이블 생성 완료

즐거운 개발 되세요! 🚀