Shopify Flow 워크플로 최적화
워크플로를 구축할 때는 워크플로가 최대한 효율적으로 실행되도록 해야 합니다. 이 문서에서는 워크플로 속도가 제한되거나 API 한도를 소진시킬 수 있는 시나리오와 이러한 문제를 해결하거나 대처하는 방법에 대한 팁을 설명합니다.
일반적인 성능 문제
이 섹션에서는 워크플로에서 성능 문제를 일으킬 수 있는 일반적인 시나리오를 설명합니다. 두 가지 이상의 시나리오가 동시에 발생할 수 있으며, 이 경우 성능 문제가 발생할 가능성이 높아집니다. 편집기 구성 또는 속도 제한과 관련된 오류의 경우 문제 해결 가이드를 사용하십시오.
대용량 트리거
대용량 트리거는 기본 이벤트가 자주 발생하는 트리거입니다. 예를 들어, 제품 이형 재고 수량 변경 트리거는 스토어의 모든 재고 변경에 대해 실행됩니다. 트리거의 볼륨은 워크플로의 모든 문제에 대한 승수 역할을 합니다. 예를 들어 워크플로가 100개의 제품을 가져오고 분당 1,000회 실행되면 분당 100,000개의 제품을 가져오게 됩니다. 이로 인해 성능 문제가 발생할 수 있습니다.
해결책: 더 적은 데이터를 사용하여 워크플로를 최적화하거나 대기 단계를 사용하여 워크플로를 분할하십시오.
동일한 트리거를 사용하는 여러 워크플로
Flow에서는 동일한 트리거를 사용하여 둘 이상의 워크플로를 구축할 수 있습니다. 이러한 워크플로는 이벤트가 발생할 때 서로 병렬로 실행됩니다. 동일한 트리거를 사용하는 워크플로를 너무 많이 실행하면 다음과 같은 이유로 문제가 발생할 수 있습니다.
- 워크플로가 서로 충돌할 수 있습니다.
- 워크플로가 동시에 데이터를 가져오고 API를 호출하려고 시도하지만 스토어는 Shopify API 한도에 의해 한 번에 처리할 수 있는 요청 수가 제한됩니다.
해결책: 동일한 트리거를 사용하는 워크플로를 단일 워크플로로 결합하십시오. 이를 통해 각 워크플로가 실행되는 시기를 제어하여 서로 충돌하지 않도록 할 수 있습니다. 워크플로 결합은 워크플로가 많은 데이터를 검색하지 않거나 검색하는 데이터가 동일한 경우 특히 유용합니다. 워크플로가 서로 다른 데이터를 많이 검색하는 경우 워크플로를 분리하여 유지하는 것이 더 나은 성능을 얻을 수 있습니다.
목록 또는 잘못된 데이터 사용
워크플로를 구축할 때 제품이나 주문과 같은 개체 목록을 사용할 수 있습니다. 개체 목록을 사용하면 Flow가 목록의 모든 개체를 가져옵니다. 목록에 데이터가 많은 경우 문제가 될 수 있습니다.
또 다른 일반적인 문제는 실수로 잘못된 데이터를 선택하는 것입니다. 예를 들어 주문에서 제품 데이터를 확인하기 위해 order / line items / product / tags 대신 order / publication / products / tags를 선택했을 수 있습니다. 첫 번째 결과는 주문에 있는 제품을 확인하려는 의도와 달리 게시의 모든 제품을 가져오므로 일반적으로 잘못된 결과입니다. 이렇게 큰 목록을 선택하면 성능 문제가 발생할 수 있으며 잘못된 목록을 선택하면 자동화가 잘못된 작업을 수행할 수 있습니다.
해결책: 필요한 데이터를 신중하게 선택하고 필요하지 않은 경우에는 목록 사용을 피하십시오. 워크플로를 테스트하여 예상대로 작동하는지 확인하십시오.
메타 필드
개별 메타 필드 또는 메타 객체 데이터를 가져오는 것은 성능 문제를 일으키지 않습니다. 그러나 일반적인 문제는 metafields 목록을 선택하고 리소스의 모든 메타 필드를 반복하는 것입니다. value 필드에 HTML 개체를 사용하는 경우와 같이 많은 데이터가 포함되어 있으면 많은 데이터가 처리되어 성능 문제가 발생할 수 있습니다.
해결책: metafields 대신 metafield 개체를 사용하십시오.
데이터 가져오기 작업의 과도한 사용
주문 데이터 가져오기와 같은 데이터 가져오기 작업을 사용하는 워크플로는 데이터 가져오기 작업에서 워크플로당 최대 100개의 개체를 반환하도록 설계되었습니다. 100개 이상의 개체를 처리하면 성능 문제가 발생할 수 있습니다.
해결책: 워크플로를 더 자주 실행하여 쿼리가 100개 이상의 결과를 반환할 필요가 없도록 하십시오. 반복적인 쿼리를 만드는 대신 동일한 데이터 가져오기 작업을 재사용하십시오.
데이터 가져오기 작업에 쿼리 필터 없음
데이터 가져오기 작업은 Shopify API를 호출합니다. 쿼리가 없는 경우 API는 모든 리소스를 반환하거나 아무것도 반환하지 않습니다. 이로 인해 성능 문제가 발생할 수 있으며, 나중에 워크플로에서 반환된 데이터를 사용할 때 스토어에서 잘못된 작업이 수행될 수도 있습니다.
해결책: 데이터 가져오기 작업에 항상 쿼리 필터를 포함하십시오.
데이터 가져오기 작업의 잘못된 쿼리 필터
데이터 가져오기 쿼리는 제한된 쿼리 필터 집합, 특정 구문 및 필터에 사용할 수 있는 특정 값 집합을 지원합니다. 잘못된 필터, 필터 값 또는 구문을 입력하면 전체 쿼리가 무시될 수 있으며, 이는 쿼리 필터가 없는 경우와 유사한 문제를 일으킬 수 있습니다.
해결책: Flow의 작업에서 제공하는 설명서를 사용하여 사용 가능한 쿼리 필터 목록을 찾으십시오. 항상 쿼리 필터를 테스트하여 예상 데이터를 반환하는지 확인하십시오. Flow의 로그 출력 작업을 사용하여 반환된 데이터를 검토하거나, Postman과 같은 API 클라이언트 또는 GraphiQL 앱을 통해 Shopify Admin API를 직접 호출할 수 있습니다.
일반적인 성능 문제에 대한 추가 해결책
대기 단계를 사용하여 데이터 가져오기 지연
대기 단계를 사용하면 지정된 시간 동안 워크플로를 일시 중지할 수 있지만 워크플로를 최적화하는 데에도 사용할 수 있습니다. 각 대기 단계는 워크플로 실행을 별도의 단계로 효과적으로 분할합니다. 워크플로가 실행되면 첫 번째 대기 단계까지 필요한 데이터를 자동으로 가져옵니다(그리고 대기 단계 이후 나머지 워크플로에 대한 데이터를 다시 가져옵니다).
워크플로가 대용량 트리거를 사용하고 많은 데이터를 가져오지만 가끔씩만 작업을 수행하는 경우, 조건 및 대기 단계 쌍 다음에 복잡한 데이터나 로직을 배치할 수 있습니다. 예:
- 트리거: 제품 이형 재고 수량 변경.
- 조건: 제품이 컬렉션에 있는지 확인.
- true인 경우, 작업: 2초 대기.
- 작업: 고객에게 이메일 보내기(많은 데이터 포함).
이 예에서 4단계에 필요한 데이터는 대기 단계가 완료된 후에만 쿼리됩니다. 조건이 일반적으로 false인 경우 이는 워크플로가 더 빠르고 효율적으로 실행됨을 의미합니다.
최적화하지 말아야 할 사항
여러 작업에서 동일한 데이터 사용
여러 단계에서 동일한 필드를 사용하는 경우 Flow는 해당 필드의 사용을 분석하고 데이터를 한 번만 가져옵니다. 즉, 성능에 대한 걱정 없이 원하는 만큼 데이터를 사용할 수 있습니다.