drizzle-kit push는 SQL 파일 생성을 생략하고 스키마와 스키마 변경 사항을 직접 데이터베이스에 적용할 수 있게 해줍니다. 이 기능은 Drizzle 마이그레이션의 코드 우선(code first) 접근 방식을 지원하기 위해 설계되었습니다.
내부 동작 원리
Drizzle Kit push 커맨드를 실행하면 다음과 같은 과정이 진행됩니다:
Drizzle 스키마 파일을 읽고 스키마의 JSON 스냅샷을 생성합니다.
데이터베이스 스키마를 가져옵니다(introspect).
두 스키마 간의 차이를 기반으로 SQL 마이그레이션을 생성합니다.
SQL 마이그레이션을 데이터베이스에 적용합니다.
이 방법은 빠른 프로토타이핑에 가장 적합하며, 많은 팀과 개인 개발자들이 프로덕션 애플리케이션에서 주요 마이그레이션 흐름으로 사용하고 있습니다. 특히 Planetscale, Neon, Turso와 같은 서버리스 데이터베이스와 블루/그린 배포 전략과 잘 어울립니다.
drizzle-kit push를 사용하려면 dialect, schema 파일 경로, 그리고 데이터베이스 연결 url 또는 user:password@host:port/db 파라미터를 지정해야 합니다. 이 값들은 drizzle.config.ts 설정 파일을 통해 제공하거나 CLI 옵션으로 직접 전달할 수 있습니다.
설정 파일 사용
CLI 옵션 사용
스키마 파일 경로
여러분은 하나의 schema.ts 파일을 사용하거나, 프로젝트 전체에 걸쳐 원하는 만큼의 스키마 파일을 분산시켜 배치할 수 있습니다. Drizzle Kit은 이 파일들의 경로를 glob 형식으로 schema 설정 옵션에 지정하도록 요구합니다.
예제 1
예제 2
예제 3
예제 4
하나의 프로젝트에 여러 설정 파일 사용하기
하나의 프로젝트에서 여러 설정 파일을 사용할 수 있습니다. 이는 여러 데이터베이스 단계나 여러 데이터베이스, 또는 동일한 프로젝트 내에서 다른 데이터베이스를 사용할 때 매우 유용합니다.
위 예제에서 볼 수 있듯이, drizzle-dev.config.ts와 drizzle-prod.config.ts라는 두 개의 설정 파일을 사용하여 개발 환경과 프로덕션 환경을 구분할 수 있습니다. 이를 통해 각 환경에 맞는 설정을 쉽게 관리할 수 있습니다.
데이터베이스 드라이버 지정하기
IMPORTANT
Expo SQLite와 OP SQLite는 기기 내(사용자별) 데이터베이스로, 마이그레이션을 push할 수 없습니다.
임베디드 데이터베이스의 경우 Drizzle에서 임베디드 마이그레이션을 제공합니다. 시작하기 가이드를 참고하세요.
Drizzle Kit은 사전에 번들링된 데이터베이스 드라이버를 포함하지 않습니다.
현재 프로젝트에서 사용 가능한 데이터베이스 드라이버를 dialect에 따라 자동으로 선택합니다. 토론 참고
대부분 동일한 dialect를 사용하는 드라이버들은 동일한 연결 파라미터 집합을 공유합니다.
단, aws-data-api, pglight, d1-http와 같은 예외적인 경우에는 driver 파라미터를 명시적으로 지정해야 합니다.
AWS Data API
PGLite
Cloudflare D1 HTTP
테이블, 스키마, 확장 기능 포함하기
drizzle-kit push는 기본적으로 public 스키마의 모든 테이블을 관리합니다. tablesFilters, schemaFilter, extensionFilters 옵션을 통해 테이블 목록, 스키마, 확장 기능을 설정할 수 있습니다.
tablesFilter
glob 기반 테이블 이름 필터, 예: ["users", "user_info"] 또는 "user*". 기본값은 "*"
schemaFilter
스키마 이름 필터, 예: ["public", "drizzle"]. 기본값은 ["public"]
extensionsFilters
설치된 데이터베이스 확장 기능 목록, 예: ["postgis"]. 기본값은 []
public 스키마의 모든 테이블만 작업하고, drizzle-kit에게 postgis 확장 기능이 설치되어 있다는 것을 알려줍니다.
이 확장 기능은 public 스키마에 자체 테이블을 생성하므로, drizzle이 이를 무시할 수 있도록 설정합니다.
확장된 설정 목록
drizzle-kit push 명령어는 CLI 전용 옵션을 제공합니다.
verbose
실행 전 모든 SQL 문장을 출력
strict
SQL 문장 실행 전 항상 승인 요청
force
데이터 손실이 발생할 수 있는 모든 문장 자동 승인
npm
yarn
pnpm
bun
drizzle-kit 설정은 drizzle.config.ts 파일을 통해 구성하는 것을 권장합니다. 하지만 CI/CD 파이프라인 등에서 필요할 경우 CLI를 통해 모든 설정 옵션을 제공할 수도 있습니다.
dialect
required
데이터베이스 방언,
위 코드는 frontmatter.dialects 배열에 있는 각 데이터베이스 방언(dialect)을 순회하며 <code> 태그로 감싸고, 각 항목 뒤에 공백을 추가하는 코드입니다. 이렇게 하면 각 방언 이름이 코드 형식으로 표시되고, 항목 사이에 공백이 생깁니다.
중 하나
schema
required
타입스크립트 스키마 파일 경로 또는 여러 스키마 파일이 있는 폴더 경로
driver
드라이버 예외
위 코드는 drivers 배열에 있는 각 드라이버를 순회하며, 각 드라이버 이름을 <code> 태그로 감싸서 출력합니다.  는 공백 문자를 나타내며, 각 드라이버 이름 사이에 공백을 추가합니다.
tablesFilter
테이블 이름 필터
schemaFilter
스키마 이름 필터. 기본값: ["public"]
extensionsFilters
데이터베이스 확장 기능 내부 필터
url
데이터베이스 연결 문자열
user
데이터베이스 사용자
password
데이터베이스 비밀번호
host
호스트
port
포트
database
데이터베이스 이름
config
설정 파일 경로, 기본값=drizzle.config.ts
npm
yarn
pnpm
bun
확장 예제
프로젝트에 Drizzle 스키마를 선언하고 drizzle-kit push 커맨드를 통해 데이터베이스에 적용해 보겠습니다.