drizzle-kit pull 명령어를 사용하면 기존 데이터베이스 스키마를 가져와서(introspect) schema.ts 파일로 Drizzle 스키마를 생성할 수 있습니다. 이 기능은 Drizzle 마이그레이션의 데이터베이스 우선 접근 방식을 지원하기 위해 설계되었습니다.
내부 동작 원리
Drizzle Kit의 pull 명령어를 실행하면 다음과 같은 과정이 진행됩니다:
기존 데이터베이스에서 스키마(DDL)를 가져옵니다.
schema.ts 파일을 생성하고 out 폴더에 저장합니다.
이 기능은 TypeScript 프로젝트 외부에서 데이터베이스 스키마를 관리하거나, 다른 사람이 관리하는 데이터베이스를 사용할 때 유용합니다.
drizzle-kit pull을 사용하려면 dialect와 데이터베이스 연결 url 또는 user:password@host:port/db 파라미터를 지정해야 합니다. 이 값들은 drizzle.config.ts 설정 파일을 통해 제공하거나 CLI 옵션으로 직접 전달할 수 있습니다.
설정 파일 사용
CLI 옵션 사용
하나의 프로젝트에 여러 설정 파일 사용하기
하나의 프로젝트에서 여러 설정 파일을 사용할 수 있습니다. 이는 여러 데이터베이스 단계나 여러 데이터베이스, 또는 동일한 프로젝트 내에서 다른 데이터베이스를 사용할 때 매우 유용합니다.
위 예제에서 볼 수 있듯이, drizzle-dev.config.ts와 drizzle-prod.config.ts라는 두 개의 설정 파일을 사용하여 개발 환경과 프로덕션 환경을 구분할 수 있습니다. 이렇게 하면 각 환경에 맞는 설정을 쉽게 관리할 수 있습니다.
데이터베이스 드라이버 지정하기
IMPORTANT
Expo SQLite와 OP SQLite는 기기 내(사용자별) 데이터베이스입니다. 이곳에서 데이터베이스 스키마를 pull할 수 있는 방법은 없습니다.
임베디드 데이터베이스의 경우 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 설정은 drizzle.config.ts 파일을 통해 구성하는 것을 권장합니다. 하지만 CI/CD 파이프라인 등에서 필요할 경우, 모든 설정 옵션을 커맨드라인을 통해 제공할 수도 있습니다.
dialect
필수
데이터베이스 방언,
위 코드는 frontmatter.dialects 배열에 있는 각 데이터베이스 방언(dialect)을 순회하며 <code> 태그로 감싸고, 각 항목 뒤에 공백을 추가하는 코드입니다. 이렇게 하면 각 방언 이름이 코드 형식으로 표시되고, 항목 사이에 공백이 생깁니다.
중 하나
driver
드라이버 예외
위 코드는 drivers 배열에 있는 각 드라이버를 순회하며, 각 드라이버 이름을 <code> 태그로 감싸서 출력합니다.  는 공백 문자를 나타내며, 각 드라이버 이름 사이에 공백을 추가합니다.