Goose: Go를 위한 데이터베이스 마이그레이션 도구
Takashi Yamamoto
Infrastructure Engineer · Leapcell

Key Takeaways
- Goose는 SQL 및 Go 기반 마이그레이션을 지원하여 데이터베이스 마이그레이션을 단순화합니다.
- 여러 데이터베이스를 지원하며 Go 바이너리에 마이그레이션을 포함할 수 있습니다.
up
,down
,status
및version
과 같은 필수 마이그레이션 명령을 제공합니다.
Goose는 증분 SQL 변경 또는 Go 함수를 생성하여 데이터베이스 스키마를 관리하는 데 도움이 되도록 설계된 데이터베이스 마이그레이션 도구입니다. 명령줄 인터페이스(CLI)와 라이브러리를 모두 제공하여 다양한 사용 사례에 다용도로 사용할 수 있습니다.
특징
-
다중 데이터베이스 지원: Goose는 Postgres, MySQL, SQLite, YDB, ClickHouse, MSSQL, Vertica 등 다양한 데이터베이스와 함께 작동합니다.
-
Go 마이그레이션: 일반 Go 함수로 작성된 마이그레이션을 지원하므로 SQL만으로는 표현할 수 없는 복잡한 마이그레이션이 가능합니다.
-
포함된 마이그레이션: Go 바이너리 내에 마이그레이션을 포함할 수 있어 배포 및 배포가 용이합니다.
-
순서가 잘못된 마이그레이션: 누락되었거나 순서가 잘못 적용된 마이그레이션 적용을 지원합니다.
-
데이터 시딩: 초기 또는 테스트 데이터를 데이터베이스에 시딩할 수 있습니다.
-
환경 변수 대체: 동적 구성을 위해 SQL 마이그레이션 내에서 환경 변수를 사용할 수 있습니다.
설치
Goose CLI를 설치하려면 다음을 실행합니다.
go install github.com/pressly/goose/v3/cmd/goose@latest
이 명령은 goose
바이너리를 $GOPATH/bin
디렉터리에 설치합니다.
macOS 사용자의 경우 Goose는 Homebrew 공식으로도 사용할 수 있습니다.
brew install goose
더 작은 바이너리가 필요한 경우 불필요한 드라이버를 제외하여 라이트 버전을 빌드할 수 있습니다.
go build -tags='no_postgres no_mysql no_sqlite3 no_ydb' -o goose ./cmd/goose
사용 가능한 빌드 태그에는 no_clickhouse
, no_libsql
, no_mssql
, no_mysql
, no_postgres
, no_sqlite3
, no_vertica
및 no_ydb
가 포함됩니다.
사용법
Goose는 데이터베이스 스키마를 관리하기 위한 여러 명령을 제공합니다.
-
새 마이그레이션 만들기:
새 SQL 마이그레이션을 만들려면:
goose create AddSomeColumns sql
이 명령은 타임스탬프 접두사가 있는 새 SQL 마이그레이션 파일을 생성합니다.
새 Go 마이그레이션을 만들려면:
goose create AddSomeColumns go
이 명령은 적절한 상용구 코드가 있는 새 Go 마이그레이션 파일을 생성합니다.
-
마이그레이션 적용:
데이터베이스를 사용 가능한 최신 버전으로 마이그레이션하려면:
goose up
이 명령은 사용 가능한 모든 마이그레이션을 적용합니다.
-
마이그레이션 롤백:
현재 버전에서 단일 마이그레이션을 롤백하려면:
goose down
이 명령은 가장 최근에 적용된 마이그레이션을 롤백합니다.
-
마이그레이션 상태:
모든 마이그레이션의 상태를 인쇄하려면:
goose status
이 명령은 적용된 마이그레이션과 보류 중인 마이그레이션을 표시합니다.
-
현재 버전:
데이터베이스의 현재 버전을 인쇄하려면:
goose version
이 명령은 데이터베이스의 현재 마이그레이션 버전을 출력합니다.
마이그레이션 작성
Goose는 SQL 또는 Go로 작성된 마이그레이션을 지원합니다.
-
SQL 마이그레이션:
샘플 SQL 마이그레이션은 다음과 같습니다.
-- +goose Up CREATE TABLE post ( id INT NOT NULL, title TEXT, body TEXT, PRIMARY KEY(id) ); -- +goose Down DROP TABLE post;
-- +goose Up
및-- +goose Down
주석은 각각 마이그레이션 업 및 다운에 대해 실행될 문을 나타냅니다. -
Go 마이그레이션:
샘플 Go 마이그레이션은 다음과 같습니다.
package main import ( "database/sql" "fmt" ) func Up_20130106222315(txn *sql.Tx) { fmt.Println("Hello from migration 20130106222315 Up!") } func Down_20130106222315(txn *sql.Tx) { fmt.Println("Hello from migration 20130106222315 Down!") }
Up_20130106222315
및Down_20130106222315
함수는 각각 적용 및 롤백에 대한 마이그레이션의 동작을 정의합니다.
결론
Goose는 Go 애플리케이션에서 데이터베이스 마이그레이션을 관리하기 위한 강력하고 유연한 도구입니다. 여러 데이터베이스, SQL 및 Go 마이그레이션 모두에 대한 지원, 포함된 마이그레이션 및 순서가 잘못된 마이그레이션과 같은 기능을 통해 데이터베이스 스키마를 효과적으로 유지하고 발전시키려는 개발자에게 유용한 자산입니다.
자세한 정보 및 고급 구성은 Goose GitHub 저장소와 공식 문서를 참조하십시오.
FAQs
Goose는 Postgres, MySQL, SQLite, MSSQL, ClickHouse, YDB 등을 지원합니다.
goose create <MigrationName> sql
명령을 사용하여 마이그레이션 파일을 생성합니다.
예, Goose는 복잡한 변경을 위해 Go 함수로 작성된 마이그레이션을 지원합니다.
Go 프로젝트 호스팅을 위한 최고의 선택 Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무제한 프로젝트를 무료로 배포
- 사용량에 대해서만 비용을 지불하십시오. 요청도 없고 요금도 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼 지불합니다.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 높은 동시성을 쉽게 처리할 수 있도록 자동 확장됩니다.
- 운영 오버헤드가 없어 구축에만 집중할 수 있습니다.
문서에서 자세히 알아보십시오!
X에서 저희를 팔로우하세요: @LeapcellHQ