배포된 Streamlit 앱 편집하기¶
Snowsight 에 Streamlit 앱을 배포한 후 Snowsight 또는 SQL 명령을 사용하여 앱 코드와 종속성을 모두 편집할 수 있습니다. 변경 사항이 적용되는 방식은 런타임 환경과 앱이 생성된 방식에 따라 다릅니다.
참고
ROOT_LOCATION 매개 변수(레거시 앱)로 생성된 앱은 편집 기능이 제한되므로 전체 기능을 위해 FROM 매개 변수를 사용하도록 변환해야 합니다. 자세한 내용은 다양한 유형의 Streamlit 오브젝트 이해하기 섹션을 참조하십시오.
이 페이지에서는 FROM 매개 변수로 만든 앱만 다룹니다.
Container Runtime 및 Warehouse Runtime 환경은 모두 여러 사용자가 동시에 동일한 앱을 편집할 때 가능한 경합 조건의 대상이 됩니다. 자세한 내용과 모범 사례는 아래 공동 편집 고려 사항 섹션을 참조하세요.
메서드 편집하기¶
Snowsight 에서 브라우저 내 편집기를 통해 앱을 편집하거나 SQL 명령을 사용하여 파일을 업로드할 수 있습니다.
Snowsight 에 로그인합니다.
탐색 메뉴에서 Projects » :ui:`Streamlit`을 선택한 다음 Streamlit 앱을 선택합니다.
오른쪽 위 모서리에서 Edit 을 선택합니다.
파일 탐색기에서 편집할 새 파일을 선택하거나 만듭니다.
편집기 창에서 변경을 수행합니다.
변경 사항은 몇 초 후에 앱의 소스 위치에 자동으로 저장됩니다.
선택 사항: 개인 키가 암호화된 경우 암호 구문을 설정하려면 개인 키 암호 구문에 대한 환경 변수를 설정합니다. Run 을 선택합니다.
변경 사항이 저장될 때까지 몇 초를 기다리지 않으려면 :ui:`Run`을 선택하여 변경 사항을 즉시 복사하면 됩니다.
앱에서 Warehouse Runtime을 사용하는 경우 뷰어는 :ui:`Run`을 실행하여 변경 사항을 앱 인스턴스에 복사합니다. 앱이 Container Runtime을 사용하는 경우 변경 사항은 라이브 앱의 소스에 직접 저장되며 다음에 앱과 상호 작용할 때 모든 뷰어에게 표시됩니다.
스테이지에 편집한 앱 파일이 있는 경우 다음 명령으로 앱에 대해 CREATE OR REPLACE 작업을 수행할 수 있습니다.
CREATE OR REPLACE STREAMLIT my_app
FROM '@my_stage/app_folder'
MAIN_FILE = 'streamlit_app.py'
QUERY_WAREHOUSE = my_warehouse
RUNTIME_NAME = 'SYSTEM$ST_CONTAINER_RUNTIME_PY3_11'
COMPUTE_POOL = my_compute_pool
EXTERNAL_ACCESS_INTEGRATIONS = (pypi_access_integration);
또는 앱 파일을 제자리에서 업데이트하거나 앱 파일의 하위 세트만 업데이트하려는 경우 다음 명령을 사용할 수 있습니다.
앱 소스 위치의 URI를 가져옵니다.
DESCRIBE STREAMLIT my_app;
live_version_location_uri값은 앱의 소스 위치입니다. 해당 위치를 복사하여 다음 단계에서 사용합니다.PUT 또는 COPY FILES를 사용하여 하나 이상의 업데이트된 앱 파일을 소스 위치에 업로드합니다.
COPY FILES INTO '<live_version_location_uri>' FROM @my_stage FILES = ('streamlit_app.py');;
참고
Snowflake CLI 버전 3.14.0 이상이 필요합니다. 버전 3.14 이상에서는 기본적으로 최신 CREATE STREAMLIT 구문을 사용합니다.
로컬 컴퓨터에 편집된 앱 파일의 전체 세트(Snow CLI용 snowflake.yml 파일 포함)가 있는 경우 다음 명령을 사용하여 앱을 다시 배포할 수 있습니다.
snow streamlit deploy --replace
런타임 동작 차이점¶
편집 내용이 적용되는 방식은 앱의 런타임 유형에 따라 다릅니다.
Container Runtime¶
Container Runtime 앱을 편집하는 경우 다음과 같습니다.
앱 소스에 대한 변경 사항은 라이브 앱에 직접 적용됩니다.
현재 뷰어는 다음에 앱과 상호 작용하고 재실행을 트리거할 때 업데이트를 볼 수 있습니다. (Streamlit `구성 옵션<https://docs.streamlit.io/develop/api-reference/configuration/config.toml#server>`_``server.runOnSave``은 기본적으로 비활성화되어 있습니다.)
Run 버튼은 뷰어가 사용할 수 있지만, 현재 보기 또는 편집 세션에 변경 사항을 전파하는 데는 필요하지 않습니다.
모든 사용자는 즉시 변경되는 동일한 앱 인스턴스를 볼 수 있습니다.
라이브 앱이 뷰어 간에 공유되더라도 Snowsight 편집기의 소스 코드 뷰는 공유되지 않습니다. 따라서 Container Runtime의 앱은 여러 사용자가 동시에 앱을 편집할 때 여전히 경합 조건의 영향을 받습니다. 자세한 내용과 모범 사례는 아래 공동 편집 고려 사항 섹션을 참조하세요.
Warehouse Runtime¶
Warehouse Runtime 앱을 편집하는 경우 다음과 같습니다.
공동 편집 고려 사항¶
여러 사용자가 동일한 앱을 편집하는 경우 충돌 가능성에 유의하세요. 두 명 이상의 사용자가 동시에 앱을 편집하는 경우 Container Runtime 및 Warehouse Runtime 앱 모두 다음과 같은 경합 조건이 적용됩니다.
경합 조건¶
Snowsight 편집기는 다음과 같이 작동합니다.
현재 소스 코드는 편집기 창을 열거나 파일 탐색기를 사용하여 파일을 열 때 편집기 창에 복사됩니다.
편집기 창에서 파일을 보는 경우 다른 사용자가 파일을 변경해도 파일이 자동으로 업데이트되지 않습니다.
편집기 창에서 변경 사항을 적용하면 편집기를 연 후 다른 사용자가 변경한 내용이 자동 저장으로 덮어쓰입니다.
충돌하는 편집 내용은 자동으로 병합되지 않습니다.
예를 들어, 다음 시퀀스로 인해 변경 사항이 손실될 수 있습니다.
개발자 A가 2:00 PM에 편집기를 엽니다.
개발자 B가 2:15 PM에 변경 작업을 수행하고 저장합니다.
개발자 A가 2:30 PM에 변경 사항을 저장합니다.
개발자 B의 변경 사항이 손실됩니다(개발자 A가 덮어씀).
팀 편집 모범 사례¶
팀과 함께 작업할 때 충돌을 방지하려면 다음을 수행합니다.
편집하기 전에 팀 구성원과 소통합니다.
소스 파일을 Git 리포지토리에 보관하고 해당 리포지토리에서 코드를 배포합니다.
변경 사항을 테스트하려면 별도의 개발 앱을 사용합니다.
Snowsight 편집기를 다시 로드하여 변경하기 직전에 최신 버전을 다운로드합니다.