Skip to content

feat(db): PostgreSQL(Hyperdrive) 전환 — setup/seed 방언 지원 + CI 빌드 반영 - #70

Merged
mack-erel merged 4 commits into
mainfrom
test
Jul 2, 2026
Merged

feat(db): PostgreSQL(Hyperdrive) 전환 — setup/seed 방언 지원 + CI 빌드 반영#70
mack-erel merged 4 commits into
mainfrom
test

Conversation

@mack-erel

Copy link
Copy Markdown
Owner

요약

배포 DB를 D1에서 PostgreSQL(Hyperdrive) 로 전환하고, 그동안 D1 전용이던 setup/seed 파이프라인을 4방언(d1 / sqlite / postgres / mysql) 공용으로 재작성했습니다.

커밋 구성

커밋 내용
0bf6d08 fix(deploy) CI 빌드에 DB_DIALECT=postgres 지정 — 미지정 시 d1로 번들링되어 런타임에 postgres 드라이버가 없음
df16764 feat(scripts) scripts/lib/db.ts 신규(방언 인식 node용 DB 헬퍼), seed.ts를 D1 REST raw SQL → drizzle ORM 재작성(Date 객체로 방언별 timestamp 직렬화 위임), seed-migrate.ts 방언화, setup.ts--dialect/--database-url/--hyperdrive-id 직결 경로 추가, db:migrate:pg·db:seed:pg 등 npm 스크립트 추가
3dc033c docs README·seed/README·.env.example을 새 워크플로에 맞게 갱신
7831305 chore(db) .gitignore에서 drizzle/ 제외 해제 — 마이그레이션 SQL·journal을 git 추적으로 전환, 4방언 초기 마이그레이션 포함

검증

  • ✅ pg timestamptz + drizzle Date 왕복 — live DB에서 밀리초 일치 확인
  • ✅ seed 전체 흐름(reset→migrate→tenant/admin/credential/identity) + idempotency — sqlite E2E
  • ✅ setup 마법사 직결 경로 E2E (--dialect sqlite --yes)
  • live keystone DB에 실제 적용 완료: db:migrate:pg 28테이블 + db:seed:pg 관리자 시드 → 행 검증
  • DB_DIALECT=postgres 빌드: postgres-js 번들 포함·d1 드라이버 제거 확인
  • ✅ tsc(scripts)·eslint·prettier 통과

배포 참고

  • WRANGLER_JSONC 시크릿은 wrangler.prod.jsonc(HYPERDRIVE 바인딩 + DB_DIALECT=postgres) 내용으로 갱신됨 — 머지 시 main 푸시 배포가 postgres 구성으로 나감
  • Hyperdrive idp(2204a44a…)의 origin은 격리된 keystone@keystone (admin 계정 아님)

🤖 Generated with Claude Code

mack-erel and others added 4 commits July 2, 2026 11:01
vite/svelte config 가 빌드 시점에 스키마·드라이버를 선택하므로 빌드 env 로
지정하지 않으면 d1 로 번들링되어 런타임에 postgres 드라이버가 없다.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
- scripts/lib/db.ts 신규: 방언 인식 node 용 DB 헬퍼 (pg=postgres-js,
  mysql=mysql2, sqlite=libsql 직결, d1=sqlite-proxy 로 D1 REST 래핑)
- seed.ts: D1 REST raw SQL → drizzle ORM 재작성. Date 객체로 방언별
  timestamp 직렬화를 drizzle 에 위임. SEED_RESET/non-TTY 비대화 가드 추가
- seed-migrate.ts: seed/db/*.sql 적용을 방언별 execRaw 로 라우팅,
  _seed_migrations DDL 방언화
- setup.ts: --dialect/--database-url/--hyperdrive-id 추가. main 을
  d1 경로 / 직결(pg·mysql·sqlite) 경로로 분기, 직결 경로는 seed.ts 재사용
- package.json: db:migrate/seed/push/studio 에 :pg/:mysql/:sqlite 추가

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
- README: setup 마법사 방언 분기 흐름, db:migrate:pg/db:seed:pg 등
  새 스크립트 표, Hyperdrive 자동 설정·postgres 시드 예시
- IDP_BOOTSTRAP_ADMIN_* / SEED_RESET 수동·CI 시드 방법 반영
  (기존 "D1 전용, 미사용" 문구는 스크립트 재작성으로 낡음)
- seed/README: seed 마이그레이션 전 방언 적용 및 공통 SQL 문법 주의

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
.gitignore 에서 drizzle/ 제외를 해제해 마이그레이션 SQL·journal 을 커밋한다
(drizzle-kit migrate 가 CI/새 환경에서 동일 스키마를 적용할 수 있도록).
- drizzle/        : 기존 D1 마이그레이션 (0000~0017)
- drizzle/pg/     : PostgreSQL 초기 마이그레이션 (db:generate:pg)
- drizzle/mysql/  : MySQL 초기 마이그레이션 (db:generate:mysql)
- drizzle/sqlite/ : libSQL/SQLite 초기 마이그레이션 (db:generate:sqlite)

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
@mack-erel
mack-erel merged commit 107c891 into main Jul 2, 2026
6 checks passed
@mack-erel
mack-erel deleted the test branch July 2, 2026 02:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant