데이터 연결 스키마 및 커넥터 배포 및 관리

Firebase Data Connect 서비스에는 다음과 같은 세 가지 기본 구성요소가 있습니다.

  • 자체 SQL 스키마가 있는 기본 PostgreSQL 데이터베이스
  • Data Connect 애플리케이션 스키마(.gql 파일에 선언됨)
  • 여러 커넥터 (.gql 파일에 선언됨)

SQL 스키마는 데이터의 소스이고 Data Connect 스키마는 커넥터가 해당 데이터를 볼 수 있는 방법이며 커넥터는 클라이언트가 해당 데이터에 액세스하는 데 사용할 수 있는 API를 선언합니다.

CLI로 Data Connect 서비스를 배포할 때는 SQL 스키마를 이전한 다음 Data Connect 스키마를 업데이트한 후 각 커넥터를 업데이트합니다.

중요한 배포 개념

배포를 완전히 이해하려면 스키마 및 커넥터에 관한 주요 개념을 알아야 합니다.

스키마 배포

Data Connect 스키마의 배포는 Cloud SQL 데이터베이스의 SQL 스키마에 영향을 미칩니다. Data Connect는 새 데이터베이스를 사용 중이거나 기존 데이터베이스를 비파괴적으로 조정해야 하는 경우 배포 중에 스키마를 이전하는 데 도움이 됩니다.

Data Connect 스키마 마이그레이션에는 엄격호환이라는 두 가지 스키마 유효성 검사 모드가 있습니다.

  • 엄격 모드 유효성 검사를 사용하려면 애플리케이션 스키마를 업데이트하기 전에 데이터베이스 스키마가 애플리케이션 스키마와 정확하게 일치해야 합니다. Data Connect 스키마에서 사용되지 않는 테이블이나 열은 데이터베이스에서 삭제됩니다.

  • 호환 모드 유효성 검사를 사용하려면 애플리케이션 스키마를 업데이트하기 전에 데이터베이스 스키마가 애플리케이션 스키마와 호환되어야 합니다. 스키마, 테이블 또는 열을 삭제하는 추가 변경사항은 선택사항입니다.

    호환된다는 것은 스키마 이전이 애플리케이션 스키마에서 참조되는 테이블과 열에만 영향을 미친다는 것을 의미합니다. 애플리케이션 스키마에서 사용하지 않는 데이터베이스 요소는 수정되지 않은 상태로 유지됩니다. 따라서 배포 후 데이터베이스에 다음과 같은 사용되지 않은 항목이 포함될 수 있습니다.

    • 스키마
    • Tables

커넥터 배포

Data Connect 쿼리와 변형은 클라이언트 코드로 제출되지 않고 서버에서 실행됩니다. 대신 배포 시 이러한 Data Connect 작업은 Cloud Functions과 같이 서버에 저장됩니다. 즉, 배포 시 기존 사용자가 중단될 수 있습니다.

배포 워크플로 따르기

Data Connect 프로젝트는 로컬 프로젝트 디렉터리와 Firebase 콘솔에서 모두 작업할 수 있습니다.

권장되는 배포 흐름은 다음과 같습니다.

  1. firebase dataconnect:services:list를 사용하여 현재 배포된 스키마 및 커넥터를 나열합니다.
  2. 스키마 업데이트 관리
    1. firebase dataconnect:sql:diff를 사용하여 Cloud SQL 데이터베이스와 로컬 Data Connect 스키마 간의 SQL 스키마 차이를 확인합니다.
    2. 필요한 경우 dataconnect:sql:migrate를 사용하여 SQL 스키마 마이그레이션을 수행합니다.
  3. firebase deploy를 실행하여 스키마만, 커넥터만 또는 리소스 조합에 대해 스키마 및 연결 배포를 실행합니다.

Data Connect 리소스 배포 및 관리

배포를 실행하기 전에 프로덕션 리소스를 확인하는 것이 좋습니다.

firebase dataconnect:services:list

로컬 프로젝트 디렉터리에서 작업할 때는 일반적으로 firebase deploy 명령어를 사용하여 스키마와 커넥터를 프로덕션에 배포하고 대화형 의견을 받습니다.

deploy 명령어를 사용하면 --only dataconnect 플래그를 통해 Data Connect 배포를 프로젝트의 다른 제품과 분리할 수 있습니다.

일반 배포

firebase deploy --only dataconnect

이 일반 배포에서 Firebase CLI는 스키마 및 커넥터 배포를 시도합니다.

새 스키마가 기존 커넥터를 손상시키지 않는지 확인합니다. 브레이킹 체인지를 적용할 때는 권장사항을 따르세요.

또한 Data Connect 스키마를 업데이트하기 전에 SQL 스키마가 이미 이전되었는지 확인합니다. 그렇지 않으면 스키마를 이전하는 데 필요한 단계를 자동으로 안내합니다.

--force 플래그 배포

firebase deploy --only dataconnect --force

커넥터 또는 SQL 스키마 유효성 검사 중 어느 쪽도 문제가 되지 않는 경우 --force를 사용하여 명령어를 다시 실행하여 무시할 수 있습니다.

--force 배포는 여전히 SQL 스키마가 Data Connect 스키마와 일치하는지 확인하고, 비호환성에 대해 경고하고, 메시지를 표시합니다.

선택한 리소스 배포

더 세부적으로 제어하면서 배포하려면 --only 플래그를 serviceId 인수와 함께 사용합니다. 특정 서비스의 스키마 변경사항만 배포하려면 다음 단계를 따르세요.

firebase deploy --only dataconnect:serviceId:schema

지정된 커넥터 및 서비스의 모든 리소스를 배포할 수도 있습니다.

firebase deploy --only dataconnect:serviceId:connectorId

마지막으로 단일 서비스에 스키마와 모든 커넥터를 배포할 수 있습니다.

firebase deploy --only dataconnect:serviceId

배포 롤백

수동으로 롤백하려면 이전 버전의 코드를 체크아웃하고 배포하세요. 원래 배포에 파괴적인 브레이킹 체인지가 포함되어 있으면 삭제된 데이터를 완전히 복구하지 못할 수 있습니다.

데이터베이스 스키마 마이그레이션

프로토타입을 빠르게 제작하고 스키마를 실험하며 스키마 변경사항이 파괴적이라는 것을 알고 있다면 Data Connect 도구를 사용하여 변경사항을 확인하고 업데이트가 실행되는 방식을 감독할 수 있습니다.

SQL 스키마 변경사항 비교

다음과 같이 변경사항을 확인할 수 있습니다.

firebase dataconnect:sql:diff

쉼표로 구분된 서비스 목록을 전달할 수 있습니다.

이 명령어는 서비스의 로컬 스키마를 해당 Cloud SQL 데이터베이스의 현재 스키마와 비교합니다. 차이가 있으면 차이를 수정하기 위해 실행할 SQL 명령어를 출력합니다.

변경사항 적용

만족스러우며 스키마 Cloud SQL 인스턴스에 변경사항을 배포할 준비가 되면 firebase dataconnect:sql:migrate 명령어를 실행합니다. 변경사항을 승인하라는 메시지가 표시됩니다.

firebase dataconnect:sql:migrate [serviceId]

대화형 환경에서는 SQL 이전 문 및 작업 메시지가 표시됩니다.

엄격 모드 또는 호환 모드로 이전

새 프로젝트에는 기본 스키마 유효성 검사 모드가 적용됩니다. migrate 명령어의 동작은 애플리케이션 스키마에 필요한 모든 데이터베이스 스키마 변경사항을 적용한 다음 스키마, 테이블 또는 열을 삭제하여 데이터베이스 스키마가 애플리케이션 스키마와 정확하게 일치하도록 하는 선택적 작업을 승인하라는 메시지를 표시합니다.

dataconnect.yaml 파일을 수정하여 이 동작을 조정할 수 있습니다. schemaValidation 키의 주석을 해제하고 COMPATIBLE를 선언하여 이전에 필요한 변경사항만 적용되도록 합니다.

schemaValidation: "COMPATIBLE"

또는 모든 스키마 변경사항이 적용되고 데이터베이스 스키마가 애플리케이션 스키마와 일치하도록 동작을 STRICT로 설정합니다.

schemaValidation: "STRICT"

자세한 내용은 Data Connect CLI 참조를 참고하세요.

스키마 및 커넥터 관리 권장사항

Firebase에서는 Data Connect 프로젝트에서 따라야 할 몇 가지 권장사항을 제공합니다.

중대한 변경사항 최소화

  • Firebase에서는 Data Connect 스키마 및 커넥터 파일을 소스 제어에 유지하는 것이 좋습니다.
  • 가능하면 중단을 야기하는 변경사항을 피하세요. 중단 변경의 일반적인 예는 다음과 같습니다.
    • 스키마에서 필드 삭제
    • 스키마에서 null 허용 필드를 null 비허용으로 만들기(예: Int -> Int!)
    • 스키마의 필드 이름을 변경합니다.
  • 스키마에서 필드를 삭제해야 하는 경우 영향을 최소화하기 위해 필드를 여러 배포로 분할하는 것이 좋습니다.
    • 먼저 커넥터에서 필드에 대한 참조를 삭제하고 변경사항을 배포합니다.
    • 그런 다음 새로 생성된 SDK를 사용하도록 앱을 업데이트합니다.
    • 마지막으로 스키마 .gql 파일에서 필드를 삭제하고 SQL 스키마를 마이그레이션한 후 한 번 더 배포합니다.

새 데이터베이스를 사용할 때 엄격 모드 사용

새 데이터베이스에서 Data Connect를 사용하고 애플리케이션 스키마를 적극적으로 개발 중이며 데이터베이스 스키마가 애플리케이션 스키마와 정확하게 일치하도록 하려면 dataconnect.yaml에서 schemaValidation: "STRICT"를 지정하면 됩니다.

이렇게 하면 선택사항인 변경사항도 적용됩니다.

데이터베이스에 프로덕션 데이터가 있는 경우 호환 모드를 사용합니다.

프로덕션 데이터가 포함된 데이터베이스를 변경하는 경우 기존 데이터가 삭제되지 않도록 호환 모드에서 스키마 이전을 실행하는 것이 좋습니다. dataconnect.yaml에서 schemaValidation: "COMPATIBLE"를 지정할 수 있습니다.

호환 모드에서는 필요한 스키마 마이그레이션 변경사항만 데이터베이스에 적용됩니다.

  • DROP SCHEMA, DROP TABLE, DROP COLUMN는 선택사항 문이므로 데이터베이스 스키마에 애플리케이션 스키마에 정의되지 않은 스키마, 테이블 또는 열이 포함되어 있더라도 계획에 생성되지 않습니다.
  • 데이터베이스 테이블에 애플리케이션 스키마에 포함되지 않은 null이 아닌 열이 포함된 경우 NOT NULL 제약 조건이 삭제되므로 정의된 커넥터를 사용하여 데이터를 계속 테이블에 추가할 수 있습니다.

다음 단계