로컬에서 앱 설치 및 테스트하기

이 항목에서는 공급자가 로컬에서 Snowflake Native App 을 만들고 테스트하는 방법에 대해 설명합니다.

앱 만들기 및 테스트 정보

공급자는 Snowflake Native App Framework 에서 애플리케이션 패키지와 동일한 계정으로 앱을 생성할 수 있으므로 컨슈머에게 앱을 게시하기 전에 테스트할 수 있습니다.

또한 공급자는 공급자 계정과 컨슈머 계정을 번갈아 사용할 필요 없이 단일 계정에서 앱을 테스트할 수 있습니다.

앱 생성 및 테스트에 필요한 권한 요구 사항

애플리케이션 패키지에서 로컬로 앱을 만들려면 역할에 다음과 같은 권한이 부여되어 있어야 합니다.

  • 사용자의 역할에 부여된 CREATE APPLICATION 계정 수준 권한.

  • 애플리케이션 패키지에 부여된 INSTALL 오브젝트 수준 권한.

다음은 GRANT <privileges> … TO ROLE 명령을 사용하여 계정에 이러한 권한을 부여하는 방법을 보여주는 예입니다.

GRANT CREATE APPLICATION ON ACCOUNT TO ROLE provider_role;
GRANT INSTALL ON APPLICATION PACKAGE hello_snowflake_package
  TO ROLE provider_role;
Copy

DEVELOP 권한 사용하기

기본적으로 애플리케이션 패키지를 만드는 데 사용되는 역할에는 CREATE APPLICATION 명령을 사용하여 애플리케이션 패키지를 기반으로 앱을 만들 수 있는 권한이 있습니다.

하지만 일부 개발 환경에서는 다른 역할을 가진 사용자가 애플리케이션 패키지를 만들고 테스트하도록 허용해야 할 수도 있습니다. 이렇게 하려면 애플리케이션 패키지에 대한 DEVELOP 오브젝트 수준 권한을 역할에 부여하십시오.

DEVELOP 권한은 애플리케이션 패키지를 기반으로 앱을 만들고 테스트하는 데 필요한 권한을 부여합니다. 이 권한을 통해 사용자는 액세스 권한이 부여된 애플리케이션 패키지를 사용하여 다음 작업을 수행할 수 있습니다.

  • 애플리케이션 패키지에 지정된 버전 또는 패치를 기반으로 앱을 만듭니다.

  • ALTER APPLICATION 명령을 사용하여 다른 버전의 앱으로 업그레이드합니다.

  • 명명된 스테이지에서 파일을 사용하여 앱을 만들거나 업그레이드합니다.

  • 개발 모드 에서 생성된 앱에서 디버그 모드를 활성화합니다.

역할에 DEVELOP 권한을 부여하려면 다음 예와 같이 GRANT <privileges> … TO ROLE 명령을 사용하십시오.

GRANT DEVELOP ON APPLICATION PACKAGE hello_snowflake_package TO ROLE other_dev_role;
Copy

참고

DEVELOP 오브젝트 수준 권한은 단일 애플리케이션 패키지에만 적용됩니다. DEVELOP 권한을 할당하려는 각 애플리케이션 패키지에 대해 GRANT <privileges> … TO ROLE 을 실행해야 합니다.

앱 생성 및 테스트를 위한 워크플로

Snowflake Native App Framework 는 애플리케이션 패키지에서 앱을 만드는 다양한 방법을 제공합니다. 이를 통해 컨슈머에게 게시하기 전에 Snowflake Native App 을 테스트할 수 있습니다. 사용하는 방법은 앱에서 테스트하려는 부분에 따라 다릅니다.

다음 단계는 앱 테스트를 위한 일반적인 워크플로를 간략하게 설명한 것입니다.

  1. 앱을 만듭니다.

    다음을 기반으로 로컬에서 앱을 만들 수 있습니다.

    • 스테이지에 있는 파일

      이를 통해 설정 스크립트 또는 애플리케이션 코드 파일의 새 버전을 빠르게 테스트할 수 있습니다. 자세한 내용은 스테이징된 파일을 사용하여 앱 만들기 섹션을 참조하십시오.

    • 애플리케이션 패키지에 정의된 버전 또는 패치.

      애플리케이션 패키지의 버전 또는 패치를 정의한 후 이를 기반으로 앱을 만들어 이 버전을 테스트할 수 있습니다. 자세한 내용은 버전 또는 패치에서 앱 만들기 섹션을 참조하십시오.

  2. 앱을 업그레이드하는 방법.

    앱이 올바르게 작동하는지 확인한 후 다음 두 가지 방법 중 하나를 사용하여 새 버전으로 업그레이드할 수 있습니다.

    • 스테이지의 파일에서

    • 애플리케이션 패키지에 정의된 버전 또는 패치에서

  3. 릴리스 지시문을 기반으로 앱을 만듭니다.

    특정 파일이나 버전 또는 패치를 사용하여 앱을 테스트한 후 애플리케이션 패키지에 정의된 릴리스 지시문을 기반으로 앱을 만들 수 있습니다. 릴리스 지시문을 사용하면 앱의 스테이지나 버전을 지정할 필요가 없습니다.

    자세한 내용은 스테이징된 파일을 사용하여 앱 만들기 섹션을 참조하십시오.

  4. 목록에서 앱을 설치합니다.

    로컬 계정에서 애플리케이션 패키지와 앱이 올바르게 작동하는지 테스트한 후 애플리케이션 패키지를 목록에 추가하고 Snowsight 를 사용하여 설치를 테스트할 수 있습니다.

    자세한 내용은 스테이징된 파일을 사용하여 앱 만들기 섹션을 참조하십시오.

앱 만들기

고객과 공유하기 전에 계정에 직접 앱을 설치하여 기능과 권한을 테스트할 수 있습니다. CREATE APPLICATION 명령은 앱을 만들기 위한 다양한 구문을 지원합니다.

참고

다음 섹션에서는 애플리케이션 패키지와 필수 매니페스트 파일 및 설정 스크립트를 만들었다고 가정합니다.

스테이징된 파일을 사용하여 앱 만들기

명명된 스테이지에 업로드된 매니페스트 파일과 설정 스크립트를 사용하여 앱을 만들 수 있습니다. 이를 통해 애플리케이션 패키지에 새 버전을 추가하지 않고도 이러한 파일의 변경 사항을 테스트할 수 있습니다.

다음 예와 같이 스테이징된 파일을 사용하여 CREATE APPLICATION 명령으로 앱을 만듭니다.

CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package
  USING '@hello_snowflake_code.core.hello_snowflake_stage';
Copy

버전 또는 패치에서 앱 만들기

애플리케이션 패키지에서 버전 또는 패치를 정의한 후 해당 버전 또는 패치를 기반으로 앱을 만들 수 있습니다.

특정 버전에서 앱을 만들려면 다음 예와 같이 CREATE APPLICATION 명령을 사용하십시오.

CREATE APPLICATION hello_snowflake_app
  FROM APPLICATION PACKAGE hello_snowflake_package
  USING VERSION v1_0;
Copy

특정 패치에서 앱을 만들려면 다음 예와 같이 CREATE APPLICATION 명령을 사용하십시오.

CREATE APPLICATION hello_snowflake_app
  FROM APPLICATION PACKAGE hello_snowflake_package
  USING VERSION v1_0 PATCH 2;
Copy

릴리스 지시문을 기반으로 앱 만들기

애플리케이션 패키지에서 릴리스 지시문(사용자 지정 또는 기본값)을 지정한 후 해당 릴리스 지시문을 기반으로 앱을 만들 수 있습니다.

릴리스 지시문을 기반으로 앱을 만들려면 다음 예와 같이 CREATE APPLICATION 명령을 사용하십시오.

CREATE APPLICATION hello_snowflake_app FROM APPLICATION PACKAGE hello_snowflake_package;
Copy

스테이지를 사용하여 앱 업그레이드하기

명명된 스테이지에서 파일을 사용하여 앱을 업그레이드하려면 다음 예와 같이 ALTER APPLICATION 명령을 사용하십시오.

ALTER APPLICATION HelloSnowflake
  UPGRADE USING @CODEDATABASE.CODESCHEMA.AppCodeStage;
Copy

버전 또는 패치에서 앱 업그레이드하기

특정 버전 또는 패치를 사용하여 만든 앱을 업그레이드하려면 다음 예와 같이 ALTER APPLICATION 명령을 사용하십시오.

ALTER APPLICATION HelloSnowflake
 UPGRADE USING VERSION "v1_1";
Copy

앱을 활성 컨텍스트로 설정하기

앱을 세션의 활성 컨텍스트로 설정하려면 다음 예와 같이 USE APPLICATION 명령을 실행하십시오.

USE APPlICATION hello_snowflake_app;
Copy

참고

이 명령을 실행하려면 앱에 대한 USAGE 권한이 자신의 역할에 부여되어 있어야 합니다.

계정에서 앱 보기

계정에 제공되는 앱의 목록을 보려면 다음 예와 같이 SHOW APPLICATIONS 명령을 사용하십시오.

SHOW APPLICATIONS;
Copy

앱에 대한 정보 보기

앱의 세부 정보를 보려면 다음 예와 같이 DESCRIBE APPLICATION 명령을 실행하십시오.

DESC APPLICATION hello_snowflake_app;
Copy

개발 모드 에서 이 명령은 컨슈머의 애플리케이션 역할에 허용되는 스키마를 표시합니다.

디버그 모드 에서는 이 명령으로 애플리케이션 패키지의 모든 스키마를 표시합니다.

개발, 디버그 및 세션 디버그 모드를 사용하여 앱 테스트하기

공급자는 Snowflake Native App Framework 에서 다음 모드를 사용하여 앱을 만들고 기능을 테스트할 수 있습니다.

개발 모드

공급자는 컨슈머 관점에서 앱을 테스트할 수 있습니다. 즉, 공급자는 컨슈머에게 액세스 권한이 부여된 오브젝트에만 액세스할 수 있습니다.

디버그 모드

공급자는 앱 내의 모든 오브젝트에 액세스할 수 있습니다. 디버그 모드에서는 앱에서 상태를 수정할 때 세션의 기본 역할이 사용됩니다.

세션 디버그 모드

공급자는 앱에 부여된 권한 또는 설정 스크립트를 사용하여 앱 내의 오브젝트에 액세스할 수 있습니다.

개발 모드 정보

명명된 스테이지에서 버전을 지정 하거나 애플리케이션 파일을 지정 하여 애플리케이션 패키지에서 로컬 위치에 앱을 만들 때 앱은 개발 모드에 있는 것으로 간주됩니다.

개발 모드를 사용하여 단일 계정 내에서 앱을 테스트하고 문제를 해결하십시오. 개발 모드에서는 특정 버전의 애플리케이션 패키지를 기반으로 앱을 만들고 테스트할 수 있습니다. 스테이지에서 애플리케이션 파일을 사용하여 앱을 만들고 테스트할 수도 있습니다. 이렇게 하면 설정 스크립트 또는 애플리케이션 논리에 대한 변경 사항을 빠르게 테스트할 수 있습니다.

개발 모드에서는 컨슈머가 볼 수 없는 앱 내의 모든 오브젝트를 보고 테스트하는 데 사용할 수 있는 디버그 모드 를 추가로 제공합니다.

예를 들어 개발 모드에서는 앱 내의 오브젝트에 대해 SHOW 또는 DESC 명령을 실행하면 컨슈머에게 보기 권한이 부여된 오브젝트만 표시됩니다. 하지만 DEBUG 모드에서는 앱 내의 오브젝트를 전부 볼 수 있습니다.

디버그 모드 정보

디버그 모드에서는 앱 내의 모든 오브젝트를 확인하고 수정할 수 있습니다. 컨슈머에게 표시되지 않는 오브젝트(예: 데이터베이스 역할에 부여되지 않은 오브젝트 또는 공유 콘텐츠 오브젝트)를 이 모드에서는 볼 수 있습니다.

참고

디버그 모드에서 테이블과 같은 오브젝트를 만들면 해당 오브젝트는 앱과 동일한 소유권을 갖지 않습니다. 앱을 테스트하는 동안 새 오브젝트를 생성해야 하는 경우 세션 디버그 모드 를 사용하십시오.

디버그 모드에서 앱을 테스트하려면 다음이 필요합니다.

  • 앱을 개발 모드에서 만들어야 합니다. 즉, 애플리케이션이 스테이지의 특정 버전 또는 파일을 기반으로 해야 합니다.

  • 앱에서 디버그 모드를 명시적으로 활성화해야 합니다.

참고

애플리케이션 패키지를 포함하는 동일한 계정 내에서 개발 모드에서 만든 앱에 대해서만 디버그 모드를 활성화 및 비활성화할 수 있습니다.

앱에서 디버그 모드를 활성화하려면 다음 예와 같이 ALTER APPLICATION 명령을 사용하십시오.

ALTER APPLICATION hello_snowflake_app SET DEBUG_MODE = TRUE;
Copy

이 명령은 hello_snowflake_app 이라는 앱의 디버그 모드를 활성화합니다. 이와 유사하게, 디버그 모드를 비활성화하려면 다음 예와 동일한 명령을 사용하십시오.

ALTER APPLICATION hello_snowflake_app SET DEBUG_MODE = FALSE;
Copy

이 명령은 hello_snowflake_app 이라는 앱의 디버그 모드를 비활성화합니다.

참고

이 명령을 실행하려면 앱에 대한 OWNERSHIP 권한이 있어야 합니다. 또한 애플리케이션 패키지에 대한 DEVELOP 권한도 있어야 합니다.

또한 개발 모드와 애플리케이션 패키지와 동일한 계정에서 앱을 만들어야 합니다.

세션 디버그 모드

세션 디버그 모드를 사용하면 공급자가 앱 내의 모든 오브젝트를 보고 수정하며 앱이 컨슈머 계정에 설치되었을 때와 동일한 권한을 사용하여 문을 실행할 수 있습니다. 예를 들어 애플리케이션 역할에 부여되지 않은 오브젝트와 같이 컨슈머에게 표시되지 않는 오브젝트도 세션 디버그 모드에서 볼 수 있습니다.

디버그 모드와 달리 세션 디버그 모드는 보안 위험을 줄이기 위해 현재 세션에만 적용됩니다. 새 세션을 시작할 때마다 앱에 대해 세션 디버그 모드를 활성화해야 합니다. 세션 디버그 모드는 앱 또는 설정 스크립트와 동일한 권한을 사용하여 앱을 테스트할 수 있다는 점에서 디버그 모드와도 다릅니다. 이러한 권한을 사용하려면 세션 디버그 모드를 활성화할 때 다음 중 하나를 지정하면 됩니다. 자세한 내용은 앱에 세션 디버그 모드 활성화하기 섹션을 참조하십시오.

  • AS_APPLICATION: 모든 문은 컨슈머 계정에서 앱이 생성될 때와 동일한 권한을 사용하여 실행됩니다.

  • AS_SETUP_SCRIPT: 모든 문은 앱이 생성되거나 업그레이드될 때 설정 스크립트가 컨슈머 계정에서 실행될 때와 동일한 권한을 사용하여 실행됩니다.

공급자가 세션 디버그 모드를 사용하여 테이블과 같은 오브젝트를 생성하면 해당 오브젝트는 앱과 동일한 권한으로 생성됩니다.

세션 디버그 모드를 사용하기 위해 요구되는 권한

세션 디버그 모드를 사용하여 앱의 오브젝트를 보려면 다음과 같은 요구 사항이 있습니다.

  • 앱은 개발 모드 에서 생성해야 하며, 특정 버전을 기반으로 앱을 생성하거나 스테이지에 위치한 파일을 기반으로 앱을 생성해야 합니다.

  • 앱은 앱의 기반이 되는 애플리케이션 패키지와 동일한 계정에 있어야 합니다.

  • 앱에 OWNERSHIP 권한이 있어야 합니다.

  • 또한 애플리케이션 패키지에 대한 DEVELOP 권한이 있어야 합니다.

참고

세션 디버그 모드는 디버그 모드가 설정된 세션에서만 사용할 수 있습니다. 예를 들어 워크시트에서 디버그 모드로 들어간 다음 두 번째 워크시트에서 앱을 열면 두 번째 워크시트의 앱은 세션 디버그 모드에 있지 않습니다.

앱에 세션 디버그 모드 활성화하기

현재 세션의 앱에서 세션 디버그 모드를 사용하려면 다음 예제와 같이 SYSTEM$BEGIN_DEBUG_APPLICATION 시스템 함수를 사용합니다.

SELECT SYSTEM$BEGIN_DEBUG_APPLICATION(‘hello_snowflake_app’);
Copy

이 함수는 hello_snowflake_app 이라는 앱의 세션 디버그 모드를 활성화합니다.

다음 예시와 같이 앱의 실행 모드를 지정하여 세션 디버깅을 사용하도록 설정할 수도 있습니다.

SYSTEM$BEGIN_DEBUG_APPLICATION( 'hello_snowflake_app', execution_mode ='AS_APPLICATION')
Copy

이 함수는 hello_snowflake_app 앱의 실행 모드를 AS_APPLICATION 으로 설정합니다. 이 모드는 컨슈머 계정에서 앱을 만들 때와 동일한 권한을 사용하여 모든 문을 실행합니다.

현재 세션에 있는 앱의 세션 디버그 상태 보기

현재 세션의 세션 디버그 상태를 보려면 다음 예제와 같이 SYSTEM$GET_DEBUG_STATUS 시스템 함수를 사용합니다.

SELECT SYSTEM$GET_DEBUG_STATUS();
Copy

앱의 세션 디버그 모드 비활성화하기

현재 세션의 앱에서 세션 디버그 모드를 비활성화하려면 다음 예제와 같이 SYSTEM$END_DEBUG_APPLICATION 시스템 함수를 사용합니다.

SELECT SYSTEM$END_DEBUG_APPLICATION();
Copy

앱 테스트 시 공급자 데이터 삭제 비활성화하기

앱 내에서 쿼리 프로필과 쿼리 기록에서 정보를 삭제하여 컨슈머에게 앱에 대한 구현 세부 정보를 숨깁니다. 공급자 지식 재산 보호하기 섹션을 참조하십시오.

앱을 로컬에서 테스트할 때 쿼리 프로필 및 쿼리 기록에서 공급자 데이터의 삭제를 비활성화할 수 있습니다.

참고

세션 디버그 모드를 사용하면 컨슈머를 위해 정보가 삭제되더라도 앱 내의 모든 오브젝트와 데이터가 공급자에게 표시됩니다. 예를 들어 세션 디버그 모드를 사용할 때 SHOW APPLICATIONSDESCRIBE APPLICATION 명령이 반환하는 정보는 삭제되지 않습니다.

앱 테스트 시 공급자 데이터의 삭제를 비활성화하는 데 필요한 권한

앱에 대한 공급자 데이터 삭제를 비활성화하려면 다음 권한이 필요합니다.

  • 앱을 개발 모드에서 만들어야 합니다. 즉, 애플리케이션이 스테이지의 특정 버전 또는 파일을 기반으로 해야 합니다.

  • 애플리케이션 패키지가 포함된 동일한 계정 내에서 앱을 만들어야 합니다.

  • 앱에 OWNERSHIP 권한이 있어야 합니다.

  • 또한 애플리케이션 패키지에 대한 DEVELOP 권한이 있어야 합니다.

공급자 데이터의 정보 삭제 비활성화하기

앱에 대한 정보를 비활성화하려면 다음 예시와 같이 ALTER APPLICATION 명령을 사용합니다.

ALTER APPLICATION hello_snowflake_app SET DISABLE_APPLICATION_REDACTION = TRUE;
Copy

이 명령은 hello_snowflake_app 이라는 앱에 대한 공급자 데이터의 삭제를 비활성화합니다.

공급자 데이터의 삭제를 활성화하려면 다음 예시와 동일한 명령을 사용합니다.

ALTER APPLICATION hello_snowflake_app SET DISABLE_APPLICATION_REDACTION = FALSE;
Copy

개발 모드에서 테스트 이벤트 공유

공급자는 개발 모드를 사용하여 로그 및 이벤트 추적 을 사용하는 앱을 설치하고 테스트합니다. 공급자는 개발 계정에서 로컬로 이벤트 테이블을 설정하고 개발 모드로 앱을 설치한 다음 앱에서 발생하는 이벤트 및 로그와 공급자에게 다시 공유되는 로그를 볼 수 있습니다.

참고

개발 모드에서 이벤트 공유를 테스트하려면 앱에서 이벤트 정의 를 매니페스트 파일에 정의해야 합니다.

개발 모드의 차이점

개발 모드에서 앱은 다음 중 하나를 기반으로 만들어집니다.

  • 스테이지에 업로드된 파일.

  • 애플리케이션 패키지에 정의된 버전 또는 패치.

개발 모드에서 로컬로 이벤트 공유를 테스트할 때 목록에서 만든 앱과 동작에 차이가 있습니다.

  • 이벤트 공유를 사용하려면 MANAGE EVENT SHARING 전역 권한이 필요하지 않습니다.

  • 공유 이벤트는 로컬 이벤트 테이블에 수집됩니다. 로컬 이벤트 테이블에서 공급자는 하나의 이벤트에 대해 두 개의 항목을 볼 수 있습니다.

    • 앱이 설치될 때 앱이 컨슈머 측에서 발생하는 이벤트입니다.

    • 공급자와 공유되는 이벤트입니다.

개발 모드에서 테스트 이벤트 공유

  1. 로깅 및 이벤트 추적을 사용하도록 앱을 구성합니다.

  2. 로컬 개발 계정에서 이벤트 테이블을 설정합니다.

  3. 다음 명령 중 하나를 실행하여 로컬에서 앱을 만듭니다.

    CREATE APPLICATION hello_snowflake_app
      FROM APPLICATION PACKAGE hello_snowflake_package
      USING @path_to_staged_files
      AUTHORIZE_TELEMETRY_EVENT_SHARING = TRUE;
    
    CREATE APPLICATION hello_snowflake_app
      FROM APPLICATION PACKAGE hello_snowflake_package
      USING VERSION v1_0
      PATCH 0
      AUTHORIZE_TELEMETRY_EVENT_SHARING = TRUE;
    
    Copy
  4. 이벤트 테이블에서 로그 메시지와 추적 이벤트를 확인합니다.