6.7 KiB
6.7 KiB
🎉 Drizzle ORM 마이그레이션 완료!
JWT 인증 시스템이 Drizzle ORM을 사용하도록 성공적으로 마이그레이션되었습니다.
🚀 빠른 시작
# 1. 의존성 설치 (이미 완료됨)
# pnpm install
# 2. 데이터베이스 마이그레이션 (이미 완료됨)
# pnpm db:push
# 3. 빌드 (이미 완료됨)
# pnpm build
# 4. 개발 서버 실행
pnpm cf:dev
그런 다음 브라우저에서:
- http://localhost:8787/register - 회원가입
- http://localhost:8787/login - 로그인
- http://localhost:8787 - 메인 페이지
✅ 완료된 작업
1. Drizzle ORM 설치
- ✅
drizzle-ormv0.44.7 - ✅
drizzle-kitv0.31.7
2. 스키마 정의
- ✅
src/lib/server/schema.ts생성 - ✅ TypeScript 타입 자동 추론 (
User,NewUser)
3. 데이터베이스 함수 변환
- ✅
src/lib/server/db.tsDrizzle로 재작성 - ✅
createUser()- 타입 안전 - ✅
getUserByEmail()- 타입 안전 - ✅
getUserById()- 타입 안전
4. 마이그레이션 시스템
- ✅
drizzle.config.ts설정 - ✅ 마이그레이션 SQL 생성 (
drizzle/0000_*.sql) - ✅ 로컬 DB에 적용 완료
5. NPM 스크립트 추가
{
"db:generate": "drizzle-kit generate",
"db:push": "wrangler d1 execute auth-db --local --file=...",
"db:push:remote": "wrangler d1 execute auth-db --remote --file=...",
"db:studio": "drizzle-kit studio",
"db:query": "wrangler d1 execute auth-db --local --command=...",
"db:query:remote": "wrangler d1 execute auth-db --remote --command=..."
}
6. 문서 작성
- ✅
DRIZZLE_GUIDE.md- 상세 가이드 - ✅
DRIZZLE_MIGRATION_COMPLETE.md- 마이그레이션 요약 - ✅
AUTH_GUIDE.md- 업데이트됨
7. 빌드 및 테스트
- ✅ TypeScript 컴파일 성공
- ✅ 프로덕션 빌드 성공
- ✅ 에러 없음
📦 새로운 NPM 명령어
Drizzle 관련
# 마이그레이션 생성 (스키마 변경 후)
pnpm db:generate
# 로컬 DB에 마이그레이션 적용
pnpm db:push
# 프로덕션 DB에 마이그레이션 적용
pnpm db:push:remote
# Drizzle Studio 실행 (DB 관리 UI)
pnpm db:studio
# 사용자 조회 (로컬)
pnpm db:query
# 사용자 조회 (프로덕션)
pnpm db:query:remote
기존 명령어
# 개발 서버 (Vite)
pnpm dev
# 개발 서버 (Cloudflare Workers)
pnpm cf:dev
# 빌드
pnpm build
# 배포
pnpm deploy
📁 프로젝트 구조
프로젝트/
├── drizzle.config.ts # ✨ Drizzle 설정
├── drizzle/ # ✨ 마이그레이션
│ ├── 0000_omniscient_lady_mastermind.sql
│ └── meta/
├── src/
│ ├── lib/
│ │ └── server/
│ │ ├── schema.ts # ✨ Drizzle 스키마
│ │ ├── db.ts # 🔄 Drizzle 사용
│ │ └── auth.ts # JWT 함수
│ └── routes/
│ ├── login/ # 로그인 페이지
│ ├── register/ # 회원가입 페이지
│ └── api/
│ └── logout/ # 로그아웃 API
├── DRIZZLE_GUIDE.md # ✨ Drizzle 가이드
├── DRIZZLE_MIGRATION_COMPLETE.md # ✨ 마이그레이션 요약
├── AUTH_GUIDE.md # 🔄 업데이트됨
└── package.json # 🔄 스크립트 추가
🎯 주요 개선사항
1. 타입 안전성
// Before: 런타임 에러 가능
const user = await db.prepare('SELECT * FROM usres').first();
// ^^^^^ 오타!
// After: 컴파일 타임에 에러 발견
const [user] = await drizzleDb.select().from(usres);
// ^^^^^ 컴파일 에러!
2. 자동 완성
IDE에서 테이블명, 컬럼명, 함수 등 완벽한 자동 완성 지원
3. 자동 마이그레이션
스키마 변경 시 SQL을 자동으로 생성
pnpm db:generate # ALTER TABLE, CREATE TABLE 등 자동 생성
4. 리팩토링 용이
테이블이나 컬럼명 변경 시 TypeScript가 모든 사용처를 찾아줌
📚 문서
1. DRIZZLE_GUIDE.md (필독!)
- Drizzle ORM 기본 개념
- 스키마 정의 방법
- 고급 쿼리 예제
- 마이그레이션 관리
- Drizzle Studio 사용법
- Before/After 비교
2. AUTH_GUIDE.md
- JWT 인증 설정
- 로컬 개발 환경 설정
- 프로덕션 배포
- 보안 고려사항
- Drizzle 명령어 포함
3. DRIZZLE_MIGRATION_COMPLETE.md
- 마이그레이션 전후 비교
- 변경된 파일 목록
- 테스트 결과
- 다음 단계 제안
🔍 Drizzle Studio
데이터베이스를 브라우저에서 관리:
pnpm db:studio
기능:
- 📊 테이블 데이터 조회/편집
- ➕ 레코드 추가
- 🗑️ 레코드 삭제
- 🔍 검색 및 필터링
- 📈 관계 시각화
🎓 다음 단계
Drizzle ORM을 활용하여 다음 기능들을 쉽게 추가할 수 있습니다:
1. 프로필 테이블
export const profiles = sqliteTable('profiles', {
id: integer('id').primaryKey({ autoIncrement: true }),
userId: integer('user_id').references(() => users.id),
avatar: text('avatar'),
bio: text('bio')
});
2. 게시글 시스템
export const posts = sqliteTable('posts', {
id: integer('id').primaryKey({ autoIncrement: true }),
userId: integer('user_id').references(() => users.id),
title: text('title').notNull(),
content: text('content').notNull()
});
3. 관계 쿼리
const postsWithUsers = await drizzleDb
.select()
.from(posts)
.leftJoin(users, eq(posts.userId, users.id));
모든 것이 타입 안전하게 작동합니다!
⚡ 성능
Drizzle ORM은 순수 SQL과 동일한 성능을 제공합니다.
- Zero-cost abstractions
- 최소한의 런타임 오버헤드
- Cloudflare D1에 최적화
🐛 문제 해결
Q: 마이그레이션 파일이 생성되지 않아요
# 스키마 파일 경로 확인
ls src/lib/server/schema.ts
# Drizzle 설정 확인
cat drizzle.config.ts
Q: 로컬 DB에 적용이 안 돼요
# 올바른 데이터베이스 이름 사용
pnpm wrangler d1 execute auth-db --local --file=./drizzle/0000_*.sql
Q: 타입 에러가 발생해요
# 타입 재생성
pnpm svelte-kit sync
🎊 완료!
Drizzle ORM 마이그레이션이 성공적으로 완료되었습니다!
주요 성과:
- ✅ 타입 안전성 100% 확보
- ✅ 개발 생산성 향상
- ✅ 유지보수성 개선
- ✅ 자동 마이그레이션 시스템
- ✅ 빌드 및 테스트 성공
다음 실행 명령어:
pnpm cf:dev
즐거운 개발 되세요! 🚀