스키마 관리란 무엇입니까?
왜 중요한가요?
스키마 관리 방식의 유형
명령형
CREATE TABLE, ALTER TABLE, DROP COLUMN과 같은 명시적인 DDL 문을 파일에 작성합니다. 그러면 도구가 파일을 순서대로 실행하고 어떤 파일이 적용되었는지 추적합니다. 이 범주에서는 실행할 SQL을 정확히 직접 지정합니다.
예시: Golang Migrate, Goose, Flyway.
선언형
도구 선택 시 고려할 사항
팀에서 이미 사용 중인 도구는 무엇입니까?
원하는 프로세스는 무엇입니까?
- Goose 또는 Golang Migrate처럼 “SQL을 작성하고 CI에서 실행하면 끝”인 단순한 워크플로
- Bytebase 또는 Liquibase처럼 관리형 승인 워크플로, 감사 추적, RBAC
- Atlas처럼 스키마를 선언적으로 정의하고 도구가 차이를 판단하도록 하는 방식
권장 도구
Atlas
- 유형: 선언형
- Language: Go, 단일 바이너리로 배포
- License and availability: Open Core; Atlas CLI에는 Apache 2.0 커뮤니티 에디션이 있지만 ClickHouse 지원은 Pro 플랜 또는 평가판에서만 제공됩니다
- 클러스터 지원: 예
Golang Migrate
schema_migrations 테이블에서 상태를 추적합니다.
ClickHouse에 잘 맞는 이유: 간단하고 유연합니다. 실행하려는 ClickHouse DDL을 원하는 그대로 작성할 수 있습니다. 런타임 의존성이 없는 단일 Go 바이너리이므로 CI/CD 파이프라인이나 Docker 컨테이너에 쉽게 통합할 수 있습니다.
주의할 점: 마이그레이션 파일에 여러 SQL 문이 들어 있는데 그중 하나가 중간에 실패하면, 데이터베이스가 일부만 적용된 상태로 남아 수동 조치가 필요할 수 있습니다. 파일당 SQL 문 1개만 두는 원칙을 따르면 이를 충분히 관리할 수 있습니다.
가장 적합한 경우: ClickHouse 인스턴스에서 정확히 어떤 SQL이 실행되는지 완전히 제어하면서도 단순한 방식을 원하는 팀에 적합합니다.
- 유형: 명령형
- 언어: Go
- 라이선스: 오픈 소스, MIT
- 클러스터 지원: 예
Goose
- 유형: 명령형
- Language: Go, 단일 바이너리로 배포
- License: 오픈 소스, MIT
- 클러스터 지원: 없음