버전 스키마를 사용하여 여러 버전에 걸쳐 앱 오브젝트 관리하기¶
이 항목에서는 Snowflake Native App 을 설치 및 업그레이드할 때 버전 스키마를 사용하여 앱 상태를 관리하는 방법에 대해 설명합니다.
버전 스키마 정보¶
버전 스키마는 한 버전에서 다른 버전으로 상태 비저장 오브젝트를 처리하도록 설계된 특수한 유형의 데이터베이스 스키마입니다.
버전 스키마에는 특정 버전과 연결된 앱의 오브젝트에 대한 메타데이터가 포함되어 있습니다. 버전 고정은 앱이 해당 오브젝트와 연관된 작업, 쿼리 등을 파악할 수 있도록 하는 버전 스키마의 기능입니다.
예를 들어 버전이 지정된 스키마의 오브젝트가 쿼리를 실행하면 해당 쿼리는 쿼리를 실행하는 앱의 버전에 “고정”됩니다.
버전 고정은 앱을 새 버전으로 업그레이드할 때 중요합니다. 앱의 V1이 완료하는 데 시간이 오래 걸리는 복잡한 쿼리를 실행하는 상황을 생각해 보십시오.
이 쿼리가 실행되는 동안 업그레이드가 발생하면 앱의 업그레이드 상태가 COMPLETE
로 변경되고 앱이 v2
로 업그레이드됩니다. 이전 버전 상태는 v1
버전의 모든 작업이 완료될 때까지 FINALIZING
으로 변경됩니다.
앱의 업그레이드 상태에 대한 자세한 내용은 상태 업그레이드하기 섹션을 참조하십시오.
버전 스키마에 대한 제한 사항¶
버전이 변경된 스키마에서는 Snowpark Container Services가 지원되지 않습니다.
버전 스키마는 애플리케이션 오브젝트의 컨텍스트 내에서만 사용할 수 있습니다. 설정 스크립트 내에서만 생성됩니다. 앱의 각 버전에는 고유한 설정 스크립트가 있으며 해당 버전에 맞는 버전별 스키마가 포함되어 있습니다.
버전이 지정된 스키마는 애플리케이션 패키지의 설정 스크립트 내에서만 사용할 수 있습니다. 애플리케이션 오브젝트의 컨텍스트 내에서만 만들 수 있습니다.
버전이 지정된 스키마에서는 작업이 지원되지 않습니다. 예를 들어 공급자는 버전이 지정된 스키마를 만들거나 변경할 때 태그를 포함할 수 없습니다. 그러나 공급자는 동일한 앱에서 버전이 지정된 스키마 내의 태그 오브젝트만 적용하는 한 버전이 지정된 스키마 내에서 태그를 사용할 수 있습니다.
태그 및 마스킹 정책은 버전이 지정된 스키마에서는 지원되지 않습니다.
권한 부여 및 향후 권한 부여는 버전이 변경된 스키마에서는 지원되지 않습니다.
버전이 지정된 스키마는 복제본 작업의 원본이나 대상으로 사용할 수 없습니다.
버전이 지정된 스키마 삭제는 지원되지 않습니다. 버전 스키마를 삭제하면 스키마에 포함된 모든 버전의 오브젝트가 삭제되며 이전 버전 또는 앱 패치를 대상으로 실행되는 쿼리에 영향을 미칩니다.
참고
앱의 설정 스크립트 내에서 애플리케이션 역할, 작업, 태그, 마스킹 정책 및 Snowpark Container Services를 사용하려면 일반 스키마에서 생성해야 합니다.
버전 스키마의 내부 구현¶
내부적으로 버전이 지정된 스키마에는 앱의 각 버전에 해당하는 하위 스키마가 포함되어 있습니다.
그러나 이러한 하위 스키마는 애플리케이션 오브젝트 내에서 컨슈머가 직접 액세스할 수 없습니다. 컨슈머는 계정에 설치한 앱의 버전에 해당하는 버전 스키마 내의 오브젝트만 볼 수 있습니다.
예를 들어, 컨슈머가 SHOW OBJECTS 명령을 사용하여 버전이 지정된 스키마에서 오브젝트를 보는 경우 현재 사용 중인 버전의 오브젝트만 볼 수 있습니다.
설정 스크립트를 작성할 때 공급자는 CREATE OR REPLACE 또는 CREATE IF NOT EXISTS 를 사용하여 버전이 지정된 스키마에서 오브젝트를 다시 생성해야 합니다. 이는 내부적으로 앱의 각 버전이 지정된 스키마의 하위 스키마 내에 고유한 오브젝트를 가지고 있기 때문에 중요합니다.
설정 스크립트에서 버전이 있는 스키마와 버전이 없는 스키마 사용하기¶
업그레이드 중 앱의 상태를 관리하기 위해 Snowflake Native App Framework 에서는 버전별 스키마를 사용합니다. 버전 스키마는 일반 데이터베이스 스키마와 유사하지만 여러 애플리케이션 버전에서 생성된 오브젝트의 여러 버전을 처리하는 기능을 추가했습니다.
버전 스키마는 애플리케이션 오브젝트의 컨텍스트 내에서만 사용할 수 있습니다. 설정 스크립트 내에서만 생성됩니다. 앱의 각 버전에는 고유한 설정 스크립트가 있으며 해당 버전에 맞는 버전별 스키마가 포함되어 있습니다.
새 버전의 앱을 개발할 때 공급자는 설정 스크립트를 사용하여 앱이 생성하는 오브젝트의 변경 사항을 설명해야 합니다.
다음 예는 설정 스크립트에서 버전 스키마와 일반 스키마를 모두 사용하여 상태 저장 및 상태 저장 구성 요소를 생성하는 일반적인 상황을 보여줍니다.
CREATE OR ALTER VERSIONED SCHEMA stateless_objects;
CREATE OR REPLACE PROCEDURE stateless_object.py_echo_proc(STR string)
RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION=3.8
PACKAGES=('snowflake-snowpark-python')
HANDLER='echo.echo_proc'
IMPORTS=('/libraries/echo.py');
CREATE OR ALTER SCHEMA stateful_object;
CREATE TABLE stateful_object.config_props
prop_name STRING;
prop_value STRING;
time_stamp TIMESTAMP;
버전 스키마 만들기¶
설정 스크립트로 버전이 지정된 스키마를 만들려면 다음 예와 같이 CREATE OR ALTER VERSIONED SCHEMA 명령을 사용합니다.
CREATE OR ALTER VERSIONED SCHEMA version_schema;
참고
이 명령의 CREATE OR ALTER 버전을 항상 포함해야 버전이 지정된 스키마가 여러 버전과 패치에서 호환됩니다.
상태 저장 오브젝트에 버전이 없는 스키마 사용하기¶
앱 내의 오브젝트는 여러 버전에 걸쳐 상태를 보존해야 할 수 있습니다. 예를 들어 앱이 실행되는 동안 수집된 구성 데이터나 데이터는 보존해야 할 수 있습니다.
이러한 유형의 오브젝트는 일반 데이터베이스 스키마에 있어야 하며 초기 설치 및 업그레이드 중에 유지되도록 만들어야 합니다.
다음 예는 설정 스크립트에서 상태 저장 오브젝트를 만드는 방법을 보여줍니다.
CREATE SCHEMA IF NOT EXISTS stateful_object;
CREATE TABLE IF NOT EXISTS stateful_object.config (
config_param STRING,
config_value STRING,
default_value STRING,
modified_on TIMESTAMP);
ALTER TABLE stateful_object.config
ADD COLUMN IF NOT EXISTS modified_on TIMESTAMP;
이 예에서 설정 스크립트는 앱의 한 버전에서 다른 버전으로 유지되는 구성 테이블을 정의합니다. 이전 버전의 애플리케이션에 modified_on
열이 없는 경우 설정 스크립트는 먼저 테이블을 완전히 생성하거나(초기 설치의 경우) 열을 추가하여 기존 테이블을 수정하려고 시도합니다(업그레이드의 경우).
상태 비저장 오브젝트에 버전 스키마 사용하기¶
앱 내의 일부 오브젝트는 애플리케이션의 버전 간에 상태가 유지되지 않습니다. 예를 들어 저장 프로시저, 함수 등 애플리케이션 로직을 정의하는 코드를 사용자 데이터나 상태 손실 없이 설정 스크립트에서 완전히 다시 생성할 수 있습니다.
Snowflake는 이러한 오브젝트를 버전이 지정된 스키마에 포함할 것을 권장합니다.
다음 예는 버전이 지정된 스키마 내에서 UDF 를 만드는 방법을 보여줍니다.
CREATE OR ALTER VERSIONED SCHEMA stateless_object;
CREATE FUNCTION IF NOT EXISTS stateless_object.add(x int, y int)
RETURNS INT
LANGUAGE SQL
AS $$ x + y $$;
버전 고정¶
버전 스키마에는 특정 버전과 연결된 Snowflake Native App 의 오브젝트에 대한 메타데이터가 포함되어 있습니다. 버전 고정은 앱이 해당 오브젝트와 연관된 작업, 쿼리 등을 파악할 수 있도록 하는 버전 스키마의 기능입니다.
예를 들어 버전이 지정된 스키마의 오브젝트가 쿼리를 실행하면 해당 쿼리는 쿼리를 실행하는 앱의 버전에 “고정”됩니다.
버전 고정은 앱을 새 버전으로 업그레이드할 때 중요합니다. 앱의 V1이 완료하는 데 시간이 오래 걸리는 복잡한 쿼리를 실행하는 상황을 생각해 보십시오. 이 쿼리가 실행 중인 동안 업그레이드가 발생하면 쿼리가 완료될 때까지 앱이 업그레이드되지 않습니다.