Snowflake Native App 업데이트 및 업그레이드하기

Snowflake Native App Framework 을 사용하면 공급자가 Snowflake Native App 을 업데이트하여 새로운 기능을 추가하고, 버그를 수정하고, 기타 변경 작업을 수행할 수 있습니다. 이 항목에서는 애플리케이션 패키지에 버전과 패치를 추가하는 방법을 설명합니다. 또한 Snowflake Native App 설치 인스턴스를 업그레이드하는 방법도 설명합니다.

버전 및 패치 정보

Snowflake Native App Framework 컨텍스트 내에서 버전과 패치는 다음을 참조하십시오.

버전

일반적으로 Snowflake Native App 에 대한 주요 업데이트가 포함되어 있습니다. 버전은 애플리케이션 패키지에 정의됩니다. 애플리케이션 패키지에는 한 번에 두 개의 활성 버전만 있을 수 있습니다. 이미 두 가지 버전이 정의되어 있는 애플리케이션 패키지에 새 버전을 추가하려면 먼저 버전 중 하나를 삭제해야 합니다.

패치

일반적으로 Snowflake Native App 에 대해 더 작은 업데이트가 포함됩니다. 버전과 마찬가지로, 패치도 애플리케이션 패키지에 정의됩니다. 애플리케이션 패키지에는 한 번에 두 개의 활성 버전만 포함될 수 있지만, 한 버전에 여러 패치가 있을 수 있습니다.

참고

한 버전에 최대 130개의 패치가 있을 수 있습니다.

공급자가 애플리케이션 패키지에 새 버전을 추가하면 새 버전에 패치 0이 자동으로 할당됩니다. 공급자가 버전에 새 패치를 추가할 때 패치 번호를 수동으로 지정할 수 있습니다. 패치 번호를 따로 입력하지 않으면 패치 버전이 자동으로 1씩 증가합니다.

애플리케이션 패키지에 버전이나 패치를 추가한 후 해당 버전이나 패치를 기반으로 애플리케이션 오브젝트를 생성하여 로컬에서 변경 사항을 테스트할 수 있습니다. 자세한 내용은 버전 또는 패치 수준에서 애플리케이션 만들기 섹션을 참조하십시오.

참고

애플리케이션 패키지에 정의된 각 버전과 패치에는 자체 버전의 설치 스크립트와 애플리케이션 파일이 있어야 합니다.

버전과 패치의 차이점

공급자가 새 버전의 앱을 게시할 때 Snowflake Native App Framework 는 이전 버전의 앱만 활성화되도록 보장합니다. 예를 들어 공급자가 앱의 V1 및 V2를 게시한 경우 Snowflake Native App Framework 는 현재 V2만 컨슈머 계정에 설치되어 있는지 확인한 후 V3으로 업그레이드합니다. 이를 통해 설정 스크립트가 V2와 V3 간의 차이점만 처리하면 되도록 합니다. 즉, 설정 스크립트는 최신 버전의 앱에서만 이전 버전과 호환됩니다. 예컨대 새 테이블 생성 또는 테이블에 열 추가와 같이, 공급자가 앱의 상태를 변경할 경우 버전 간 호환성 문제가 없습니다.

반면, 공급자가 앱 버전에 대해 새 패치를 게시하면 Snowflake Native App Framework 에서는 실행 중인 활성 패치 수에 아무런 제한도 적용되지 않습니다. 공급자는 패치에서 앱 상태 변경을 방지해야 합니다.

릴리스 지시문 정보

릴리스 지시문은 컨슈머가 Snowflake Native App 을 설치할 때 사용되는 버전과 선택 사항으로 패치를 지정합니다. 릴리스 지시문은 특정 버전이나 패치의 모든 설치 인스턴스에서 자동 업그레이드 를 트리거하는 데도 사용됩니다.

릴리스 지시문은 애플리케이션 패키지에 정의되어 있습니다. 릴리스 지시문에는 다음 두 가지 유형이 있습니다.

사용자 지정 릴리스 지시문

공급자가 특정 Snowflake 계정이 설치할 수 있는 애플리케이션의 버전을 지정할 수 있습니다. 자세한 내용은 사용자 지정 릴리스 지시문 추가하기 를 참조하십시오.

기본 릴리스 지시문

Snowflake Native App 설치 시 모든 컨슈머에게 적용 가능한 버전과 패치를 지정합니다. 공급자가 애플리케이션 버전 V1과 V2를 만드는 경우 기본 릴리스 지시문을 V2로 설정하면 컨슈머가 Snowflake Native App 을 설치할 때 V2 버전을 설치하도록 보장합니다. 자세한 내용은 기본 릴리스 지시문 설정하기 를 참조하십시오.

공급자가 애플리케이션의 버전 V2 및 V3을 만드는 경우 V2를 기본 릴리스로 할당하고 특정 계정과 V3을 공유하도록 하는 사용자 지정 릴리스 지시문을 생성할 수 있습니다. 공급자는 해당 버전을 게시하기 전에 애플리케이션 버전 V3을 테스트 계정과 공유할 수도 있습니다.

참고

기본 및 사용자 지정 릴리스 지시문을 모두 지정하면 사용자 지정 릴리스 지시문이 항상 우선합니다. 위의 예에서 사용자 지정 릴리스 지시문에 지정된 컨슈머 계정에서는 애플리케이션의 V3만 설치할 수 있습니다.

다음 작업을 수행하려면 먼저 애플리케이션 패키지에서 릴리스 지시문을 정의해야 합니다.

  • 애플리케이션 패키지를 데이터 콘텐츠로 사용하여 공개 목록을 생성합니다.

  • 컨슈머 계정에 Snowflake Native App 을 설치합니다.

업그레이드 정보

Snowflake Native App Framework 컨텍스트 내에서 업그레이드는 컨슈머 계정에 설치된 Snowflake Native App 의 버전 또는 패치에 대한 업데이트입니다. Snowflake Native App Framework 는 다음 두 가지 유형의 업그레이드를 지원합니다.

자동 업그레이드

자동 업그레이드는 공급자가 시작하는 업그레이드입니다. 새 버전이나 패치가 나올 경우 공급자는 애플리케이션 패키지의 릴리스 지시문을 수정합니다. 그러면 릴리스 지시문에 지정된 앱의 설치된 모든 인스턴스가 자동으로 업그레이드됩니다.

수동 업그레이드

수동 업그레이드는 공급자의 커뮤니케이션에 대한 응답으로 컨슈머가 시작하는 업그레이드입니다. 수동 업그레이드는 공급자가 버그 수정과 같은 업데이트를 컨슈머에게 신속히 릴리스해야 할 때 유용합니다.

새 버전이나 패치가 나올 경우 공급자는 애플리케이션 패키지의 릴리스 지시문을 수정한 다음 컨슈머에게 새 버전을 사용할 수 있음을 알립니다. 그러면 컨슈머는 ALTER APPLICATION 명령을 실행하는 방법으로 업그레이드를 수행합니다. 일반적으로 컨슈머는 수동 업그레이드를 통해 자동 업그레이드보다 더 빠르게 설치된 앱을 업그레이드할 수 있습니다.

업그레이드 수행을 위한 워크플로에 대한 자세한 내용은 Snowflake Native App 업그레이드하기 섹션을 참조하십시오.

리전 간 업그레이드 정보

여러 리전에 걸쳐 설치된 앱을 업그레이드하는 방법에 대한 자세한 내용은 여러 리전에 걸쳐 설치된 앱 업그레이드하기 섹션을 참조하십시오.

애플리케이션 패키지에 버전 또는 패치 추가하기

애플리케이션의 버전 정보는 애플리케이션 패키지에 지정됩니다.

버전 및 패치를 추가하거나 제거하는 데 필요한 권한

애플리케이션 패키지의 버전이나 패치를 지정하려면 애플리케이션 패키지에 대해 다음 권한 중 하나를 자신의 역할에 부여해야 합니다.

  • OWNERSHIP

  • MANAGE VERSIONS

예를 들어 애플리케이션 패키지에 대한 MANAGE VERSION 권한을 release_mgr 역할에 부여하려면 다음 예와 같이 GRANT <권한> 명령을 사용하십시오.

GRANT MANAGE VERSIONS ON APPLICATION PACKAGE hello_snowflake_package
  TO ROLE release_mgr;
Copy

SQL을 사용하여 애플리케이션 패키지에 버전 추가하기

다음 예에서는 ALTER APPLICATION PACKAGE 명령을 사용하여 애플리케이션 패키지에 버전을 추가하는 방법을 보여줍니다.

ALTER APPLICATION PACKAGE MyAppPackage
  ADD VERSION v1_0
  USING '@dev_stage/v1_0'
  LABEL = 'MyApp Version 1.0';
Copy

이 예에서 v1_0 은 애플리케이션을 설치할 때 컨슈머에게 표시되지 않는 버전의 식별자입니다. 컨슈머에게는 LABEL 절에 정의된 대로 버전 정보가 표시됩니다.

한 애플리케이션에 대해 동시에 존재할 수 있는 버전 수는 2개뿐입니다. 예를 들어 애플리케이션에서 v1_0 및 v1_1을 정의한 경우 v1_2를 만들려면 v1_0을 삭제해야 합니다. 하지만 패치는 단일 버전에 대해 여러 개 있을 수 있습니다.

manifest.yml 파일에서 버전 이름과 레이블을 정의하거나 ALTER APPLICATION PACKAGE 명령으로 이들을 직접 지정할 수 있습니다. manifest.yml 파일에서 버전 이름과 레이블을 정의할 뿐 아니라 SQL 명령으로도 정의하는 경우 SQL 명령에 지정된 값이 manifest.yml 파일에 지정된 값보다 우선합니다.

SQL을 사용하여 애플리케이션 패키지에 패치 추가하기

앱의 버전을 만드는 것 외에 특정 버전에 대한 패치를 만들 수도 있습니다. 버전과 마찬가지로, 앱 패치에도 자체 애플리케이션 파일이 있습니다.

애플리케이션 패키지에 대한 새 패치를 만들려면 다음 예와 같이 ALTER APPLICATION PACKAGE … VERSION 명령의 ADD PATCH FOR VERSION 절을 사용하십시오.

ALTER APPLICATION PACKAGE MyAppPackage
 ADD PATCH FOR VERSION V1_0
 USING '@dev_stage/v1_0_p1;
Copy

이 예제에서는 ADD PATCH FOR VERSION V1_0 절에 패치 번호가 제공되지 않습니다. 이 경우 Snowflake는 자동으로 패치 번호를 1씩 증가시킵니다.

사용자 지정 패치 번호로 애플리케이션 패키지에 대한 새 패치를 만들려면 다음 예와 같이 ALTER APPLICATION PACKAGE … VERSION 명령의 ADD PATCH FOR VERSION 절에 패치 번호를 지정하십시오.

ALTER APPLICATION PACKAGE MyAppPackage
 ADD PATCH 3
 FOR VERSION V1_0
 USING '@dev_stage/v1_0_p1;
Copy

애플리케이션 패키지의 버전 및 패치 보기

공급자로서 애플리케이션 패키지에서 SHOW VERSIONS 명령을 실행하여 애플리케이션에 대해 정의된 버전과 패치를 볼 수 있습니다.

다음 명령으로 hello_snowflake_package 라는 애플리케이션 패키지에 대해 정의된 버전과 패치를 표시합니다.

SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
Copy

애플리케이션 패키지에서 버전 제거하기

애플리케이션 패키지에서 버전을 제거하려면 현재 제거하려는 버전을 가리키는 릴리스 지시문이 없는지 확인해야 합니다.

애플리케이션 패키지에 지정된 릴리스 지시문을 보려면 다음 예에 표시된 것과 같이 SHOW RELEASE DIRECTIVES 명령을 실행하십시오.

SHOW RELEASE DIRECTIVES IN APPLICATION PACKAGE hello_snowflake_package;
Copy

애플리케이션 패키지에서 버전을 제거하려면 다음 예와 같이 ALTER APPLICATION PACKAGE 명령의 DROP VERSION 절을 사용하십시오.

ALTER APPLICATION PACKAGE hello_snowflake_package
  DROP VERSION v1_0;
Copy

이 명령을 실행한 후에는 설치된 앱 인스턴스가 모두 삭제될 때까지 버전이 삭제되지 않습니다. drop 명령의 상태를 확인하려면 다음 예제와 같이 SHOW VERSIONS 를 사용하십시오.

SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
Copy

dropped_on 열에는 drop이 시작되었을 때의 타임스탬프가 나열됩니다.

참고

삭제된 버전은 상태가 DROPPED 인 동안에만 이 명령의 출력에 나타납니다. 설치된 앱 인스턴스가 모두 삭제되면 삭제된 버전이 더 이상 표시되지 않습니다.

버전이 삭제되면 컨슈머가 더 이상 해당 앱 버전의 새 인스턴스를 설치할 수 없습니다.

애플리케이션이 컨슈머에게 게시되는 방식에 따라 버전이 삭제되는 데 걸리는 시간이 다를 수 있습니다.

  • 애플리케이션 패키지가 컨슈머에게 게시되지 않은 경우 버전은 즉시 삭제됩니다.

  • 애플리케이션 패키지가 단일 리전 내에서 공개 또는 비공개 목록으로 게시된 경우 해당 버전은 즉시 삭제됩니다.

  • 애플리케이션 패키지가 애플리케이션 패키지와 동일한 리전 내에서 공유되는 목록의 데이터 제품으로 게시된 경우 해당 버전은 몇 시간 내에 삭제됩니다.

  • 애플리케이션 패키지가 클라우드 간 자동 복제 를 사용하여 목록의 데이터 제품으로 게시된 경우 버전이 모든 리전에서 삭제되는 데 시간이 더 오래 걸릴 수 있습니다.

애플리케이션 패키지에 대한 릴리스 지시문 설정하기

애플리케이션 패키지에 버전을 추가하면 애플리케이션 패키지에 대한 릴리스 지시문을 지정할 수 있습니다. 릴리스 지시문에 따라 앱을 설치할 때 또는 설치된 앱이 자동으로 업그레이드될 때 컨슈머가 사용할 수 있는 애플리케이션의 버전이 결정됩니다.

릴리스 지시문 설정에 필요한 권한

릴리스 지시문을 설정하려면 공급자에게 애플리케이션 패키지에 대한 MANAGE RELEASES 권한이나 소유권이 있어야 합니다.

GRANT MANAGE RELEASES ON APPLICATION PACKAGE hello_snowflake_package
  TO ROLE release_mgr;
Copy

애플리케이션 패키지에 대한 기본 릴리스 지시문 설정하기

다음 예와 같이 SET DEFAULT RELEASE DIRECTIVE와 함께 ALTER APPLICATION PACKAGE 명령을 사용하여 기본 릴리스 지시문을 설정합니다.

ALTER APPLICATION PACKAGE hello_snowflake_package
  SET DEFAULT RELEASE DIRECTIVE
  VERSION = v1_0
  PATCH = 2;
Copy

애플리케이션 패키지에 대한 기본 릴리스 지시문을 업데이트하려면 VERSION 또는 PATCH에 새 값을 적절히 지정하여 SET DEFAULT RELEASE DIRECTIVE와 함께 ALTER APPLICATION PACKAGE 명령을 다시 실행하십시오.

애플리케이션 패키지에 대한 사용자 지정 릴리스 지시문 설정하기

사용자 지정 릴리스 지시문을 추가하려면 SET RELEASE DIRECTIVE와 함께 ALTER APPLICATION PACKAGE 명령을 사용하십시오. ACCOUNTS 절을 사용하여 이 릴리스 지시문이 적용되는 계정을 지정합니다. 예:

ALTER APPLICATION PACKAGE hello_snowflake_package
  SET RELEASE DIRECTIVE hello_snowflake_package_custom
  ACCOUNTS = (CONSUMER_ORG.CONSUMER_ACCOUNT)
  VERSION = v1_0
  PATCH = 0;
Copy

사용자 지정 릴리스 지시문 업데이트하기

사용자 지정 릴리스 지시문에 대해 버전 또는 패치를 업데이트하려면 다음 예와 같이 MODIFY RELEASE DIRECTIVE 명령과 함께 ALTER APPLICATION PACKAGE 명령을 사용하십시오.

ALTER APPLICATION PACKAGE hello_snowflake_package
  MODIFY RELEASE DIRECTIVE hello_snowflake_package_custom
  VERSION = v1_0
  PATCH = 0;
Copy

하지만 릴리스 지시문과 연결된 계정은 수정할 수 없습니다. 릴리스 지시문과 연결된 조직과 계정을 변경하려면 다음을 수행하십시오.

  1. UNSET RELEASE DIRECTIVE와 함께 ALTER APPLICATION PACKAGE 명령을 실행하여 애플리케이션 패키지에서 릴리스 지시문을 제거합니다.

  2. SET RELEASE DIRECTIVE와 함께 ALTER APPLICATION PACKAGE 명령을 실행하고 ACCOUNTS 절로 계정 목록을 지정하여 릴리스 지시문을 애플리케이션 패키지에 다시 추가합니다.

참고

릴리스 지시문과 관련된 조직 및 계정을 변경할 때 이전 릴리스를 제거한 후 즉시 새 릴리스를 직접 추가해야 합니다. 그렇게 하지 않으면 사용자 지정 릴리스 지시문에 할당된 계정에 설치된 앱이 기본 릴리스 지시문으로 되돌아갑니다.

사용자 지정 릴리스 지시문 제거하기

애플리케이션 패키지에서 사용자 지정 릴리스 지시문을 제거하려면 다음 예와 같이 UNSET RELEASE DIRECTIVE와 함께 ALTER APPLICATION PACKAGE 명령을 사용하십시오.

ALTER APPLICATION PACKAGE hello_snowflake_package
  UNSET RELEASE DIRECTIVE hello_snowflake_package_custom;
Copy

릴리스 지시문을 사용하여 버전 및 패치 테스트하기

개발 모드의 애플리케이션 패키지에서 애플리케이션을 설치할 때 버전과 패치가 명시적으로 지정됩니다. 그러나 다음 명령을 사용하여 애플리케이션을 설치하는 경우

CREATE APPLICATION hello_snowflake
  FROM APPLICATION PACKAGE hello_snowflake_package
Copy

릴리스 지시문에 따라 이 명령을 실행할 때 설치되는 버전이 결정됩니다.

Snowflake Native App 업그레이드하기

공급자가 애플리케이션 패키지에 대한 릴리스 지시문을 설정하거나 변경할 때 업그레이드가 시작됩니다.

Snowflake Native App 업그레이드를 위한 워크플로

공급자는 다음 워크플로를 사용하여 설치된 앱을 업그레이드합니다.

  1. 애플리케이션 패키지의 애플리케이션 논리 및 설정 스크립트를 업데이트합니다.

  2. 현재 두 가지 버전이 정의되어 있는 경우 애플리케이션 패키지에서 버전을 제거합니다.

  3. 애플리케이션 패키지의 변경 사항에 대한 새 버전이나 패치를 만듭니다.

    애플리케이션의 DISTRIBUTION 속성이 EXTERNAL 로 설정된 경우 자동 보안 검사 가 시작됩니다. 업그레이드하려면 먼저 보안 검사를 통과해야 합니다.

  4. 공급자의 테스트 계정에 APPLICATION 오브젝트를 생성하여 새 버전을 테스트합니다.

  5. 버전이나 패치에 대한 릴리스 지시문을 업데이트합니다.

    그러면 이전 버전의 설치된 모든 인스턴스를 업데이트하는 자동 업그레이드가 시작됩니다. 공급자는 업그레이드가 제공됨을 컨슈머에게 알리고 수동 업그레이드 를 수동으로 수행하도록 요청할 수 있습니다.

참고

애플리케이션 패키지를 업그레이드한 후 컨슈머 계정에 설치된 Snowflake Native App 의 변경 사항은 원격 리전에 대해 새로 고침을 수행할 때까지 표시되지 않을 수 있습니다.

DATA_SHARING_USAGE 스키마의 APPLICATION_STATE 뷰를 사용하여 상태를 모니터링할 수 있습니다. 업그레이드를 수행한 다음 첫 번째 새로 고침 후 1일이 지나도 업그레이드가 완료되지 않으면 새로 고침 프로세스에 문제가 있는 것일 수 있습니다. Snowflake 지원 에 문의하십시오.

여러 리전에 걸쳐 설치된 앱 업그레이드하기

공급자가 클라우드 간 자동 복제 를 사용하여 Snowflake Native App 을 게시하는 경우 다음 요소에 따라 자동 업그레이드를 수행하는 데 시간이 다소 걸릴 수 있습니다.

  • 새로 고침 일정의 값.

  • 설치된 앱 인스턴스 수.

  • 앱이 배포되는 리전의 수.

업그레이드에 원격 리전에서 업그레이드해야 하는 긴급 수정 사항이 포함된 경우 공급자는 업그레이드를 더 빠르게 수행하기 위해 다음 방법을 고려할 수 있습니다.

설치된 앱에 대해 수동 업그레이드 수행하기

컨슈머는 수동 업그레이드를 통해 애플리케이션 패키지에 지정된 릴리스 지시문을 사용하여 설치된 앱 버전이나 패치의 업그레이드를 시작할 수 있습니다.

컨슈머가 설치된 Snowflake Native App 을 사용 가능한 최신 버전으로 업그레이드하려면 ALTER APPLICATION 명령의 UPGRADE 절을 사용하여 애플리케이션 오브젝트를 수정하면 됩니다.

ALTER APPLICATION <name> UPGRADE
Copy

업그레이드 상태 보기

앱의 업그레이드 상태를 보려면 다음 예제와 같이 APPLICATION_STATE 뷰 시스템 뷰를 사용하십시오.

SELECT * FROM snowflake.data_sharing_usage.APPLICATION_STATE
Copy

이 뷰에는 업그레이드 상태 및 앱이 배포된 리전을 비롯하여 업그레이드와 관련된 열이 포함되어 있습니다.