자습서: Native Apps Framework로 애플리케이션 개발하기

소개

이 자습서에서는 Native Apps Framework를 사용하여 다른 Snowflake 계정과 데이터 및 관련 비즈니스 논리를 공유하는 애플리케이션을 만드는 방법을 설명합니다.

이 자습서에서는 Snowsight 웹 인터페이스를 사용하지만, SQL 실행을 지원하는 모든 Snowflake 클라이언트(예: SnowSQL)를 사용할 수 있습니다.

알아볼 내용

이 자습서에서는 다음에 대해 설명합니다.

  • 애플리케이션의 데이터 및 비즈니스 논리를 포함하는 애플리케이션 패키지를 생성합니다.

  • 애플리케이션 패키지와 데이터를 공유합니다.

  • 애플리케이션 패키지에 비즈니스 논리를 추가합니다.

  • 애플리케이션을 로컬에서 테스트합니다.

  • Snowsight 에서 애플리케이션을 보고 테스트합니다.

  • 비공개 목록을 만들어 애플리케이션을 게시합니다.

  • 비공개 목록에서 애플리케이션을 설치합니다.

공급자 및 컨슈머 정보

Native Apps Framework의 컨텍스트 내에서 공급자는 컨슈머인 다른 Snowflake 사용자와 공유하려는 데이터와 비즈니스 논리를 가진 역할과 조직입니다. 컨슈머는 조직 내 다른 계정, 회사 내 다른 조직 또는 다른 회사의 Snowflake 사용자일 수 있습니다.

이 자습서의 컨텍스트 내에서 수행하게 될 작업은 대부분 일반적으로 공급자가 수행하는 작업이지만, 여기에는 애플리케이션 개발자와 데이터베이스 관리자를 포함하여 조직 내의 여러 역할이 수행할 수 있는 작업이 포함됩니다.

이 자습서에서는 애플리케이션을 설치하기 위해 컨슈머가 수행하는 작업을 모방하는 작업도 수행합니다.

전제 조건

  • 세션 컨텍스트가 필요하므로 동일한 SQL 명령 세션에서 모든 SQL 명령을 실행해야 합니다.

    예를 들어 Snowsight 에서 이 작업을 수행하려면 단계를 진행하면서 모든 코드를 같은 워크시트에 붙여넣으십시오. 한 섹션에서 다음 섹션으로 진행할 때 각 섹션은 이전 섹션을 기반으로 합니다.

  • ACCOUNTADMIN 역할을 사용할 수 있어야 합니다.

    이 자습서에서는 ACCOUNTADMIN 역할을 사용하여 모든 단계를 수행합니다. 하지만 일반적으로 수행 중인 작업에 대해 특별히 정의된 권한이 있는 역할을 사용하게 될 것입니다. 예를 들어 UDF와 저장 프로시저를 만드는 개발자, 역할과 권한을 관리하는 데이터베이스 관리자, Snowflake Collaboration을 사용하여 목록을 관리하는 관리자의 역할이 따로 있을 수 있습니다.

  • 비공개 목록에서 애플리케이션을 설치하려면 두 번째 Snowflake 계정에 대한 액세스 권한이 있어야 합니다. 이 계정을 사용하여 컨슈머가 애플리케이션을 설치하는 방법을 모방합니다.

    참고

    Native Apps Framework는 다른 조직의 계정과의 애플리케이션 공유를 지원하지만, 이 자습서의 목적상 두 계정은 같은 조직에 있어야 합니다.

  • 자습서를 수행하기 전에 현재 웨어하우스를 설정해야 합니다. 세션에 대해 웨어하우스를 지정해야 하며 우선 웨어하우스가 실행 중인 상태여야 세션에서 쿼리와 기타 DML 문을 실행할 수 있습니다. 자세한 내용은 USE WAREHOUSE 섹션을 참조하십시오.

애플리케이션 파일 만들기

이 섹션에서는 설정 스크립트와 매니페스트 파일을 만듭니다. Native Apps Framework에 이 두 파일이 필요합니다.

설정 스크립트

컨슈머가 자신의 계정에 애플리케이션을 설치할 때 자동으로 실행되는 SQL 스크립트입니다.

매니페스트 파일

애플리케이션에 대한 기본적인 구성 정보가 포함된 YAML 파일입니다.

이 자습서 전체에서 이 두 파일과 그 내용에 대해 자세히 알아보겠습니다. 또한 이 자습서의 후반부에 애플리케이션을 보고 게시할 때 유용할 추가 정보 파일을 만들어 보겠습니다.

설정 스크립트 만들기

설정 스크립트를 만들려면 다음을 수행하십시오.

  1. 로컬 파일 시스템에서 tutorial 이라는 폴더를 만듭니다. 이 폴더는 애플리케이션의 외부 파일용으로 사용할 루트 디렉터리가 됩니다.

    참고

    이후 섹션에서 이 폴더에 추가 파일과 하위 폴더를 추가합니다.

  2. tutorial 폴더에서 scripts 라는 하위 폴더를 만듭니다.

  3. 이 폴더에서 setup.sql 이라는 새 파일을 만듭니다.

    참고

    이 자습서에서는 설정 스크립트에 대해 이 구조와 파일 이름을 참조합니다. 하지만 자체 애플리케이션을 만들 때 이 파일의 고유한 이름과 디렉터리 구조를 선택할 수 있습니다.

  4. 이 파일에 다음 SQL 문을 추가합니다.

    -- Setup script for the Hello Snowflake! application.
    
    Copy

설정 스크립트는 비워둘 수 없으므로 이 줄을 자리 표시자로 추가합니다.

애플리케이션용 README 파일 만들기

추가 정보 파일에는 애플리케이션이 수행하는 작업에 대한 설명이 나와 있습니다. Snowsight 에서 애플리케이션을 볼 때 추가 정보가 표시됩니다.

애플리케이션의 readme.md 파일을 만들려면 다음을 수행하십시오.

  1. tutorial 폴더에서 readme.md 라는 파일을 만듭니다.

  2. 이 파일에 다음 내용을 추가합니다.

    This is the readme file for the Hello Snowflake Application!
    
    Copy

매니페스트 파일 만들기

Native Apps Framework에는 각 애플리케이션의 매니페스트 파일이 필요합니다. 매니페스트 파일에는 애플리케이션의 메타데이터 및 구성 매개 변수가 포함됩니다.

매니페스트 파일을 생성하려면 다음을 수행하십시오.

  1. tutorial 폴더에서 manifest.yml 이라는 파일을 만듭니다.

    참고

    이 파일의 이름은 manifest.yml 이어야 하며 파일은 프로젝트의 루트 수준에 있어야 합니다. 설정 스크립트를 포함한 다른 파일의 경로는 이 파일의 위치에 대한 상대 경로입니다.

  2. 이 파일에 다음 내용을 추가합니다.

    manifest_version: 1
    artifacts:
      setup_script: scripts/setup.sql
      readme: readme.md
    
    Copy

    setup_script 속성에 따라 매니페스트 파일의 위치를 기준으로 설정 스크립트의 위치가 지정됩니다. 여기에 지정된 경로 및 파일 이름은 위에서 만든 설정 스크립트의 위치와 동일해야 합니다.

    참고

    manifest_version, artifactssetup_script 속성이 필요합니다. readme 속성은 선택 사항입니다.

이 섹션에서 학습한 내용 복습하기

이 섹션의 단계를 수행한 후에는 이제 다음과 같은 디렉터리 구조가 있어야 합니다.

/tutorial
  manifest.yml
  readme.md
  /scripts/
    setup.sql
Copy

이 섹션에서는 Native Apps Framework에 필요한 설정 스크립트와 매니페스트 파일을 만드는 방법을 알아보았습니다. 이 두 파일에 모두 추가한 내용은 기본 사항이지만 모든 애플리케이션에 이러한 파일이 있어야 합니다.

Snowsight 에서 애플리케이션을 볼 때 또는 애플리케이션을 목록으로 게시할 때.표시되는 추가 정보 파일도 추가했습니다.

애플리케이션 패키지 만들기

이 섹션에서는 애플리케이션에 필요한 리소스의 컨테이너 기능을 수행할 애플리케이션 패키지를 만듭니다. 다음 작업을 수행합니다.

  • 애플리케이션 패키지를 만듭니다.

  • 애플리케이션 패키지 내에 명명된 스테이지를 만듭니다.

애플리케이션 패키지 만들기

기본적으로 애플리케이션 패키지는 애플리케이션에 대한 추가 정보를 포함하도록 확장된 Snowflake 데이터베이스입니다. 그런 의미에서는 다음을 포함하는 애플리케이션의 컨테이너입니다.

  • 공유 데이터 콘텐츠

  • 애플리케이션 파일

애플리케이션 패키지를 만들려면 다음을 수행하십시오.

  1. 역할에 CREATE APPLICATION PACKAGE 권한을 부여하려면 다음 명령을 실행하십시오.

    GRANT CREATE APPLICATION PACKAGE ON ACCOUNT TO ROLE accountadmin;
    
    Copy

    참고

    ACCOUNTADMIN 역할에 기본적으로 이 권한이 있지만 애플리케이션 패키지를 만들 수 있으려면 자신의 역할에 이 권한이 부여되었는지 확인해야 합니다.

  2. 애플리케이션 패키지를 만들려면 다음 명령을 실행하십시오.

    CREATE APPLICATION PACKAGE hello_snowflake_package;
    
    Copy

    참고

    이 명령을 실행하면 현재 컨텍스트가 HELLO_SNOWFLAKE_PACKAGE 로 변경됩니다.

  3. 애플리케이션 패키지가 성공적으로 생성되었는지 확인하려면 다음 명령을 실행하십시오.

    SHOW APPLICATION PACKAGES;
    
    Copy

    출력의 name 열에 HELLO_SNOWFLAKE_PACKAGE 가 표시될 것입니다. 이 명령에 대한 추가 정보는 SHOW APPLICATION PACKAGES 섹션을 참조하십시오.

이 섹션에서는 애플리케이션 패키지가 애플리케이션에서 사용하는 리소스의 컨테이너라는 점을 알아보았습니다. 또한 애플리케이션 패키지를 만드는 방법도 알아보았습니다.

명명된 스테이지 만들기

이 섹션에서는 Native Apps Framework에 필요한 파일을 저장할 명명된 스테이지를 만듭니다. 애플리케이션에 포함하려는 외부 코드 파일을 저장하려면 명명된 스테이지도 필요합니다. 이러한 파일을 명명된 스테이지에 업로드하면 애플리케이션을 만들 때 이들 파일을 사용할 수 있습니다.

명명된 외부 스테이지를 만들려면 다음을 수행하십시오.

  1. 이전 섹션에서 만든 애플리케이션 패키지로 컨텍스트를 설정하려면 다음 명령을 실행하십시오.

    USE APPLICATION PACKAGE hello_snowflake_package;
    
    Copy
  2. 명명된 스테이지에 필요한 스키마를 만들려면 다음 명령을 실행하십시오.

    CREATE SCHEMA stage_content;
    
    Copy
  3. 명명된 스테이지를 만들려면 다음 명령을 실행하십시오.

    CREATE OR REPLACE STAGE hello_snowflake_package.stage_content.hello_snowflake_stage
      FILE_FORMAT = (TYPE = 'csv' FIELD_DELIMITER = '|' SKIP_HEADER = 1);
    
    Copy

    이 명령으로 이전 단계에서 만든 데이터베이스와 스키마에 명명된 스테이지를 생성합니다.

    참고

    이 명령의 일부로 FILE_FORMAT = (TYPE = 'CSV' FIELD_DELIMITER = '|' SKIP_HEADER = 1); 을 포함해야 합니다. 이들은 선택 사항이 아닙니다.

이제 애플리케이션을 만드는 데 사용할 파일을 업로드할 수 있는 애플리케이션 패키지 내에 명명된 스테이지가 있습니다.

참고

이 자습서에서는 애플리케이션 패키지 내에서 명명된 스테이지를 사용하지만 필수적인 사항은 아닙니다. 애플리케이션 패키지 외부의 데이터베이스와 스키마에 있는 명명된 스테이지를 사용할 수도 있습니다.

애플리케이션 파일을 명명된 스테이지에 업로드하기

이전 섹션에서는 애플리케이션의 컨테이너 역할을 할 애플리케이션 패키지를 만들었습니다. 또한 필요한 애플리케이션 파일이 포함된 애플리케이션 패키지 내에 명명된 스테이지를 생성했습니다.

이 섹션에서는 이러한 파일을 명명된 스테이지에 업로드합니다.

애플리케이션 파일을 업로드하려면 다음 중 하나를 수행하십시오.

  • Snowsight를 사용하여 파일 스테이징하기 에 설명된 바와 같이 Snowsight 를 사용하여 애플리케이션 파일을 업로드합니다.

  • 다음 명령을 실행하여 SnowSQL을 사용해 애플리케이션 파일을 업로드합니다.

    PUT file:///<path_to_your_root_folder>/tutorial/manifest.yml @hello_snowflake_package.stage_content.hello_snowflake_stage overwrite=true auto_compress=false;
    PUT file:///<path_to_your_root_folder>/tutorial/scripts/setup.sql @hello_snowflake_package.stage_content.hello_snowflake_stage/scripts overwrite=true auto_compress=false;
    PUT file:///<path_to_your_root_folder>/tutorial/readme.md @hello_snowflake_package.stage_content.hello_snowflake_stage overwrite=true auto_compress=false;
    
    Copy

    참고

    프로젝트의 루트 폴더에 대한 경로를 반영하도록 위의 예에서 경로를 수정하십시오.

워크시트에서 다음 명령을 실행하여 파일 업로드에 성공했는지 확인합니다.

LIST @hello_snowflake_package.stage_content.hello_snowflake_stage;
Copy

이 명령을 실행하면 다음 출력에서 보듯이 나열된 각 파일이 표시될 것입니다.

+----------------------------------------+------+----------------------------------+-------------------------------+
| name                                   | size | md5                              | last_modified                 |
|----------------------------------------+------+----------------------------------+-------------------------------|
| hello_snowflake_stage/manifest.yml      |   80 | 9acab2ba718eebfa5f98f4e95c822db6 | Mon, 29 May 2023 22:51:04 GMT |
| hello_snowflake_stage/readme.md         |   64 | 1bc95f95109dc60a09b478dd95c31808 | Mon, 29 May 2023 22:51:05 GMT |
| hello_snowflake_stage/scripts/setup.sql |   64 | 7807ee1f2f27312799fc83c66ba775cf | Mon, 29 May 2023 22:51:04 GMT |
+----------------------------------------+------+----------------------------------+-------------------------------+
Copy

이 섹션에서는 명명된 스테이지에 애플리케이션 파일을 업로드했습니다. 이제 계속 애플리케이션을 개발하면서 애플리케이션 패키지에서 이러한 파일을 사용할 수 있습니다. 이후 섹션에서는 애플리케이션에 기능을 추가할 때 이 섹션으로 돌아와 이러한 파일과 새 파일의 수정된 버전을 업로드하게 됩니다.

애플리케이션 논리 추가 및 첫 번째 애플리케이션 설치하기

이 섹션에서는 코드를 추가하고 첫 번째 애플리케이션을 설치합니다. 이를 위해 다음 작업을 수행합니다.

  • 설정 스크립트에 저장 프로시저를 추가합니다.

  • 애플리케이션에 버전을 추가합니다.

  • 애플리케이션을 설치하고 테스트합니다.

설정 스크립트에 저장 프로시저 추가하기

이전 섹션에서 애플리케이션 패키지를 만들었습니다. 하지만 애플리케이션 패키지에는 아직 데이터 콘텐츠나 애플리케이션 파일이 포함되어 있지 않습니다.

이 섹션에서는 로컬 파일 시스템의 설정 스크립트에 저장 프로시저의 코드를 추가하여 애플리케이션에 저장 프로시저를 추가합니다.

설정 스크립트에 저장 프로시저를 추가하려면 다음을 수행하십시오.

  1. 이전 섹션에서 만든 setup.sql 파일의 끝에 다음 SQL 문을 추가합니다.

    CREATE APPLICATION ROLE app_public;
    CREATE SCHEMA IF NOT EXISTS core;
    GRANT USAGE ON SCHEMA core TO APPLICATION ROLE app_public;
    
    Copy

    설치 중에 설정 스크립트가 실행되면 이러한 문으로 app_public 이라는 애플리케이션 역할을 생성합니다. 애플리케이션 역할은 데이터베이스 역할과 유사하지만, 애플리케이션의 컨텍스트 내에서만 사용할 수 있습니다. 이들 역할은 애플리케이션 내의 오브젝트에 대한 액세스 권한을 부여하는 데 사용됩니다.

    또한 이 예에서는 저장 프로시저를 포함할 스키마를 생성하고 애플리케이션 역할에 스키마에 대한 USAGE 권한을 부여합니다. 애플리케이션 역할을 생성하고 오브젝트(예: 스키마)에 대한 권한을 애플리케이션 역할에 부여하는 것은 설정 스크립트 내에서 일반적인 패턴입니다.

  2. setup.sql 파일의 끝에 저장 프로시저의 코드를 추가합니다.

    CREATE OR REPLACE PROCEDURE CORE.HELLO()
      RETURNS STRING
      LANGUAGE SQL
      EXECUTE AS OWNER
      AS
      BEGIN
        RETURN 'Hello Snowflake!';
      END;
    
    Copy

    이 예에서는 문자열 “Hello Snowflake!”를 출력하는 저장 프로시저를 만듭니다.

  3. setup.sql 파일의 끝에 다음 문을 추가합니다.

    GRANT USAGE ON PROCEDURE core.hello() TO APPLICATION ROLE app_public;
    
    Copy

    이 예에서는 애플리케이션 역할에 저장 프로시저에 대한 USAGE 권한을 부여합니다.

  4. 수정된 설정 스크립트를 명명된 스테이지에 업로드합니다.

    이전 섹션 애플리케이션 파일을 명명된 스테이지에 업로드하기 를 참조하여 수정된 설정 스크립트를 업로드한 다음, 여기로 돌아와 자습서를 계속 진행하십시오.

이 섹션에서는 설정 스크립트에 저장 프로시저를 추가했습니다. 또한 애플리케이션 역할을 생성하고 이 역할에 USAGE 권한을 부여했습니다. 이렇게 하면 애플리케이션이 생성될 때 설정 스크립트로 저장 프로시저를 생성할 수 있습니다. 또한 이를 통해 애플리케이션에 저장 프로시저를 실행할 수 있는 권한을 부여합니다.

애플리케이션 설치하기

이전 섹션에서 저장 프로시저를 포함하도록 설정 스크립트를 수정했습니다.

이 섹션에서는 애플리케이션을 설치하고 Snowsight 를 사용하여 저장 프로시저를 실행합니다.

애플리케이션을 설치하려면 다음을 수행하십시오.

  1. 애플리케이션을 만들려면 다음 명령을 실행하십시오.

    CREATE APPLICATION HELLO_SNOWFLAKE_APP
      FROM APPLICATION PACKAGE HELLO_SNOWFLAKE_PACKAGE
      USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
    
    Copy
  2. 애플리케이션이 성공적으로 생성되었는지 확인하려면 다음 명령을 실행하십시오.

    SHOW APPLICATIONS;
    
    Copy

    출력의 name 열 아래에 HELLO_SNOWFLAKE_APP 이 나열될 것입니다.

  3. 이전 섹션에서 setup.sql 에 추가한 HELLO 저장 프로시저를 실행하려면 다음 명령을 실행하십시오.

    CALL core.hello();
    
    Copy

    이 명령을 실행하면 다음 출력이 표시됩니다.

    +------------------+
    | HELLO            |
    |------------------|
    | HELLO SNOWFLAKE! |
    +------------------+
    
    Copy

이 섹션에서 학습한 내용 복습하기

축하합니다! Native Apps Framework를 사용하여 첫 번째 애플리케이션을 만들고 설치하고 테스트했습니다! 애플리케이션에는 기본적인 기능만 있지만, 애플리케이션을 만드는 데 사용한 구성 요소는 더 복잡한 애플리케이션에도 동일합니다.

이 섹션에서는 다음을 완료했습니다.

  • 설정 스크립트에 저장 프로시저를 추가했습니다. 설정 스크립트는 애플리케이션이 컨슈머 계정에 설치되는 방식을 지정합니다. 이후 섹션에서는 데이터 콘텐츠 및 기타 유형의 애플리케이션 논리를 애플리케이션에 추가합니다.

  • 저장 프로시저를 실행하여 애플리케이션을 설치하고 테스트했습니다. 이후 섹션에서는 애플리케이션을 보고 테스트하는 다른 방법에 대해 알아봅니다.

애플리케이션에 데이터 콘텐츠 추가하기

이전 섹션에서는 애플리케이션에 애플리케이션 논리를 추가하는 방법을 보여주는 저장 프로시저가 포함된 애플리케이션을 만들었습니다.

이 섹션에서는 HELLO_SNOWFLAKE_PACAKAGE 애플리케이션 패키지 내에 데이터베이스를 생성하고 이 데이터베이스를 애플리케이션과 공유할 권한을 부여하여 애플리케이션에 데이터 콘텐츠를 포함합니다.

애플리케이션과 공유할 데이터베이스 만들기

이 섹션에서는 애플리케이션과 데이터 콘텐츠를 공유하는 방법을 알아봅니다. 특히, 애플리케이션 패키지의 테이블을 공유합니다.

애플리케이션 패키지에 테이블을 생성하고 샘플 데이터를 삽입하려면 다음을 수행하십시오.

  1. 컨텍스트를 애플리케이션 패키지로 설정하려면 다음 명령을 실행하십시오.

    USE APPLICATION PACKAGE hello_snowflake_package;
    
    Copy
  2. 테이블을 만들고 공유 데이터 콘텐츠를 추가하려면 다음 명령을 실행하십시오.

    CREATE SCHEMA IF NOT EXISTS shared_data;
    CREATE TABLE IF NOT EXISTS accounts (ID INT, NAME VARCHAR, VALUE VARCHAR);
    INSERT INTO accounts VALUES
      (1, 'Nihar', 'Snowflake'),
      (2, 'Frank', 'Snowflake'),
      (3, 'Benoit', 'Snowflake'),
      (4, 'Steven', 'Acme');
    
    Copy
  3. 데이터 콘텐츠가 테이블에 올바르게 삽입되었는지 확인하려면 다음 명령을 실행하십시오.

    SELECT * FROM accounts;
    
    Copy

    이 명령의 출력에는 ID, NAME, VALUE 라는 열이 3개 표시됩니다. 다음 출력 예와 같이 각 행에 대한 데이터도 표시됩니다.

    +----+----------+-----------+
    | ID | NAME     | VALUE     |
    |----+----------+-----------|
    |  1 | Nihar    | Snowflake |
    |  2 | Frank    | Snowflake |
    |  3 | Benoit   | Snowflake |
    |  4 | Steven   | Acme      |
    +----+----------+-----------+
    
    Copy
  4. ACCOUNTS 테이블에 대한 사용 권한을 부여하려면 다음 명령을 실행하십시오.

    GRANT USAGE ON SCHEMA shared_data TO SHARE IN APPLICATION PACKAGE hello_snowflake_package;
    GRANT SELECT ON TABLE accounts TO SHARE IN APPLICATION PACKAGE hello_snowflake_package;
    
    Copy

    애플리케이션 패키지 내의 오브젝트에 대해 이러한 권한을 부여하면 애플리케이션 패키지에서 설치된 모든 애플리케이션에서 accounts 테이블을 사용할 수 있습니다.

    참고

    애플리케이션의 컨슈머와 공유하려는 애플리케이션 패키지 내의 각 오브젝트에 대한 USAGE 권한을 부여해야 합니다.

데이터 콘텐츠에 액세스하기 위한 뷰 추가하기

이 섹션에서는 애플리케이션이 이전 하위 섹션에서 만든 ACCOUNTS 테이블의 데이터에 액세스할 수 있도록 해주는 뷰를 추가하는 설정 스크립트를 업데이트합니다.

데이터 콘텐츠에 액세스하는 뷰를 추가하려면 다음을 수행하십시오.

  1. 뷰에 대한 스키마를 생성하려면 설정 스크립트에 다음을 추가하십시오.

    CREATE OR ALTER VERSIONED SCHEMA code_schema;
    GRANT USAGE ON SCHEMA code_schema TO APPLICATION ROLE app_public;
    
    Copy

    이러한 문으로 뷰를 포함하고 스키마에 대해 USAGE 권한을 부여하도록 버전이 지정된 스키마를 생성합니다. Native Apps Framework는 버전이 지정된 스키마를 사용하여 다양한 버전의 저장 프로시저와 함수를 처리합니다.

  2. 뷰를 만들려면 설정 스크립트에 다음을 추가하십시오.

    CREATE VIEW IF NOT EXISTS code_schema.accounts_view
      AS SELECT ID, NAME, VALUE
      FROM shared_data.accounts;
    GRANT SELECT ON VIEW code_schema.accounts_view TO APPLICATION ROLE app_public;
    
    Copy

    이러한 문으로 code_schema 스키마에 뷰를 생성하고 뷰에 대해 필요한 권한을 애플리케이션 역할에 부여합니다.

  3. 수정된 설정 스크립트를 명명된 스테이지에 업로드합니다.

    이전 섹션 애플리케이션 파일을 명명된 스테이지에 업로드하기 를 참조하여 이 섹션에서 업데이트한 파일을 업로드한 다음, 여기로 돌아와 자습서를 계속 진행하십시오.

업데이트된 애플리케이션 테스트하기

이 하위 섹션에서는 애플리케이션을 다시 설치하고 설치된 애플리케이션 내에서 뷰를 사용하여 예제 테이블을 쿼리합니다.

업데이트된 애플리케이션을 테스트하려면 다음을 수행하십시오.

  1. 기존 애플리케이션을 삭제하려면 다음 명령을 실행하십시오.

    DROP APPLICATION hello_snowflake_app;
    
    Copy
  2. 애플리케이션의 새 버전을 만들려면 다음 명령을 실행하십시오.

    CREATE APPLICATION hello_snowflake_app
      FROM APPLICATION PACKAGE hello_snowflake_package
      USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
    
    Copy
  3. 뷰가 올바르게 작동하는지 확인하려면 다음 명령을 실행하십시오.

    SELECT * FROM code_schema.accounts_view;
    
    Copy

    이 명령의 출력은 예제 데이터를 설정할 때 실행했던 SELECT 명령과 동일합니다.

    +----+----------+-----------+
    | ID | NAME     | VALUE     |
    |----+----------+-----------|
    |  1 | Nihar    | Snowflake |
    |  2 | Frank    | Snowflake |
    |  3 | Benoit   | Snowflake |
    |  4 | Steven   | Acme      |
    +----+----------+-----------+
    
    Copy

이 섹션에서 학습한 내용 복습하기

이 섹션에서는 다음 작업을 수행하여 애플리케이션에 공유 데이터 콘텐츠를 포함하는 방법을 알아보았습니다.

  • 애플리케이션 패키지 내에서 ACCOUNTS 테이블을 만들고 테이블에 데이터를 삽입합니다.

  • 애플리케이션 패키지에 ACCOUNTS 테이블에 대한 참조 사용 권한을 부여합니다.

  • 애플리케이션 패키지에서 ACCOUNTS 테이블을 참조하는 스키마와 뷰를 생성합니다.

  • 애플리케이션 역할에 스키마에 대한 사용 권한을 부여합니다.

  • 애플리케이션 역할에 뷰에 대한 선택 권한을 부여합니다.

또한 애플리케이션 설치 시 다음을 수행하도록 설정 스크립트를 업데이트했습니다.

  • 애플리케이션이 예제 데이터에 액세스하는 데 사용하는 스키마와 뷰를 생성합니다.

  • 애플리케이션 역할에 스키마에 대한 사용 권한을 부여합니다.

  • 애플리케이션 역할에 뷰에 대한 선택 권한을 부여합니다.

HELLO_SNOWFLAKE_DATA 데이터베이스를 설정하려고 실행한 명령은 설정 스크립트에서 매우 유사합니다.

애플리케이션에 Python 코드 추가하기

이 섹션에서는 Python 코드를 추가하여 애플리케이션 논리를 향상함으로써 애플리케이션의 기능을 확장합니다. 이 섹션에서는 Python 코드를 다음으로 포함합니다.

  • 설정 스크립트의 자체 포함 함수인 인라인 Python UDF.

  • 설정 스크립트 외부의 Python 파일을 참조하는 Python UDF.

참고

이 섹션에서는 Python을 사용하는 예제를 소개하지만 Java와 JavaScript에도 동일한 기술을 적용할 수 있습니다.

인라인 Python 함수를 UDF(사용자 정의 함수)로 추가하기

이 섹션에서는 Python 함수를 UDF로 추가합니다.

애플리케이션에 Python UDF를 포함하려면 설정 파일에 다음 코드를 추가하십시오.

CREATE OR REPLACE FUNCTION code_schema.addone(i int)
RETURNS INT
LANGUAGE PYTHON
RUNTIME_VERSION = '3.8'
HANDLER = 'addone_py'
AS
$$
def addone_py(i):
  return i+1
$$;

GRANT USAGE ON FUNCTION code_schema.addone(int) TO APPLICATION ROLE app_public;
Copy

이러한 명령은 애플리케이션이 설치될 때 다음 작업을 수행합니다.

  • code_schema 라는 버전 지정 스키마를 생성합니다.

  • APP_PUBLIC 애플리케이션 역할에 스키마에 대한 사용 권한을 부여합니다.

  • code_schema 스키마에서 ADDONE() UDF를 만듭니다.

  • APP_PUBLIC 애플리케이션 역할에 함수에 대한 사용 권한을 부여합니다.

위의 코드 샘플에서 생성된 스키마는 버전이 지정된 스키마입니다. 사용자 정의 함수와 저장 프로시저는 일반 스키마 대신 버전이 지정된 스키마에서 정의해야 합니다.

외부 Python 모듈 추가하기

애플리케이션에 외부 Python 모듈을 추가하려면 다음을 수행하십시오.

  1. 설정 스크립트에 다음 Python 함수를 추가합니다.

    CREATE or REPLACE FUNCTION code_schema.multiply(num1 float, num2 float)
      RETURNS float
      LANGUAGE PYTHON
      RUNTIME_VERSION=3.8
      IMPORTS = ('/python/hello_python.py')
      HANDLER='hello_python.multiply';
    
    GRANT USAGE ON FUNCTION code_schema.multiply(FLOAT, FLOAT) TO APPLICATION ROLE app_public;
    
    Copy

    이전 예와 마찬가지로, 이러한 문으로 스키마에서 Python UDF를 생성하고 애플리케이션 역할에 함수에 대한 권한을 부여합니다. 하지만 이 예에는 만들 외부 Python 파일을 참조하는 IMPORTS 절이 포함됩니다.

  2. tutorial 폴더에서 python 이라는 하위 폴더를 만듭니다.

  3. python 하위 폴더에서 hello_python.py 라는 파일을 만듭니다.

  4. 다음 코드를 hello_python.py 파일에 추가합니다.

    def multiply(num1, num2):
      return num1*num2
    
    Copy

    이 외부 파일에 정의된 함수는 설정 스크립트에 정의된 인라인 함수와 일치합니다.

이 섹션에서는 애플리케이션에 Python UDF를 추가했습니다. 이 UDF는 애플리케이션 패키지에서 참조할 수 있는 외부 Python 모듈을 가리킵니다.

업데이트된 애플리케이션 설치 및 테스트하기

  1. 새 파일과 수정된 파일을 명명된 스테이지에 업로드합니다.

    애플리케이션 파일을 명명된 스테이지에 업로드하기 섹션을 참조하여 외부 Python 파일을 업로드한 다음, 여기로 돌아와 자습서를 계속 진행하십시오.

    SnowSQL을 사용하여 파일을 업로드하는 경우 다음 명령을 실행하십시오.

    PUT file:///<path_to_your_root_folder>/tutorial/scripts/setup.sql @hello_snowflake_package.stage_content.hello_snowflake_stage/scripts overwrite=true auto_compress=false;
    PUT file:///<path_to_your_root_folder>/tutorial/python/hello_python.py @hello_snowflake_package.stage_content.hello_snowflake_stage/python overwrite=true auto_compress=false;
    
    Copy
  2. 기존 애플리케이션을 제거하려면 다음 명령을 실행하십시오.

    DROP APPLICATION hello_snowflake_app;
    
    Copy
  3. 애플리케이션의 새 버전을 만들려면 다음 명령을 실행하십시오.

    CREATE APPLICATION hello_snowflake_app
      FROM APPLICATION PACKAGE hello_snowflake_package
      USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
    
    Copy
  4. Python 저장 프로시저를 테스트하려면 다음 명령을 실행하십시오.

    SELECT code_schema.addone(1);
    
    Copy
  5. 참조된 Python 함수를 테스트하려면 다음 명령을 실행하십시오.

    SELECT code_schema.multiply(1,2);
    
    Copy

이 섹션에서 학습한 내용 복습하기

이 섹션에서는 애플리케이션에 다음과 같은 새 기능을 추가했습니다.

  • 인라인 UDF로 정의된 Python 함수.

  • 외부 코드를 참조하는 UDF로 정의된 Python 함수.

또한 애플리케이션의 업데이트된 버전을 설치하고 각 함수를 실행하여 이러한 각 예제를 테스트했습니다.

애플리케이션에 Streamlit 앱 추가하기

이 섹션에서는 Streamlit 앱을 추가하여 애플리케이션을 완료합니다. Streamlit은 데이터 과학 및 머신 러닝 애플리케이션을 개발하기 위한 오픈 소스 Python 프레임워크입니다. 사용자 상호 작용 및 데이터 시각화를 추가하기 위해 Native App 내에 Streamlit 앱을 포함할 수 있습니다.

Streamlit 앱 파일 만들기

Streamlit 앱을 만들려면 다음을 수행하십시오.

  1. tutorial 폴더에서 streamlit 이라는 하위 폴더를 만듭니다.

  2. streamlit 폴더에서 hello_snowflake.py 라는 파일을 만듭니다.

  3. 이 파일에 다음 코드를 추가합니다.

    # Import python packages
    import streamlit as st
    from snowflake.snowpark.context import get_active_session
    
    # Write directly to the app
    st.title("Hello Snowflake - Streamlit Edition")
    st.write(
       """The following data is from the accounts table in the application package.
          However, the Streamlit app queries this data from a view called
          code_schema.accounts_view.
       """
    )
    
    # Get the current credentials
    session = get_active_session()
    
    #  Create an example data frame
    data_frame = session.sql("SELECT * FROM code_schema.accounts_view;")
    
    # Execute the query and convert it into a Pandas data frame
    queried_data = data_frame.to_pandas()
    
    # Display the Pandas data frame as a Streamlit data frame.
    st.dataframe(queried_data, use_container_width=True)
    
    Copy

설정 스크립트에 Streamlit 오브젝트 추가하기

애플리케이션에서 Streamlit 오브젝트를 만들려면 다음을 수행하십시오.

  1. setup.sql 파일 끝에 다음 문을 추가하여 Streamlit 오브젝트를 생성합니다.

    CREATE STREAMLIT code_schema.hello_snowflake_streamlit
      FROM '/streamlit'
      MAIN_FILE = '/hello_snowflake.py'
    ;
    
    Copy

    이 문으로 코어 스키마에 STREAMLIT 오브젝트를 생성합니다.

  2. setup.sql 파일 끝에 다음 문을 추가하여 APP_PUBLIC 역할이 Streamlit 오브젝트에 액세스할 수 있도록 허용합니다.

    GRANT USAGE ON STREAMLIT code_schema.hello_snowflake_streamlit TO APPLICATION ROLE app_public;
    
    Copy
  3. 새 애플리케이션 파일과 업데이트된 애플리케이션 파일을 명명된 스테이지에 업로드합니다.

    이전 섹션 애플리케이션 파일을 명명된 스테이지에 업로드하기 를 참조하여 방금 생성한 Streamlit 파일을 업로드한 다음, 여기로 돌아와 자습서를 계속 진행하십시오.

    SnowSQL을 사용하여 파일을 업로드하는 경우 다음 명령을 실행하십시오.

    PUT file:///<path_to_your_root_folder>/tutorial/scripts/setup.sql @hello_snowflake_package.stage_content.hello_snowflake_stage/scripts overwrite=true auto_compress=false;
    PUT file:///<path_to_your_root_folder>/tutorial/streamlit/hello_snowflake.py @hello_snowflake_package.stage_content.hello_snowflake_stage/streamlit overwrite=true auto_compress=false;
    
    Copy

업데이트된 애플리케이션 설치하기

  1. 수정된 설정 스크립트를 명명된 스테이지에 업로드합니다.

    이전 섹션 애플리케이션 파일을 명명된 스테이지에 업로드하기 를 참조하여 수정된 설정 스크립트를 업로드한 다음, 여기로 돌아와 자습서를 계속 진행하십시오.

  2. 이전 애플리케이션을 제거하려면 다음 명령을 실행하십시오.

    DROP APPLICATION hello_snowflake_app;
    
    Copy
  3. 애플리케이션의 새 버전을 만들려면 다음 명령을 실행하십시오.

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

이 섹션에서 학습한 내용 복습하기

이 섹션에서는 다음을 수행하여 애플리케이션에 Streamlit 앱을 추가했습니다.

  • Streamlit 앱을 만듭니다.

애플리케이션에 버전 추가하기

이 섹션에서는 이 자습서에서 추가한 모든 기능을 포함하는 버전을 애플리케이션에 추가합니다. 이를 위해 ALTER APPLICATION PACKAGE 명령을 사용하여 이전에 만든 애플리케이션 패키지를 업데이트합니다.

애플리케이션에 버전을 추가하려면 다음을 수행하십시오.

  1. HELLO_SNOWFLAKE_PACKAGE 애플리케이션 패키지에 버전을 추가하려면 다음 명령을 실행하십시오.

    ALTER APPLICATION PACKAGE hello_snowflake_package
      ADD VERSION v1_0 USING '@hello_snowflake_package.stage_content.hello_snowflake_stage';
    
    Copy

    이 명령에서는 이전 섹션에서 명명된 스테이지에 업로드한 애플리케이션 파일을 기반으로 버전을 추가하도록 애플리케이션 패키지를 수정했습니다.

    참고

    VERSION에 지정된 값은 숫자 값이나 문자열이 아닌 레이블입니다. 자세한 내용은 ALTER APPLICATION PACKAGE 섹션을 참조하십시오.

    참고

    추가한 새 버전의 패치 번호는 0 에서 자동으로 생성됩니다. 어떤 버전에 대해 패치를 계속 추가함에 따라 번호가 자동으로 증가합니다. 하지만 새 버전(예: V1_1)을 만들 때 해당 버전의 패치 번호는 0 으로 재설정됩니다.

  2. 버전이 애플리케이션 패키지에 추가되었는지 확인하려면 다음 명령을 실행하십시오.

    SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
    
    Copy

    이 명령은 다음 출력과 같이 버전에 대한 추가 정보를 표시합니다.

    +---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------+
    | version | patch | label | comment | created_on                    | dropped_on | log_level | trace_level | state | review_status |
    |---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------|
    | V1_0    |     0 | NULL  | NULL    | 2023-05-30 10:33:39.768 -0700 | NULL       | OFF       | OFF         | READY | NOT_REVIEWED  |
    +---------+-------+-------+---------+-------------------------------+------------+-----------+-------------+-------+---------------+
    
    Copy

    자세한 내용은 SHOW VERSIONS 섹션을 참조하십시오.

  3. 어떤 버전을 기반으로 애플리케이션을 설치하려면 다음 명령을 실행하십시오.

    DROP APPLICATION hello_snowflake_app;
    CREATE APPLICATION hello_snowflake_app
      FROM APPLICATION PACKAGE hello_snowflake_package
      USING VERSION V1_0;
    
    Copy

이 섹션에서는 애플리케이션 버전을 포함하도록 애플리케이션 패키지를 수정했습니다.

Snowsight에서 애플리케이션 보기

이 섹션에서는 Snowsight 에서 애플리케이션을 확인해 봅니다. 이전 섹션에서는 SQL 문을 사용하여 애플리케이션에 대한 정보를 테스트하거나 찾았습니다. 하지만 Snowsight 에서 애플리케이션에 대한 정보를 볼 수도 있습니다. 배포된 Streamlit 애플리케이션을 볼 수도 있습니다.

Snowsight 에서 애플리케이션을 보려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. ACCOUNTADMIN 역할로 전환합니다.

  3. Data Products » Apps 를 선택합니다.

  4. HELLO_SNOWFLAKE_APP 를 선택합니다.

    Read Me 탭에는 이전 섹션에서 readme.md 파일에 추가한 내용이 표시됩니다.

  5. Streamlit 앱을 보려면 HELLOSNOWFLAKE_STREAMLIT 을 선택하십시오.

    HELLO_SNOWFLAKE_DATA 데이터베이스의 내용은 Streamlit 데이터 프레임에 표시됩니다.

  6. Projects » Worksheets 를 선택하여 Snowflake 워크시트에서 애플리케이션을 엽니다.

  7. HELLO_SNOWFLAKE_APP 을 선택한 다음 목록에서 스키마를 선택합니다.

    스키마 목록은 자습서를 따라 진행하는 도중에 애플리케이션에 추가한 스키마에 해당합니다.

Snowflake 워크시트에서 SQL 명령을 사용하여 애플리케이션을 테스트할 수 있습니다. 예를 들어 이전 섹션에서 실행한 명령을 다시 실행하여 애플리케이션에 추가한 기능을 테스트할 수 있습니다.

LIST @hello_snowflake_package.stage_content.hello_snowflake_stage;
CALL core.hello();
SELECT * FROM code_schema.accounts_view;
SELECT code_schema.addone(10);
SELECT code_schema.multiply(2,3);
Copy

참고

Snowsight 에서 다른 페이지로 이동하면 이 워크시트에 추가한 모든 SQL 문이 손실됩니다.

애플리케이션 게시 및 설치하기

이 섹션에서는 애플리케이션 패키지를 데이터 콘텐츠로 사용하는 비공개 목록을 생성하여 애플리케이션을 게시합니다. 목록을 생성한 후 다른 계정으로 로그인하여 목록을 설치합니다.

기본 릴리스 지시문 설정하기

애플리케이션 패키지에 대한 목록을 생성하려면 먼저 릴리스 지시문을 설정해야 합니다. 릴리스 지시문은 컨슈머가 사용할 수 있는 애플리케이션의 버전을 지정합니다.

이 자습서에서는 이전 섹션에서 추가한 버전을 사용하여 기본 릴리스 지시문을 설정합니다.

애플리케이션 패키지에 대한 기본 릴리스 지시문을 설정하려면 다음을 수행하십시오.

  1. 애플리케이션 패키지에 대해 정의된 버전과 패치를 보려면 다음 명령을 실행하십시오.

    SHOW VERSIONS IN APPLICATION PACKAGE hello_snowflake_package;
    
    Copy

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

  2. 기본 릴리스 지시문을 버전 v1_0 및 패치 0 으로 설정하려면 다음 명령을 실행하십시오.

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

    이 명령의 출력은 다음 예에 나와 있습니다.

    +-----------------------------------------------------------+
    | status                                                    |
    |-----------------------------------------------------------|
    | Default release directive set to version 'V1_0', patch 0. |
    +-----------------------------------------------------------+
    
    Copy

이 섹션에서는 애플리케이션 패키지에 어떤 버전과 패치가 있는지 확인했습니다. 이 정보를 사용하여 애플리케이션 패키지에 대한 기본 릴리스 지시문을 정의했습니다.

애플리케이션용 목록 만들기

이제 애플리케이션 패키지에 대한 릴리스 지시문을 지정했으므로 목록을 만들고 애플리케이션 패키지를 목록의 데이터 콘텐츠로 추가합니다. 이를 통해 다른 Snowflake 사용자와 애플리케이션을 공유하고 자신의 계정에 애플리케이션을 설치하고 사용할 수 있습니다.

애플리케이션용 목록을 만들려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. 탐색 메뉴에서 Data Products » Provider Studio 를 선택합니다.

  3. + Listing 을 선택합니다. 목록 만들기 윈도우가 열립니다.

  4. 목록 이름을 입력합니다.

  5. In the Who can discover the listing 섹션에서 Only specified consumers 를 선택하여 목록을 특정 계정과 비공개로 공유합니다.

  6. + Select 를 클릭하여 목록에 대한 애플리케이션 패키지를 선택합니다.

  7. 목록에 대한 설명을 입력합니다.

  8. Add consumer accounts 섹션에서 목록에서 애플리케이션을 설치하는 컨슈머 경험을 테스트하기 위해 사용 중인 계정의 계정 식별자를 추가합니다.

이 섹션에서는 애플리케이션 패키지를 공유 데이터 콘텐츠로 포함하는 비공개 목록을 만들었습니다.

애플리케이션 설치하기

이 섹션에서는 이전 섹션에서 만든 목록과 연결된 애플리케이션을 설치합니다. 컨슈머가 자신의 계정에 애플리케이션을 설치하는 방법을 모방하는 다른 계정에 목록을 설치합니다.

목록에서 애플리케이션을 설치하려면 다음을 수행하십시오.

  1. Snowsight 에 로그인합니다.

  2. 탐색 메뉴에서 Data Products » Apps 를 선택합니다.

  3. Recently shared with you 아래에서 목록의 타일을 선택합니다.

  4. Get 을 선택합니다.

  5. 고객에게 표시되는 애플리케이션의 이름을 입력합니다. 이 자습서에서는 “Hello Snowflake App”을 사용합니다.

  6. 애플리케이션을 설치하려는 웨어하우스를 선택합니다.

  7. Get 을 선택합니다.

  8. Open 을 선택하여 목록을 보거나 Done 을 선택하여 종료합니다.

이 섹션에서는 다른 Snowflake 사용자와 애플리케이션을 공유할 수 있는 목록을 게시하고 설치하는 방법을 알아보았습니다.

자세히 알아보기

축하합니다! 이 자습서를 마쳤을 뿐만 아니라 Native Apps Framework를 사용하여 애플리케이션의 개발 및 게시 수명 주기를 거치며 실습해 보았습니다.

그 과정에서 다음 작업을 수행했습니다.