본문 바로가기
WIKI 기술 지식 베이스

브랜칭

원문 보기 위키 갱신

브랜칭 (Branching)

데이터베이스에도 Git처럼 브랜치가 있으면 좋겠죠? Turso에서는 기존 데이터베이스로부터 별도의 데이터베이스 인스턴스인 브랜치를 만들 수 있어요. 원본에 영향을 주지 않고 개발과 테스트를 할 수 있어서 아주 유용해요.

출처: 문서

본문

브랜치는 기존 데이터베이스에서 만들어지는 별도의 데이터베이스 인스턴스예요. 데이터베이스의 시점 스냅샷에서 브랜치를 만들 수도 있어요. 브랜치는 원본 데이터베이스에 영향을 주지 않고 데이터베이스를 변경할 수 있게 해 주기 때문에 개발과 테스트에 유용해요.

동작 방식

  1. CLI 또는 API로 기존 데이터베이스에서 새 데이터베이스를 만들어요.
  2. 그룹 API 토큰으로 새 데이터베이스에 연결해요.
  3. 마이그레이션 도구로 새 스키마를 변경해요(선택 사항).
  4. GitHub Action으로 병합할 때 마이그레이션 도구를 사용해 원본 데이터베이스에 변경 사항을 적용해요(선택 사항).
  5. 더 이상 필요 없으면 데이터베이스를 삭제해요.

사용법

CLI 또는 API로 기존 데이터베이스에서 새 데이터베이스를 만들 수 있어요:

# CLI
turso db create my-new-database-branch --from-db my-existing-database
# Platform API
curl -L -X POST 'https://api.turso.tech/v1/organizations/{organizationSlug}/databases' \
  -H 'Authorization: Bearer ***' \
  -H 'Content-Type: application/json' \
  -d '{
      "name": "new-database",
      "group": "default",
      "seed": {
        "type": "database",
        "name": "my-existing-database"
      }
  }'

모든 인자에 대한 자세한 내용은 다음 참고 문서를 확인하세요:

알아 두어야 할 것들

  • 데이터베이스 브랜치는 원본 데이터베이스와 완전히 분리되어 있어요. 즉, 스키마 변경이나 데이터 병합은 마이그레이션 도구를 사용해 직접 처리해야 해요.
  • 새 데이터베이스에 연결하려면 새 토큰을 만들거나 그룹 토큰을 사용해야 해요.
  • 더 이상 필요 없는 데이터베이스 브랜치는 직접 삭제해야 해요.
  • 브랜치는 요금제의 데이터베이스 할당량(quota)에 포함돼요.

CI/CD

브랜칭을 자동화하면 풀 리퀘스트마다 새 데이터베이스를 만들 때 유용해요. 원본 데이터베이스에 영향을 주지 않고 변경 사항을 테스트할 수 있거든요.

다음은 Platform API를 사용한 예시예요:

# .github/workflows/create-database-branch.yml
name: Create Database
on: create

jobs:
  triggerAPI:
    runs-on: ubuntu-latest
    steps:
      - name: Generate Branch Name
        id: branch_name
        run: |
          BRANCH_NAME=$(echo "${{ github.ref_name }}" | tr -cd '[:alnum:]' | sed 's/./\L&/g' | cut -c 1-32)
          echo "::set-output name=branch_name::$BRANCH_NAME"
      - name: Create Database
        run: |
          curl -X POST \
          -H "Authorization: Bearer *** secrets.API_TOKEN }}" \
          -H "Content-Type: application/json" \
          -d '{"name": "${{ steps.branch_name.outputs.branch_name }}", "group": "default", "seed": {"type": "database", "name": "${{ secrets.DATABASE_NAME }}"} }' \
          "https://api.turso.tech/v1/organizations/${{ secrets.ORGANIZATION_NAME }}/databases"

더 알아보기 (Learn more)