OpenFlow gen 1과 gen 2
OpenFlow gen 1과 gen 2
gen 2 배포·런타임 SQL 객체는 AWS, Azure, GCP에서 일반 공개(GA) 상태예요. gen 2 커넥터 구성은 Public Preview 상태예요(Connectors 참고).
본문
활성화된 계정은 gen 1과 gen 2 OpenFlow 리소스를 모두 사용할 수 있어요.
- 1세대 (gen 1) — 런타임은 기존 gen 1 배포에서 OpenFlow UI로 만들어요. 새 gen 1 배포는 더 이상 만들 수 없어요. 커넥터는 Install(OpenFlow UI)로 커넥터 카탈로그에서 설치하고 런타임 캔버스에서 구성하는 Apache NiFi 프로세스 그룹이에요.
- 2세대 (gen 2) — 배포·런타임·커넥터는 SQL 명령(
CREATE OPENFLOW DEPLOYMENT,CREATE OPENFLOW RUNTIME,CREATE OPENFLOW CONNECTOR)으로 만들거나 OpenFlow UI의 커넥터 카탈로그에서 설치하는 일급 Snowflake 객체예요. gen 2 커넥터는 버전 관리 구성을 가진 FBE(파일 기반 엔티티)이며 설정 마법사를 사용할 수 있어요.
새로 만드는 모든 OpenFlow 배포는 gen 2예요. 기존 gen 1 배포는 마이그레이션할 때까지 gen 1로 남고, gen 1 배포의 새 런타임은 gen 1이에요. gen 2 런타임은 gen 1과 gen 2 커넥터를 모두 지원하므로, 커넥터의 gen 2 버전을 기다릴 필요 없이 gen 2 런타임에서 사용할 수 있어요. 이 주제는 gen 1과 gen 2가 어떻게 다른지, 각각 어떤 문서를 따라야 하는지 설명해요.
개요 (Overview)
gen 1과 gen 2 리소스는 같은 OpenFlow 플랫폼 개념 — BYOC와 OpenFlow - Snowflake Deployment 배포 유형, NiFi 기반 데이터 이동, 대상으로서의 Snowflake — 을 공유하지만, 객체를 만들고 보안을 적용하고 관리하는 방식에서 달라요.
gen 2는 장기적인 OpenFlow 관리 모델이에요: SQL로 접근 가능한 객체, 세분화된 권한, 커밋된 구성 버전을 가진 커넥터예요. 이미 보유한 gen 1 리소스는 계속 변경 없이 작동해요. 새 gen 2 리소스는 별도로 만들어지고 gen 2 생명주기 규칙을 따르며, 그렇지 않아요.
왜 gen 2로 마이그레이션하나? (Why migrate to gen 2?)
모든 것을 SQL로 관리 (Manage everything with SQL) — gen 2 배포·런타임·커넥터는 일급 Snowflake 객체예요. SQL 명령(CREATE OPENFLOW DEPLOYMENT, ALTER OPENFLOW CONNECTOR ... START 등)이나 OpenFlow UI로 만들고, 구성하고, 시작하고, 중지하고, 제거할 수 있어요. 이들이 표준 SQL 연산이므로, 비업무 시간대에 런타임 중지를 프로그래밍 방식으로 예약해 총 소유 비용(TCO)을 줄일 수 있어요.
CI/CD 및 인프라-as-코드 (CI/CD and infrastructure as code) — gen 2 커넥터는 구성을 버전 관리 파일(FBE)로 저장해요. Draft 변경을 만들고, 커밋하고, 이전 버전으로 롤백할 수 있어요. Git 워크플로를 통해 검증된 구성을 여러 환경에서 재사용하고, 클릭이 아닌 방식으로 구성을 dev에서 prod로 승격하고, 커넥터 관리를 CI/CD 파이프라인에 통합할 수 있어요. gen 2 객체는 인프라-as-코드 워크플로를 위해 Snowflake Terraform 프로바이더도 지원해요.
안내 설치를 위한 설정 마법사 (Setup wizard for guided installation) — gen 2 커넥터는 시작 전에 연결성과 구성을 검증하는 단계별 설정 마법사로 설치할 수 있어요. gen 1 커넥터 설치는 캔버스에서 프로세서, 컨트롤러 서비스, 파라미터 컨텍스트를 수동으로 구성해야 해요.
세분화된 접근 제어 (Granular access control) — gen 2 런타임과 커넥터는 표준 Snowflake RBAC를 가진 스키마 범위 객체예요. GRANT USAGE와 GRANT OPERATE로 누가 배포를 보고, 런타임을 운영하고, 커넥터를 관리할 수 있는지 제어해요.
시작하려면: gen 1에서 gen 2로의 마이그레이션은 Private Preview로 제공돼요. 포함되려면 Snowflake 계정 담당자에게 문의하세요.
리소스 유형별 비교 (Comparison by resource type)
배포 (Deployments)
| gen 1 | gen 2 | |
|---|---|---|
| 생성 | 사용 불가 — 새 gen 1 배포를 만들 수 없어요. | CREATE OPENFLOW DEPLOYMENT (UI 또는 SQL) |
| 필요한 권한 | N/A | 계정에 대한 CREATE OPENFLOW DEPLOYMENT |
| 문서 | OpenFlow - BYOC 설정, OpenFlow - Snowflake Deployment 설정 - 작업 개요 | Quickstart: gen 2 OpenFlow, 2세대 OpenFlow 객체와 인터페이스 |
| 이벤트 테이블 | 데이터 플레인 통합에 설정(ALTER OPENFLOW DATA PLANE INTEGRATION ... SET EVENT_TABLE). 생성 시 통합에 저장된 값. DESCRIBE OPENFLOW DATA PLANE INTEGRATION으로 확인. [선택] OpenFlow 특정 이벤트 테이블 구성 |
배포 객체의 선택적 EVENT_TABLE. 설정하지 않으면 계정 수준 이벤트 테이블을 상속. SHOW PARAMETERS LIKE 'EVENT_TABLE' IN OPENFLOW DEPLOYMENT <name>으로 확인. |
| 가용성 | 기존 gen 1 배포는 계속 변경 없이 작동. 새 gen 1 배포는 만들 수 없음. | 모든 새 배포는 gen 2이며 CREATE OPENFLOW DEPLOYMENT로 생성. |
참고: Snowflake 배포 한도 — 각 계정은 최대 3개의 Snowflake OpenFlow 배포를 지원해요. gen 1과 gen 2 배포가 이 한도를 공유하며, 계정에 이미 Snowflake 배포가 3개 있으면 세대와 무관하게
CREATE OPENFLOW DEPLOYMENT WITH DEPLOYMENT_TYPE = SNOWFLAKE가 실패해요.
런타임 (Runtimes)
| gen 1 | gen 2 | |
|---|---|---|
| 생성 | CREATE OPENFLOW RUNTIME INTEGRATION (UI 또는 SQL) |
CREATE OPENFLOW RUNTIME ... IN DEPLOYMENT ... (UI 또는 SQL) |
| 계정 또는 스키마 수준 객체 | 계정 수준 OPENFLOW RUNTIME INTEGRATION 객체 |
스키마 수준 객체; 정규화된 이름 <database>.<schema>.<runtime_name>. 커넥터 실행 중 읽기·쓰기 접근은 런타임 객체가 있는 스키마가 아니라 런타임의 EXECUTE_AS_ROLE에 의해 결정돼요. |
| 필요한 권한 | 계정에 대한 CREATE OPENFLOW RUNTIME INTEGRATION |
대상 스키마에 대한 CREATE OPENFLOW RUNTIME, 포함 데이터베이스에 대한 USAGE, 배포에 대한 USAGE(스키마 소유자는 명시적 CREATE OPENFLOW RUNTIME 부여 없이 생성 가능) |
| 런타임 객체 권한 | OPENFLOW RUNTIME INTEGRATION 객체에 대한 USAGE, OPERATE, MONITOR |
런타임에 대한 USAGE, OPERATE, MONITOR 및 데이터베이스·스키마에 대한 USAGE |
| 삭제 | 중지 후 UI에서 삭제(런타임 삭제 워크플로 참조) | UI: Runtimes 탭의 런타임 메뉴에서 Suspend → Delete → Drop(런타임 삭제 워크플로 참조). SQL: ALTER OPENFLOW RUNTIME ... SUSPEND → TERMINATE → DROP |
| 문서 | OpenFlow - Snowflake Deployment 설정: 런타임 생성, Manage Openflow | Quickstart: gen 2 OpenFlow, 2세대 OpenFlow 객체와 인터페이스 |
| 세대 | 부모 배포에서 결정. gen 1 배포에 추가된 모든 런타임은 gen 1. | 부모 배포에서 결정. gen 2 배포에 추가된 모든 런타임은 gen 2. |
커넥터 (Connectors, Public Preview)
| gen 1 | gen 2 | |
|---|---|---|
| 생성 | 카탈로그에서 Install(OpenFlow UI)로 설치하거나 런타임 캔버스에서 레지스트리에서 가져오기(공존 참조) | OpenFlow UI: 카탈로그에서 설치(gen 2 항목, 설정 마법사). SQL: CREATE OPENFLOW CONNECTOR ... FROM DEFINITION(Quickstart: gen 2 OpenFlow, gen 2 커넥터를 SQL로 구성 참조). 검증된 구성을 재사용하려면 gen 2 커넥터 구성 및 버전 관리의 알려진 구성에서 생성 참조. |
| 객체 유형 | 런타임 캔버스의 NiFi 프로세스 그룹(별도 Snowflake 객체 아님) | 스키마 수준 OPENFLOW CONNECTOR FBE(파일 기반 엔티티), 버전 스테이지 구성 포함 |
| 구성 | 런타임 캔버스: 파라미터 컨텍스트, 컨트롤러 서비스, 프로세서 | 설정 마법사, Installed Connectors » Edit, 또는 SQL/스테이지 명령(커넥터 live 버전에서 PUT/COMMIT). gen 2 커넥터 구성 및 버전 관리 참조. |
| 캔버스 | 전체 읽기·쓰기 구성 표면 | gen 2 커넥터에 대해 읽기 전용; 구성 변경에는 Installed Connectors » Edit 또는 SQL/API 사용 |
| 생명주기 | 캔버스에서 프로세서 시작/중지; 커넥터별 문서화된 캔버스·UI 단계로 제거 | UI: Installed Connectors에서 Start/Stop; Stop → Delete → Drop으로 제거(gen 2 OpenFlow 커넥터 생명주기 관리 참조). SQL: `ALTER OPENFLOW CONNECTOR ... START |
| 문서 | OpenFlow 커넥터 및 커넥터별 설정 주제 | 설정 마법사로 커넥터 구성, gen 2 OpenFlow 커넥터 생명주기 관리, gen 2 커넥터 구성 및 버전 관리 |
권한 부여 차이 (Authorization differences)
배포에 대한 USAGE는 런타임 가시성을 부여하지 않음
gen 1에서는 배포에 대한 USAGE가 있는 사용자가 그 배포의 런타임을 볼 수 있어요.
gen 2에서는 배포에 대한 USAGE가 그 배포의 런타임에 대한 접근을 부여하지 않아요. 런타임에 접근하거나 관리하려면 사용자가 런타임 자체에 직접 부여된 USAGE, OPERATE, MONITOR 및 런타임의 데이터베이스·스키마에 대한 USAGE가 있어야 해요.
사용자는 배포를 보려면 배포에 대한 권한이 있어야 함
gen 1에서는 모든 사용자가 계정의 모든 배포를 볼 수 있어요.
gen 2에서는 사용자가 배포를 목록에서 보려면 그 배포에 대한 적격 권한을 가진 역할을 보유해야 해요. 보조 역할(secondary role)이 활성화되면 배포 가시성 결정에 보조 역할이 고려돼요.
런타임 객체 권한
gen 1 런타임은 계정 수준 OPENFLOW RUNTIME INTEGRATION 객체로 표시돼요. 그 통합 객체에 필요한 권한은 USAGE, OPERATE, MONITOR예요.
gen 2 런타임은 스키마 수준 객체예요. 필요한 권한은:
- 런타임 객체 자체에 대한
USAGE,OPERATE,MONITOR, 그리고 - 런타임의 데이터베이스·스키마에 대한
USAGE
커넥터 권한 (Public Preview)
대부분의 커넥터 연산은 부모 런타임에서 권한을 파생해요. 런타임에 대한 USAGE가 있으면 그 런타임의 커넥터를 시작·중지·구성·종료할 수 있어요. 메타데이터 변경, 이름 변경, DROP에는 커넥터 객체 자체에 대한 OWNERSHIP이 필요해요.
OWNERSHIP 전송 (Transferring OWNERSHIP)
gen 2 OpenFlow 배포·런타임·커넥터에 대한 GRANT OWNERSHIP은 현재 기본 기능을 깨뜨릴 수 있어요(예: 배포 에이전트 자격 증명이나 런타임 제어 플레인 바인딩). SQL에서는 명령이 받아들여지지만, 다가오는 업데이트가 이 동작을 해결할 때까지 소유권을 이전하지 마세요.
동작 차이 (Behavior differences)
런타임 삭제 워크플로 (Runtime deletion workflow)
어느 세대든 런타임을 삭제하기 전에 그 런타임의 커넥터를 먼저 중지하세요.
gen 1 런타임은 이 워크플로를 따라요:
ACTIVE → (커넥터 중지) → (중단) → SUSPENDED → (UI에서 삭제) → 제거됨
gen 2 런타임은 이 워크플로를 따라요:
ACTIVE → (커넥터 중지) → (중단) → SUSPENDED → (종료) → TERMINATED → (drop) → 제거됨
ALTER OPENFLOW RUNTIME ... TERMINATE는 제거 전에 이동 중인 커넥터 데이터를 비워요. 데이터 손실을 감수하고 큐를 비우려면 TERMINATE FORCE를 사용하세요.
UI에서:
- 런타임의 커넥터를 중지하세요.
- Launch Openflow를 선택하고 Runtimes 탭을 연 뒤 런타임 메뉴를 여세요.
- Suspend를 선택하세요.
- 같은 메뉴에서 Delete를 선택하세요(런타임 종료).
- 같은 메뉴에서 Drop을 선택하세요.
SQL에서:
ALTER OPENFLOW RUNTIME my_db.my_schema.my_runtime SUSPEND;
SELECT SYSTEM$WAIT_FOR_STABLE_OPENFLOW_RUNTIMES(600, 'my_db.my_schema.my_runtime');
ALTER OPENFLOW RUNTIME my_db.my_schema.my_runtime TERMINATE;
SELECT SYSTEM$WAIT_FOR_STABLE_OPENFLOW_RUNTIMES(600, 'my_db.my_schema.my_runtime');
DROP OPENFLOW RUNTIME my_db.my_schema.my_runtime;
UI 기반 워크플로에서는 각 단계가 끝나기를 기다렸다가 다음을 시작하세요. 스크립트에서는 비동기 ALTER 명령 뒤에 SYSTEM$WAIT_FOR_STABLE_OPENFLOW_*를 호출해 주세요. SYSTEM$WAIT_FOR_STABLE_OPENFLOW_DEPLOYMENTS, SYSTEM$WAIT_FOR_STABLE_OPENFLOW_RUNTIMES, SYSTEM$WAIT_FOR_STABLE_OPENFLOW_CONNECTORS를 참고하세요.
커넥터 삭제 워크플로 (Public Preview)
gen 1 커넥터는 런타임 캔버스의 NiFi 프로세스 그룹이에요. OPENFLOW CONNECTOR 객체가 아니므로 ALTER OPENFLOW CONNECTOR나 DROP OPENFLOW CONNECTOR로 제거할 수 없어요. 캔버스와 그 커넥터의 공개 설정·유지보수 주제에서 커넥터별 단계로 수집을 중지하고 프로세스 그룹을 제거하세요.
gen 2 커넥터는 중지 → 종료 → 삭제(stop → terminate → drop)로 제거하는 일급 Snowflake 객체예요. 일상적 제어에는 Installed Connectors에서 Start/Stop 또는 ALTER OPENFLOW CONNECTOR ... START|STOP을, 제거에는 Delete/Drop 또는 TERMINATE/DROP OPENFLOW CONNECTOR를 사용하세요. UI Delete는 TERMINATE에, UI Drop은 DROP OPENFLOW CONNECTOR에 매핑돼요. TERMINATE는 제거 전에 이동 중인 데이터를 비워요.
전체 UI·SQL 제거 단계, 대기 함수, 정리 지침은 gen 2 OpenFlow 커넥터 생명주기 관리를 참고하세요.
gen 2 커넥터 구성 (Public Preview)
gen 1 커넥터는 런타임 캔버스에서 구성돼요: 파라미터 컨텍스트, 컨트롤러 서비스, 프로세서를 그 커넥터의 공개 설정 문서에 따라 구성해요.
gen 2 커넥터는 버전 관리 구성을 사용해요(gen 2 커넥터 구성 및 버전 관리 참조). Draft 상태의 커넥터는 시작하기 전에 커밋해야 해요. 커밋된 default 버전과 함께 live 버전이 존재하면 UI가 Edits not applied를 표시해요.
gen 2 커넥터의 경우 런타임 캔버스는 구성에 대해 읽기 전용이에요. 설정을 변경하려면 Installed Connectors » Edit, 설정 마법사, 또는 SQL/API 명령을 사용하세요.
gen 1과 gen 2 리소스 식별 방법 (How to identify gen 1 and gen 2 resources)
리소스가 gen 1인지 gen 2인지 확실하지 않을 때 다음 확인을 사용하세요.
OpenFlow UI에서
가장 빠른 확인은 OpenFlow의 gen 2 라벨이에요.
- 배포와 런타임 — gen 2 리소스는 OpenFlow UI에 gen 2 태그를 보여줘요. gen 1 리소스는 그렇지 않아요.
SQL에서의 배포·런타임
gen 1과 gen 2 객체는 다른 SHOW 명령을 사용해요. 이들은 일반 SHOW INTEGRATIONS 명령이 아닌 OpenFlow 특정 목록이에요.
- gen 2 배포 —
SHOW OPENFLOW DEPLOYMENTS로 나열돼요. 보려면 배포에 대한 적격 권한을 보유해야 해요. - gen 1 배포 —
SHOW OPENFLOW DATA PLANE INTEGRATIONS로 나열돼요.SHOW OPENFLOW DEPLOYMENTS에는 나타나지 않아요. - gen 2 런타임 —
SHOW OPENFLOW RUNTIMES IN ACCOUNT로 나열돼요. 각 행에database_name과schema_name컬럼이 포함되며, 정규화된 이름은<database>.<schema>.<runtime_name>이에요. - gen 1 런타임 —
SHOW OPENFLOW RUNTIME INTEGRATIONS로 나열돼요. 런타임 이름은 스키마로 정규화되지 않으며SHOW OPENFLOW RUNTIMES에 나타나지 않아요.
SHOW OPENFLOW DEPLOYMENTS가 SQL 오류(빈 결과가 아니라)를 반환하면 그 계정은 gen 2 SQL 객체를 지원하지 않아요. gen 1 SHOW OPENFLOW ... INTEGRATIONS 명령과 공개 gen 1 문서를 사용하세요.
커넥터 (Public Preview)
gen 2 커넥터는 일급 Snowflake 객체예요. gen 1 커넥터는 런타임 캔버스의 NiFi 프로세스 그룹일 뿐 — 별도 Snowflake 객체가 아니에요.
다음 중 어느 하나라도 해당하면 gen 2 커넥터예요:
- 커넥터가 카탈로그나 Installed Connectors에 gen 2 라벨을 보여줘요.
- 커넥터가 런타임의 Installed Connectors 탭에 나타나요.
SHOW OPENFLOW CONNECTORS또는DESCRIBE OPENFLOW CONNECTOR가 커넥터를 반환해요(접근 권한이 있을 때).
다음 중 어느 하나라도 해당하면 gen 1 커넥터예요:
- 커넥터가 런타임 캔버스에는 보이지만 Installed Connectors에는 나타나지 않아요.
- 커넥터가 캔버스에 설치됐어요(예: gen 1 런타임에서 카탈로그에서 Install, 또는 gen 2 런타임에서 레지스트리에서 Import — gen 1과 gen 2 공존 참조).
SQL로 gen 1과 gen 2 구분하기:
SHOW OPENFLOW CONNECTORS또는DESCRIBE OPENFLOW CONNECTOR가 커넥터를 반환하면(필요한 권한이 있을 때) gen 2예요.- 그 명령들이 행을 반환하지 않으면 커넥터가 gen 1이거나 부모 런타임에 대한
USAGE(또는 다른 필수 권한)가 없을 수 있어요. gen 1이라고 가정하기 전에 위의 UI 확인 — 특히 커넥터가 Installed Connectors에 나타나는지 — 을 사용하세요.
Installed Connectors에는 없는데 캔버스에 프로세스 그룹이 보이고 런타임에 접근 권한이 있다고 확인했다면, gen 1으로 취급하고 그 커넥터의 공개 설정 문서를 따르세요.
공존 (Coexistence)
gen 1과 gen 2 리소스는 같은 계정에 존재할 수 있어요. 규칙은 다음과 같아요.
- 새 배포는 gen 2만 가능해요. 더 이상 새 gen 1 배포(BYOC 또는 Snowflake)를 만들 수 없어요 — 모든 새 배포는
CREATE OPENFLOW DEPLOYMENT를 사용해요. 기존 gen 1 배포는 계속 변경 없이 작동하고 마이그레이션할 수 있어요. gen 1에서 gen 2로의 마이그레이션은 Private Preview로 제공되며, 포함되려면 Snowflake 계정 담당자에게 문의하세요. - gen 2 런타임 — gen 1과 gen 2 커넥터를 모두 지원하며, 두 유형이 같은 런타임에 공존할 수 있어요. OpenFlow UI의 커넥터 카탈로그에서 gen 2 커넥터를 설치해요(설정 마법사 사용).
팁: 소스에 대한 gen 2 카탈로그 항목이 아직 없거나 gen 1 커넥터가 더 선호된다면 커넥터 카탈로그에서 설치하세요 — 같은 gen 2 런타임에서 실행되고 그 커넥터의 공개 설정 문서를 따릅니다.
- gen 1 런타임 — gen 1 커넥터만 지원해요. gen 1 런타임에 gen 2 커넥터를 설치하지 마세요.
- Snowflake 배포 한도 — 각 계정은 최대 3개의 Snowflake OpenFlow 배포를 지원해요. gen 1과 gen 2 배포가 이 한도를 공유하며, 계정에 Snowflake 배포가 이미 3개 있으면 세대와 무관하게
CREATE OPENFLOW DEPLOYMENT WITH DEPLOYMENT_TYPE = SNOWFLAKE가 실패해요. - 공유 소스 설정 — 소스 준비(데이터베이스 권한, 네트워크 접근, 시크릿)는 종종 gen 1과 gen 2에 대해 같은 공개 커넥터 설정 문서를 따라요. gen 2 주제는 해당되는 곳에서 그 지침에 연결돼요.
gen 1에서 gen 2로의 마이그레이션은 Private Preview로 제공돼요. 포함되려면 Snowflake 계정 담당자에게 문의하세요.
따라야 할 문서 (Which documentation to follow)
이 결정 가이드로 올바른 주제를 선택하세요.
| 원하는 것 | 따라야 할 것 |
|---|---|
| gen 1 vs gen 2 이해 (이 페이지) | OpenFlow gen 1과 gen 2 |
| gen 2 시작하기 (권한, 첫 gen 2 리소스) | 2세대 OpenFlow 객체와 인터페이스, Quickstart: gen 2 OpenFlow |
| 기존 gen 1 배포 관리, 또는 gen 1 런타임 생성 | 공개 OpenFlow 설정 및 Manage Openflow 주제 |
| gen 1 카탈로그 커넥터 설치 (캔버스에서 Install 또는 Import from Registry) | OpenFlow 커넥터 및 커넥터의 설정 주제 |
| 설정 마법사로 gen 2 커넥터 설치 | 설정 마법사로 커넥터 구성 |
| gen 2 커넥터를 SQL로 구성 | gen 2 커넥터를 SQL로 구성 |
| gen 2 커넥터 시작·중지·제거 | gen 2 OpenFlow 커넥터 생명주기 관리 |
| gen 2 커넥터 구성 버전 관리 (draft, commit, abort) | gen 2 커넥터 구성 및 버전 관리 |
| gen 2 배포·런타임·커넥터 SQL 참조 | 2세대 OpenFlow SQL 명령 참조 |
| 데이터 소스 준비 (예: PostgreSQL CDC) | 커넥터의 공개 설정 주제; 커넥터 생성은 gen 2 문서로 돌아오기 |
더 알아보기 (Learn more)
- 2세대 OpenFlow 객체와 인터페이스 — gen 2 객체 개요
- Quickstart: gen 2 OpenFlow — 첫 gen 2 리소스 만들기
- OpenFlow 개요 — OpenFlow 구성 요소와 기능 살펴보기