코드 수명 주기 관리

이 문서에서는 Dataform에서 코드 수명 주기를 관리하고 개발, 스테이징, 프로덕션 환경을 만들고 각 환경의 컴파일 및 실행 설정을 구성하는 방법을 설명합니다.

데이터 정제를 유지하고 개발 프로세스를 최적화하는 표준화된 Dataform SQL 워크플로의 수명 주기를 만들려면 다음과 같이 하는 것이 좋습니다.

  • 개발 중에 만든 테이블을 최종 사용자가 사용할 수 있는 테이블에서 격리하기 위해 실행 환경을 만듭니다.

  • 프로덕션 환경과 스테이징 환경(선택적)에서 워크플로를 실행하도록 출시 및 워크플로 구성을 구성합니다.

이 문서에서는 작업공간 컴파일 재정의를 사용하여 개발 테이블을 격리하고, 스테이징 및 프로덕션 환경 출시 구성워크플로 구성을 구성하는 솔루션을 설명합니다.

이러한 솔루션을 사용하면 단일 Dataform 저장소 및 Google Cloud 프로젝트 내에 실행 환경을 만들 수 있습니다. 코드 수명 주기의 단계(예: 개발, 스테이징, 프로덕션)에 해당하는 각 프로젝트를 Dataform 저장소의 여러 사본을 서로 다른 Google Cloud 프로젝트에 보관하도록 선택할 수 있습니다. 이 방식을 사용하면 코드 수명 주기의 각 단계에서 ID 및 액세스 관리 권한을 맞춤설정할 수 있습니다.

격리된 실행 환경을 위한 권장사항

개발 SQL 워크플로 실행 중에 생성된 테이블을 BigQuery의 프로덕션 테이블에서 분리하는 것이 좋습니다. 이를 통해 최종 사용자가 프로덕션 테이블로 이동할 수 있으며, 최종 사용자가 실수로 잘못된 데이터에 액세스할 위험을 방지할 수 있습니다.

다음과 같은 방법으로 격리된 실행 환경을 만들 수 있습니다.

스키마별로 개발 및 프로덕션 테이블 분할
소규모 팀에 권장됩니다. Dataform은 BigQuery의 다른 스키마에 개발 및 프로덕션 테이블을 만듭니다. Dataform은 개발 중에 생성되었음을 나타내는 같은 접미사가 있는 스키마의 모든 개발 테이블을 실행합니다. 개발자는 서로의 개발 테이블을 덮어쓸 수 있습니다.
스키마 및 Google Cloud 프로젝트 테이블별로 개발 및 프로덕션 분할
중간 규모의 팀에 권장됩니다. Dataform은 BigQuery의 다른 스키마와 프로젝트에 개발 및 프로덕션 테이블을 만듭니다. Dataform은 모든 개발 테이블을 전용 개발 Google Cloud 프로젝트에 게시했습니다. 각 Dataform 개발자는 개발 테이블에 대한 고유한 스키마가 있습니다. 이 솔루션은 개발자가 실수로 서로의 개발 테이블을 덮어쓸 위험을 제거합니다. 이 방식의 단점은 개발 테이블 및 스키마를 삭제하고 각 환경에서 모든 테이블을 다시 만들려면 더 많은 시간이 걸릴 수 있다는 점입니다.
Google Cloud 프로젝트별로 개발, 스테이징, 프로덕션 테이블 분할
스테이징 환경이 필요한 대규모 팀에 권장됩니다. Dataform은 BigQuery의 전용 Google Cloud 프로젝트에서 각 환경의 테이블을 실행합니다. 이 솔루션을 사용하면 코드 수명 주기를 가장 효과적으로 제어할 수 있습니다.

모든 솔루션에는 단일 서드 파티 원격 저장소에 연결된 단일 Dataform 저장소가 필요합니다.

모든 솔루션에서 개발자는 Dataform 작업공간 내의 개발 테이블의 실행을 수동으로 트리거합니다. Dataform은 출시 구성에서 프로덕션 및 스테이징 테이블을 자동으로 컴파일하고 워크플로 구성에 설정된 빈도에 따라 테이블을 실행합니다.

스키마별로 개발 및 프로덕션 분할

이 솔루션은 Dataform이 SQL 워크플로를 실행하는 두 가지 실행 환경(개발과 프로덕션)을 만듭니다. 개발 및 프로덕션 테이블을 스키마별로 분할하려면, 워크플로 설정, 작업공간 컴파일 재정의, 출시 구성을 구성해야 합니다. 프로덕션 실행을 예약하려면 워크플로 구성을 만들어야 합니다.

Dataform은 개발 중에 생성되었음을 나타내는 동일한 서픽스가 있는 스키마에서 모든 개발 테이블을 실행합니다. 서픽스가 없는 스키마에서는 Dataform이 모든 프로덕션 테이블을 실행합니다.

다음 표에서는 하나의 개발 스키마를 사용하여 스키마별로 개발 및 프로덕션 테이블을 분할하는 구성을 보여줍니다.

설정 개발 프로덕션
Google Cloud 프로젝트 enterprise-analytics enterprise-analytics
Git 브랜치 작업공간 이름 main
작업공간 컴파일 재정의 스키마 서픽스: dev -
출시 구성 - production
워크플로 구성 - production

이 솔루션에서는 개발 및 프로덕션 테이블이 단일 Google Cloud 프로젝트에 저장됩니다.

개발자는 Dataform 작업공간에서 실행을 수동으로 트리거합니다. 수동으로 트리거된 모든 실행에서 Dataform은 개발 중에 생성되었음을 나타내는 동일한 서픽스가 있는 스키마로 테이블을 실행합니다. 개발자는 서로의 테이블을 덮어쓸 수 있다는 점을 알고 있어야 합니다.

Dataform에서 개발자는 변경사항을 커밋하고 원격 저장소의 커스텀 브랜치에 푸시합니다. 그런 후 서드 파티 Git 호스팅 플랫폼에서 pull 요청을 제출합니다. pull 요청을 승인하면 원격 저장소의 main 브랜치에 변경사항이 병합됩니다.

Dataform은 production 출시 구성 설정에 따라 원격 저장소의 main 브랜치에서 프로덕션 테이블을 컴파일 결과로 자동으로 컴파일합니다.

Dataform은 production 워크플로 구성에 설정된 일정에 따라 production 컴파일 결과를 자동으로 실행합니다.

이 솔루션을 구현하려면 다음 Dataform 설정을 구성합니다.

워크플로 설정

Dataform Core 버전에 따라 워크플로 설정은 workflow_settings.yaml 또는 dataform.json에 저장됩니다. 자세한 내용은 Dataform 워크플로 설정 구성을 참조하세요.

workflow_settings.yaml에서 다음 설정을 구성합니다.

defaultProject: enterprise-analytics
defaultDataset: analytics

dataform.json에서 다음 설정을 구성합니다.

{
defaultSchema: "analytics",
defaultDatabase: "enterprise-analytics"
}

작업공간 재정의

스키마 서픽스: "dev"

출시 구성

Git commitish: "main"

production 컴파일 결과 실행을 예약하려면 워크플로 구성을 만듭니다.

샘플 개발 프로세스

이 예시에서 개발자 사샤와 카이는 동일한 Dataform 저장소에서 작업합니다. Dataform 저장소는 원격 서드 파티 Git 저장소에 연결됩니다.

sashakai라는 원격 저장소의 커스텀 브랜치에 변경사항을 커밋하고 푸시합니다.

다음 표에서는 Sasha, Kai, 프로덕션 환경에 적용되는 환경 설정을 보여줍니다.

설정 Sasha 카이 프로덕션
Google Cloud 프로젝트 enterprise-analytics enterprise-analytics enterprise-analytics
Git 브랜치 sasha kai main
스키마 analytics_dev analytics_dev analytics

사샤는 다음 프로세스에 따라 새 테이블을 만들고 프로덕션에 배포합니다.

  1. Dataform 작업공간에서 사샤는 user_stats.sqlx 테이블을 만듭니다.
  2. 작업공간에서 사샤는 수동으로 테이블 실행을 트리거합니다.
  3. Dataform은 BigQuery에서 enterprise-analytics Google Cloud 프로젝트의 analytics_dev 스키마에서 enterprise-analytics.analytics_dev.user_stats 테이블을 만듭니다.
  4. 작업공간에서 사샤는 변경사항을 커밋하고 원격 Git 저장소의 sasha 브랜치에 푸시합니다.
  5. 원격 저장소에서 사샤는 pull 요청을 제출합니다.
  6. 원격 저장소에서 카이는 pull 요청을 검토 및 승인하여 변경사항을 main 브랜치에 병합합니다.
  7. Dataform은 지정된 빈도로 production 출시 버전의 컴파일 결과를 자동으로 업데이트합니다. 다음 번 production 컴파일 결과 업데이트 시 Dataform은 enterprise-analytics.analytics.user_stats 테이블을 컴파일 결과에 추가합니다.
  8. 워크플로 구성의 예약 실행 중에 Dataform은 BigQuery에서 enterprise-analytics Google Cloud 프로젝트의 analytics 스키마에서 enterprise-analytics.analytics.user_stats 테이블을 실행합니다.
  9. user_stats.sqlx 테이블은 BigQuery의 enterprise-analytics Google Cloud 프로젝트에 있는 analytics 스키마의 최종 사용자에게 제공됩니다.

스키마 및 프로젝트별로 개발 및 프로덕션 분할

이 솔루션은 개발과 프로덕션이라는 두 가지 실행 환경을 만듭니다. 개발 및 프로덕션 테이블을 스키마 및 Google Cloud 프로젝트별로 분할하려면, 워크플로 설정, 작업공간 컴파일 재정의, 출시 구성을 구성해야 합니다. 프로덕션 실행을 예약하려면 워크플로 구성을 만들어야 합니다.

이 솔루션에서 Dataform은 전용 개발 Google Cloud 프로젝트, 각 작업공간에 대해 스키마 서픽스가 다른 스키마에서 개발을 실행합니다.

Dataform은 스키마 서픽스 없이 전용 프로덕션 Google Cloud 프로젝트의 BigQuery에서 모든 프로덕션 테이블을 실행합니다.

다음 표에서는 Dataform 작업공간당 하나의 개발 스키마를 사용하여 스키마 및 Google Cloud 프로젝트를 기준으로 개발 테이블과 프로덕션 테이블을 분할하는 구성을 보여줍니다.

설정 개발 프로덕션
Google Cloud 프로젝트 enterprise-dev enterprise-prod
Git 브랜치 작업공간 이름 main
작업공간 컴파일 재정의 스키마 서픽스: ${workspaceName} -
출시 구성 - production
워크플로 구성 - production

이 솔루션에서 Dataform은 BigQuery의 다른 스키마와 Google Cloud 프로젝트에 개발 및 프로덕션 테이블을 실행합니다.

개발자는 Dataform 작업공간에서 실행을 수동으로 트리거합니다. 각 개발자는 각자의 이름이 지정된 전용 작업공간에서 작업을 수행합니다(예: sasha).

개발자가 작업공간에서 실행을 트리거하면 Dataform이 작업공간 이름을 모든 스키마에 스키마 서픽스로 추가합니다. 그런 다음 Dataform에서 커스텀 스키마에서 테이블을 실행합니다.

예를 들어 Dataform은 BigQuery에서 analytics_sasha 스키마의 sasha 작업공간에서 테이블을 만듭니다. 이를 통해 각 개발자가 자신의 개발 테이블을 자신의 스키마에 저장합니다. 실수로 다른 개발자의 테이블을 덮어쓸 위험이 없습니다.

Dataform에서 개발자는 변경사항을 커밋하고 원격 저장소의 커스텀 브랜치에 푸시합니다. 그런 후 서드 파티 Git 호스팅 플랫폼에서 pull 요청을 제출합니다. pull 요청을 승인하면 원격 저장소의 main 브랜치에 변경사항이 병합됩니다.

Dataform은 production 출시 구성 설정에 따라 원격 저장소의 main 브랜치에서 프로덕션 테이블을 컴파일 결과로 자동으로 컴파일합니다.

Dataform은 production 워크플로 구성에 설정된 일정에 따라 production 컴파일 결과를 자동으로 실행합니다.

이 솔루션을 구현하려면 다음 Dataform 설정을 구성합니다.

워크플로 설정

Dataform Core 버전에 따라 워크플로 설정은 workflow_settings.yaml 또는 dataform.json에 저장됩니다. 자세한 내용은 Dataform 워크플로 설정 구성을 참조하세요.

workflow_settings.yaml에서 다음 설정을 구성합니다.

defaultProject: enterprise-dev
defaultDataset: analytics

dataform.json에서 다음 설정을 구성합니다.

{
defaultSchema: "analytics",
defaultDatabase: "enterprise-dev"
}

작업공간 재정의

스키마 서픽스: "${workspaceName}"

출시 구성

  • Git commitish: "main"
  • Google Cloud 프로젝트 ID: "enterprise-prod"

production 컴파일 결과 실행을 예약하려면 요구에 가장 적합한 커스텀 일정으로 워크플로 구성을 만듭니다.

샘플 개발 프로세스

이 예시에서 개발자 사샤와 카이는 동일한 Dataform 저장소에서 작업합니다. Dataform 저장소는 원격 서드 파티 Git 저장소에 연결됩니다.

사샤는 sasha라는 전용 작업공간에서 작업하고 카이는 Kai라는 전용 작업공간에서 작업합니다. sashakai라는 원격 저장소의 커스텀 브랜치에 변경사항을 커밋하고 푸시합니다.

다음 표에서는 Sasha, Kai, 프로덕션 환경에 적용되는 환경 설정을 보여줍니다.

설정 Sasha 카이 프로덕션
Google Cloud 프로젝트 enterprise-dev enterprise-dev enterprise-prod
Git 브랜치 sasha kai main
작업공간 컴파일 재정의 스키마 서픽스: ${workspaceName} 스키마 서픽스: ${workspaceName} -
출시 구성 - - production
워크플로 구성 - - production

사샤는 다음 프로세스에 따라 새 테이블을 만들고 프로덕션에 배포합니다.

  1. sasha Dataform 작업공간에서 사샤는 user_stats.sqlx 테이블을 만듭니다.
  2. sasha 작업공간에서 사샤는 수동으로 테이블 실행을 트리거합니다.
  3. Dataform은 BigQuery에서 enterprise-dev Google Cloud 프로젝트의 analytics_sasha 스키마에서 enterprise-dev.analytics_sasha.user_stats 테이블을 실행합니다.
  4. sasha 작업공간에서 사샤는 변경사항을 커밋하고 원격 Git 저장소의 sasha 브랜치에 푸시합니다.
  5. 원격 저장소에서 사샤는 pull 요청을 제출합니다.
  6. 원격 저장소에서 카이는 pull 요청을 검토 및 승인하여 변경사항을 main 브랜치에 병합합니다.
  7. Dataform은 지정된 빈도로 production 출시 버전의 컴파일 결과를 자동으로 업데이트합니다. 다음 번 production 컴파일 결과 업데이트 시 Dataform은 enterprise-prod.analytics.user_stats 테이블을 컴파일 결과에 추가합니다.
  8. 워크플로 구성의 예약 실행 중에 Dataform은 BigQuery에서 enterprise-prod Google Cloud 프로젝트의 analytics 스키마에서 enterprise-prod.analytics.user_stats 테이블을 실행합니다.
  9. user_stats.sqlx 테이블은 BigQuery의 enterprise-prod Google Cloud 프로젝트에 있는 analytics 스키마의 최종 사용자에게 제공됩니다.

스키마 및 프로젝트별로 개발, 스테이징, 프로덕션 분할

이 솔루션은 개발, 스테이징, 프로덕션이라는 세 가지 실행 환경을 만듭니다. 모든 환경은 Google Cloud 프로젝트로 분할됩니다. 또한 개발은 스키마별로 스테이징 및 프로덕션에서 분할됩니다.

개발, 스테이징, 프로덕션 테이블을 스키마 및 Google Cloud 프로젝트별로 분할하려면, 워크플로 설정, 작업공간 컴파일 재정의, 두 개의 출시 구성을 구성해야 합니다. 스테이징 및 프로덕션 실행을 예약하려면 두 개의 개별 워크플로 구성을 만들어야 합니다.

이 솔루션에서 Dataform은 전용 개발 Google Cloud 프로젝트에서 Dataform 작업공간당 하나씩 여러 개발 스키마에서 BigQuery의 개발 테이블을 실행합니다.

Dataform은 스테이징에서 생성되었음을 나타내는 동일한 서픽스가 있는 스키마에서 전용 스테이징 Google Cloud 프로젝트의 BigQuery에서 모든 스테이징 테이블을 실행합니다.

Dataform은 프로덕션에서 생성되었음을 나타내는 동일한 서픽스가 있는 스키마에서 전용 프로덕션 Google Cloud 프로젝트의 BigQuery에서 모든 프로덕션 테이블을 실행합니다.

다음 표에서는 Dataform 작업공간당 하나의 개발 스키마를 사용하여 스키마 및 Google Cloud 프로젝트를 기준으로 개발, 스테이징, 프로덕션 테이블을 분할하는 예시 구성을 보여줍니다.

설정 개발 스테이징 프로덕션
Google Cloud 프로젝트 enterprise-dev enterprise-staging enterprise-prod
Git 브랜치 작업공간 이름 main prod
작업공간 컴파일 재정의 스키마 서픽스: ${workspaceName} - -
출시 구성 - staging production
워크플로 구성 - staging production

이 솔루션에서 Dataform은 BigQuery의 다른 Google Cloud 프로젝트에 개발, 스테이징, 프로덕션 테이블을 실행합니다. 또한 Dataform은 작업공간당 하나씩 여러 커스텀 스키마에서 개발 테이블을 실행합니다. Dataform은 동일한 스키마 그리고 다른 Google Cloud 프로젝트에서 스테이징 및 프로덕션 테이블을 실행합니다.

개발자는 Dataform 작업공간에서 실행을 수동으로 트리거합니다. 각 개발자는 각자의 이름이 지정된 전용 작업공간에서 작업을 수행합니다(예: sasha).

각 작업공간은 작업공간 이름을 붙인 커스텀 BigQuery 스키마에 해당합니다. 개발자가 작업공간에서 실행을 트리거하면 Dataform이 작업공간 이름을 기본 스키마에 스키마 서픽스로 추가합니다. 그런 다음 Dataform에서 BigQuery의 커스텀 스키마에서 테이블을 실행합니다.

예를 들어, Dataform은 BigQuery의 analytics_sasha 스키마에 있는 sasha 작업공간에서 테이블을 실행합니다. 이를 통해 각 개발자가 자신의 개발 테이블을 자신의 스키마에 저장합니다. 실수로 다른 개발자의 테이블을 덮어쓸 위험이 없습니다.

Dataform에서 개발자는 변경사항을 커밋하고 원격 저장소의 커스텀 브랜치에 푸시합니다. 그런 후 타사 Git 호스팅 플랫폼에서 pull 요청을 main 브랜치에 제출합니다. pull 요청을 승인하면 원격 저장소의 main 브랜치에 변경사항이 병합됩니다.

Dataform은 staging 출시 구성 설정에 따라 원격 저장소의 main 브랜치에서 스테이징 테이블을 컴파일 결과로 자동으로 컴파일합니다.

Dataform은 staging 워크플로 구성에 설정된 일정에 따라 staging 컴파일 결과를 자동으로 실행합니다.

테이블을 스테이징에서 프로덕션으로 승격하기 위해 타사 Git 호스팅 플랫폼에서 개발자는 main 브랜치에서 prod 브랜치로 pull 요청을 제출합니다. pull 요청을 승인하면 원격 저장소의 prod 브랜치에 변경사항이 병합됩니다.

Dataform은 production 출시 구성 설정에 따라 원격 저장소의 prod 브랜치에서 프로덕션 테이블을 컴파일 결과로 자동으로 컴파일합니다.

Dataform은 production 워크플로 구성에 설정된 일정에 따라 production 컴파일 결과를 자동으로 실행합니다.

이 솔루션을 구현하려면 다음 Dataform 설정을 구성합니다.

워크플로 설정

Dataform Core 버전에 따라 워크플로 설정은 workflow_settings.yaml 또는 dataform.json에 저장됩니다. 자세한 내용은 Dataform 워크플로 설정 구성을 참조하세요.

workflow_settings.yaml에서 다음 설정을 구성합니다.

defaultProject: enterprise-dev
defaultDataset: analytics

dataform.json에서 다음 설정을 구성합니다.

{
defaultSchema: "analytics",
defaultDatabase: "enterprise-dev"
}

작업공간 재정의

스키마 서픽스: "${workspaceName}"

staging 출시 구성

  • Git commitish: "main"
  • Google Cloud 프로젝트 ID: "enterprise-staging"

prod 출시 구성

  • Git commitish: "prod"
  • Google Cloud 프로젝트 ID: "enterprise-prod"

stagingproduction 컴파일 결과 실행을 예약하려면 요구에 가장 적합한 커스텀 일정으로 두 개의 개별 워크플로 구성을 만듭니다.

샘플 개발 프로세스

이 예시에서 개발자 사샤와 카이는 동일한 Dataform 저장소에서 작업합니다. Dataform 저장소는 원격 서드 파티 Git 저장소에 연결됩니다.

사샤는 sasha라는 전용 작업공간에서 작업하고 카이는 Kai라는 전용 작업공간에서 작업합니다. sashakai라는 원격 저장소의 커스텀 브랜치에 변경사항을 커밋하고 푸시합니다.

다음 표에서는 Sasha, Kai, 프로덕션 환경에 적용되는 환경 설정을 보여줍니다.

설정 Sasha 카이 스테이징 프로덕션
Google Cloud 프로젝트 enterprise-dev enterprise-dev enterprise-staging enterprise-prod
Git 브랜치 sasha kai main prod
스키마 analytics_sasha analytics_kai analytics analytics

사샤는 다음 프로세스에 따라 새 테이블을 만들고 프로덕션에 배포합니다.

  1. sasha Dataform 작업공간에서 사샤는 user_stats.sqlx 테이블을 만듭니다.
  2. sasha 작업공간에서 사샤는 수동으로 테이블 실행을 트리거합니다.
  3. Dataform은 BigQuery에서 enterprise-dev Google Cloud 프로젝트의 analytics_sasha 스키마에서 enterprise-dev.analytics_sasha.user_stats 테이블을 실행합니다.
  4. sasha 작업공간에서 사샤는 변경사항을 커밋하고 원격 Git 저장소의 sasha 브랜치에 푸시합니다.
  5. 원격 저장소에서 사샤는 main 브랜치에 pull 요청을 제출합니다.
  6. 원격 저장소에서 카이는 pull 요청을 검토 및 승인하여 변경사항을 main 브랜치에 병합합니다.
  7. Dataform은 지정된 빈도로 staging 출시 버전의 컴파일 결과를 자동으로 업데이트합니다. 다음 번 staging 컴파일 결과 업데이트 시 Dataform은 enterprise-staging.analytics.user_stats 테이블을 컴파일 결과에 추가합니다.
  8. 워크플로 구성의 예약 실행 중에 Dataform은 BigQuery에서 enterprise-staging Google Cloud 프로젝트의 analytics 스키마에서 enterprise-staging.analytics.user_stats 테이블을 실행합니다.
  9. 원격 저장소에서 사샤는 prod 브랜치에 pull 요청을 제출합니다.
  10. 원격 저장소에서 카이는 pull 요청을 검토 및 승인하여 변경사항을 prod 브랜치에 병합합니다.
  11. Dataform은 지정된 빈도로 production 출시 버전의 컴파일 결과를 자동으로 업데이트합니다. 다음 번 production 컴파일 결과 업데이트 시 Dataform은 enterprise-prod.analytics.user_stats 테이블을 컴파일 결과에 추가합니다.
  12. 워크플로 구성의 예약 실행 중에 Dataform은 BigQuery에서 enterprise-prod Google Cloud 프로젝트의 analytics 스키마에서 enterprise-prod.analytics.user_stats 테이블을 실행합니다.
  13. user_stats.sqlx 테이블은 BigQuery의 enterprise-prod Google Cloud 프로젝트에 있는 analytics 스키마의 최종 사용자에게 제공됩니다.

다음 단계