Openflow Connector for Shopify 소개

Openflow Connector for Shopify 소개

이 페이지에서는 Shopify용 Openflow Connector의 기본 개념, 작업 흐름, 그리고 제한 사항을 설명해요. Shopify 스토어 데이터를 Snowflake로 복제해 분석·재고 관리·고객 인사이트 등에 활용하려는 경우 사용합니다.

출처: Snowflake 문서

본문

Note

이 커넥터는 Snowflake Connector Terms에 의해 규율됩니다.

이 토픽은 Shopify용 Openflow Connector의 기본 개념, 작업 흐름, 그리고 제한 사항을 설명합니다.

Shopify용 Openflow Connector는 Shopify Admin GraphQL API를 사용해 Shopify 스토어의 데이터를 Snowflake로 복제합니다. 커넥터는 Bulk Operations를 사용해 대용량 데이터를 효율적으로 추출하고, Snowpipe Streaming으로 Snowflake에 로드합니다. 초기 벌크 로드, 증분 업데이트, 삭제 감지를 지원합니다.

사용 사례

Shopify용 Openflow Connector를 사용해 Shopify 스토어의 데이터를 Snowflake로 복제하는 용도는 다음과 같습니다:

  • E-commerce 분석: 교차 채널 보고와 비즈니스 인텔리전스를 위해 주문·제품·고객 데이터를 Snowflake에 중앙 집중화

  • 재고 관리: 수요 예측과 공급망 최적화를 위해 재고 항목과 위치를 Snowflake로 가져오기

  • 고객 인사이트: 개인화·코호트 분석·LTV(Lifetime Value) 모델링을 위해 고객·세그먼트 데이터를 Snowflake로 복제

  • 운영 보고: 실시간 운영 대시보드를 위해 주문 처리(fulfillment)·초안(draft) 주문·거래를 Snowflake에서 추적

지원되는 객체

커넥터에는 자주 복제되는 Shopify 객체 유형의 내장 카탈로그가 포함되어 있습니다:

  • Orders: 라인 아이템, 배송·청구 주소, 재무 상태, 주문 처리 세부 정보를 포함한 주문 데이터

  • Products 및 Product Variants: 가격·재고·변형 정보를 포함한 제품 카탈로그 데이터

  • Customers: 고객 프로필, 연락처 정보, 마케팅 선호도

  • Collections: 수동·자동 제품 컬렉션

  • Inventory Items: 재고 수량과 재고 추적 데이터

  • Fulfillment Orders: 주문 처리 할당과 배송 세부 정보

커넥터는 이 객체들에 국한되지 않습니다. Object Definitions Override 파라미터에 사용자 정의 정의를 제공하면 Shopify Admin GraphQL API가 지원하는 모든 객체 유형을 복제할 수 있습니다. 사용자 정의를 사용하면 어떤 필드를 추출할지 선택하고, GraphQL 별칭으로 필드에 이름표를 붙이거나 이름을 바꾸고, 중첩 객체의 값을 전용 최상위 Snowflake 열로 끌어올릴 수 있습니다. 자세한 내용은 Shopify용 Openflow Connector의 객체 정의 오버라이드를 참고하세요.

내장 카탈로그에 없는 객체의 경우 커넥터는 GraphQL introspection을 사용해 스키마를 자동 탐색할 수도 있습니다. 자세한 내용은 Auto-discovery를 참고하세요.

복제 수명 주기

커넥터는 초기 벌크 로드와 증분 동기화 두 단계로 데이터를 복제합니다.

초기 벌크 로드

커넥터가 처음(또는 상태 리셋 후) 실행되면 Shopify Bulk Operations API를 사용해 구성된 각 객체 유형에 대해 벌크 쿼리를 수행합니다. 커넥터는:

  1. 각 객체 유형에 대해 Shopify에 벌크 쿼리를 제출합니다.

  2. 벌크 작업이 완료되고 JSONL 결과 파일이 준비될 때까지 Shopify를 폴링합니다.

  3. JSONL 결과를 다운로드하고, 하위 연결(child connections)을 별도 테이블로 평탄화하며(__PARENT_ID 열로 부모 레코드에 연결), GraphQL 응답에서 Snowflake 테이블 스키마를 도출합니다.

  4. Snowpipe Streaming으로 데이터를 Snowflake에 로드하고 대상 테이블에 병합합니다.

증분 동기화

초기 로드 후 커넥터는 증분 모드로 전환합니다. 타임스탬프 기반 워터마크를 사용해 마지막 동기화 이후 변경된 레코드만 가져옵니다. 커넥터는 객체의 사용 가능한 필드를 우선순위 목록(updatedAt, createdAt, processedAt)에 대조해 첫 번째 일치 항목을 증분 필드로 선택합니다.

증분 빈도는 사용자가 구성할 수 있습니다. 각 증분 실행은 변경된 레코드를 가져와 대상 테이블에 병합합니다.

인증

커넥터는 OAuth2 클라이언트 자격 증명 grant로 Shopify에 인증합니다. Shopify dev 앱에서 Shopify Client ID와 Shopify Client Secret을 제공하면, 커넥터가 Shopify OAuth2 토큰 엔드포인트에서 토큰을 가져와 필요에 따라 갱신합니다.

자세한 내용은 Openflow Connector for Shopify 설정을 참고하세요.

Auto-discovery

커넥터에는 일반적으로 사용되는 Shopify 객체 유형 세트에 대한 GraphQL 쿼리 구조를 정의하는 내장 객체 카탈로그가 포함되어 있습니다. 카탈로그에 없는 객체의 경우 커넥터는 선택적으로 Shopify Admin GraphQL introspection 엔드포인트를 조회해 스키마를 동적으로 탐색할 수 있습니다.

자동 탐색된 정의는 반복적인 introspection 호출을 피하기 위해 NiFi 분산 상태에 24시간 동안 캐시됩니다. 자세한 내용은 Enable Introspection 파라미터를 참고하세요.

삭제 처리 방법

삭제 감지를 지원하는 객체의 경우 커넥터는 주기적으로 Shopify Events API에 action: "destroy"를 사용해 조회하고, Snowflake에서 소프트 삭제를 적용합니다. Shopify Events API에서 destroy 이벤트를 발생시키는 객체 유형만 삭제 감지를 지원합니다. 커넥터는 __SNOWFLAKE_IS_DELETED 열을 TRUE로, __SNOWFLAKE_DELETED_AT 열을 삭제 이벤트 타임스탬프로 설정합니다. 행은 대상 테이블에서 물리적으로 제거되지 않습니다.

부모 레코드가 소프트 삭제되면 커넥터는 등록된 모든 하위 테이블(예: 삭제된 제품과 연결된 변형)로 소프트 삭제를 전파합니다.

자동 재시도와 속도 제한

커넥터는 초당 50포인트로 다시 채워지는 1,000포인트 용량의 leaky bucket 알고리즘을 사용하는 Shopify의 속도 제한 모델을 존중합니다. 커넥터는 사용 가능한 포인트를 추적하고, 버킷이 낮으면 자동으로 대기해 스로틀링 오류를 피합니다.

스로틀링 응답의 경우 커넥터는 자동으로 재시도합니다. Shopify가 HTTP 429를 반환하면 커넥터는 재시도 전에 Retry-After 헤더에 지정된 시간 동안 대기합니다. API가 THROTTLED GraphQL 오류를 반환하면 커넥터는 지수 백오프로 재시도합니다. 기본 구성은 초기 백오프 1초로 최대 3회 재시도를 허용합니다.

하위 레코드 평탄화

중첩 연결이 있는 객체(예: 주문 라인 아이템이나 반품)의 경우 커넥터는 하위 레코드를 자동으로 추출해 별도 Snowflake 테이블로 만듭니다. 각 하위 테이블에는 부모 레코드의 Shopify GID를 참조하는 __PARENT_ID 열이 포함되어 부모-자식 테이블 간 조인이 가능합니다.

제한 사항

커넥터를 사용할 때 다음 제한 사항을 고려하세요:

  • 커넥터에는 Admin API 접근 권한이 있는 Shopify dev 앱이 필요합니다.

  • Shopify Bulk Operations API는 쿼리당 최대 5개 연결과 2단계 중첩까지만 지원합니다.

  • 커넥터는 현재 데이터 추출(수집)만 지원합니다. Shopify로 데이터를 다시 쓰는 것은 지원되지 않습니다.

  • 현재 릴리스에서는 스키마 진화가 지원되지 않습니다. Shopify에서 소스 객체의 필드가 추가·제거되면 영향을 받는 객체의 커넥터 상태를 리셋해 업데이트된 스키마로 다시 수집해야 합니다.

  • 속도 제한은 Shopify 플랜에 따라 다릅니다. 커넥터는 Shopify의 leaky bucket 스로틀링을 존중하지만, 객체가 많은 매우 고부하 스토어는 지속적인 스로틀링을 피하기 위해 신중한 일정이 필요할 수 있습니다.

  • 삭제 감지는 Objects to Track for Deletes 파라미터에 나열된 객체 유형에서만 사용할 수 있습니다. 객체 유형이 Shopify Events API에서 destroy 이벤트를 발생시키지 않으면 해당 유형의 삭제 폴링은 0건을 반환합니다.

  • 커넥터는 증분 실행 중 각 하위 연결의 pageSize 값만큼만 가져옵니다(최대 250, 증분 쿼리에 대한 Shopify 하드 한도). 이 한도를 넘는 하위 레코드는 캡처되지 않습니다. 초기 벌크 로드는 이 한도의 적용을 받지 않습니다: Shopify Bulk Operations API는 first: 인자를 무시하고 모든 하위 레코드를 반환합니다.

다음 단계

커넥터를 설정하려면 Openflow Connector for Shopify 설정을 참고하세요.

더 알아보기 (Learn more)