Azure Logic Apps를 사용하는 워크플로의 맵으로 Liquid 템플릿을 사용하여 JSON 및 XML 변환
적용 대상: Azure Logic Apps(사용량 + 표준)
논리 앱 워크플로에서 기본 JSON 변환을 수행하려는 경우 빌드 작업 또는 JSON 구문 분석 작업과 같은 기본 제공 데이터 작업을 사용할 수 있습니다. 그러나 일부 시나리오에는 반복, 제어 흐름 및 변수와 같은 요소를 포함하는 복잡한 고급 변환이 필요할 수 있습니다. JSON에서 JSON으로, JSON에서 텍스트로, XML에서 JSON으로 또는 XML에서 텍스트로 변환의 경우 Liquid 오픈 소스 템플릿 언어를 사용하여 필요한 매핑 또는 변환을 설명하는 템플릿을 만들 수 있습니다. 워크플로에 Liquid 기본 제공 작업을 추가할 때 이 템플릿을 선택할 수 있습니다. 다중 테넌트 사용량 논리 앱 워크플로 및 단일 테넌트 표준 논리 앱 워크플로에서 Liquid 작업을 사용할 수 있습니다.
사용할 수 있는 Liquid 트리거는 없지만, 아무 트리거 또는 작업을 사용하여 원본 JSON 또는 XML 콘텐츠를 워크플로에 공급할 수 있습니다. 예를 들어 기본 제공 커넥터 트리거, Azure Logic Apps 또는 다른 앱에서 사용할 수 있는 관리형 커넥터 트리거 또는 Azure 호스팅 커넥터 트리거를 사용할 수 있습니다.
이 문서에서는 다음 작업을 완료하는 방법을 보여 줍니다.
- Liquid 템플릿을 생성합니다.
- 사용량 논리 앱 워크플로의 경우 통합 계정에 템플릿을 업로드하거나 모든 하위 워크플로에서 사용하기 위해 표준 논리 앱 리소스에 템플릿을 업로드합니다.
- 워크플로에 Liquid 작업을 추가합니다.
- 사용하려는 맵으로 템플릿을 선택합니다.
자세한 내용은 다음 설명서를 검토하세요.
- Azure Logic Apps에서 데이터 작업 수행
- Liquid 오픈 소스 템플릿 언어
- 사용량 및 표준 논리 앱
- 통합 계정 기본 제공 커넥터
- Azure Logic Apps용 기본 제공 커넥터 개요
- Azure Logic Apps의 관리 또는 Azure 호스팅 커넥터 개요 및 Azure Logic Apps의 관리 또는 Azure 호스팅 커넥터
필수 조건
Azure 계정 및 구독 구독이 없는 경우 Azure 체험 계정에 등록합니다.
논리 앱 리소스 및 워크플로. Liquid 작업에는 사용 가능한 트리거가 없으므로 워크플로에 최소한의 트리거가 포함되어야 합니다. 자세한 내용은 다음 설명서를 참조하세요.
사용량 또는 표준 논리 앱 워크플로에서 작업하는지 여부에 따라 통합 계정 리소스가 필요합니다. 일반적으로 엔터프라이즈 통합 및 B2B 워크플로에서 사용할 아티팩트를 정의하고 저장하려는 경우 이 리소스가 필요합니다.
Important
함께 작업하려면 통합 계정과 논리 앱 리소스가 모두 동일한 Azure 구독 및 Azure 지역에 있어야 합니다.
사용량 논리 앱 워크플로에서 작업하는 경우 통합 계정에 논리 앱 리소스에 대한 링크가 필요합니다.
표준 논리 앱 워크플로에서 작업하는 경우 다음 시나리오에 따라 통합 계정을 논리 앱 리소스에 연결하거나 논리 앱 리소스에 직접 맵을 업로드하거나 둘 다 할 수 있습니다.
필요하거나 사용하려는 아티팩트가 있는 통합 계정이 이미 있는 경우 아티팩트를 사용하려는 여러 표준 논리 앱 리소스에 통합 계정을 연결할 수 있습니다. 이렇게 하면 각 개별 논리 앱에 맵을 업로드할 필요가 없습니다. 자세한 내용은 논리 앱 리소스를 통합 계정에 연결을 참조하세요.
기본 제공 커넥터인 Liquid를 사용하면 이전에 논리 앱 리소스 또는 연결된 통합 계정에 업로드한 맵을 선택할 수 있지만, 둘 다 선택할 수는 없습니다. 그런 다음 동일한 논리 앱 리소스 내의 모든 하위 워크플로에서 이러한 아티팩트를 사용할 수 있습니다.
따라서 통합 계정이 없거나 필요한 경우 업로드 옵션을 사용할 수 있습니다. 그렇지 않은 경우 연결 옵션을 사용할 수 있습니다. 어느 쪽이든 동일한 논리 앱 리소스 내의 모든 하위 워크플로에서 이러한 아티팩트를 사용할 수 있습니다.
Liquid 템플릿 언어에 대한 기본 지식 Azure Logic Apps는 DotLiquid 2.0.361을 사용합니다.
참고 항목
JSON을 JSON으로 변환이라는 Liquid 작업은 Liquid에 대한 DotLiquid 구현을 따르며, Liquid에 대한 Shopify 구현과는 특정 경우에 다릅니다. 자세한 내용은 Liquid 템플릿 고려 사항을 참조하세요.
솔루션을 테스트하기 위해 HTTP 요청을 보낼 수 있는 도구를 설치하거나 사용합니다. 예를 들면 다음과 같습니다.
- Visual Studio Marketplace의 확장이 포함된 Visual Studio Code
- PowerShell Invoke-RestMethod
- Microsoft Edge - 네트워크 콘솔 도구
- Bruno
- curl
주의
자격 증명, 비밀, 액세스 토큰, API 키 및 기타 유사한 정보와 같은 중요한 데이터가 있는 시나리오의 경우 필요한 보안 기능으로 데이터를 보호하고, 오프라인 또는 로컬로 작동하며, 데이터를 클라우드에 동기화하지 않고, 온라인 계정에 로그인할 필요가 없는 도구를 사용해야 합니다. 이렇게 하면 중요한 데이터가 대중에게 노출되는 위험을 줄일 수 있습니다.
1단계: 템플릿 만들기
논리 앱 워크플로에서 Liquid 변환을 수행하려면, 먼저 원하는 매핑을 정의하는 Liquid 템플릿을 생성해야 합니다.
JSON 변환을 위한 맵으로 사용할 Liquid 템플릿을 생성합니다. 원하는 편집 도구를 사용할 수 있습니다.
이 문서의 JSON에서 JSON으로 변환 예에서는 다음 샘플 Liquid 템플릿을 사용합니다.
{%- assign deviceList = content.devices | Split: ', ' -%} { "fullName": "{{content.firstName | Append: ' ' | Append: content.lastName}}", "firstNameUpperCase": "{{content.firstName | Upcase}}", "phoneAreaCode": "{{content.phone | Slice: 1, 3}}", "devices" : [ {%- for device in deviceList -%} {%- if forloop.Last == true -%} "{{device}}" {%- else -%} "{{device}}", {%- endif -%} {%- endfor -%} ] }
Liquid 템플릿(.liquid) 파일 확장자를 사용하여 템플릿을 저장합니다. 이 예에서는 SimpleJsonToJsonTemplate.liquid를 사용합니다.
2단계: Liquid 템플릿 업로드
Liquid 템플릿을 만든 후 이제 다음 시나리오에 따라 템플릿을 업로드해야 합니다.
사용량 논리 앱 워크플로에서 작업하는 경우 템플릿을 통합 계정에 업로드합니다.
표준 논리 앱 워크플로에서 작업하는 경우 템플릿을 통합 계정에 업로드하거나 템플릿을 논리 앱 리소스에 업로드할 수 있습니다.
통합 계정에 템플릿 업로드
Azure Portal에서 Azure 계정 자격 증명을 사용하여 로그인합니다.
Azure Portal 검색 상자에 통합 계정을 입력하고 통합 계정을 선택합니다.
통합 계정 찾기 및 선택.
통합 계정의 탐색 메뉴에 있는 설정에서 맵을 선택합니다.
맵 창에서 추가를 선택합니다. 맵에 대한 다음 정보를 제공합니다.
속성 값 설명 이름 JsonToJsonTemplate
맵의 이름이며, 이 예제에서는 "JsonToJsonTemplate"입니다. 맵 유형 Liquid 맵의 형식입니다. JSON부터 JSON 변환의 경우 Liquid를 선택해야 합니다. Map SimpleJsonToJsonTemplate.liquid
변환에 사용할 기존 Liquid 템플릿이나 맵 파일이며 이 예제에서는 "SimpleJsonToJsonTemplate.liquid"입니다. 이 파일을 찾으려면 파일 선택기를 사용할 수 있습니다. 맵 크기 제한에 대해서는 제한 및 구성을 참조하세요.
표준 논리 앱에 템플릿 업로드
Azure Portal에서 논리 앱 리소스를 찾아 엽니다. 워크플로 수준이 아니라 리소스 수준에 있는지 확인합니다.
논리 앱 리소스의 탐색 메뉴에 있는 아티팩트에서 맵을 선택합니다.
맵 창 도구 모음에서 추가를 선택합니다.
맵 추가 창에서 템플릿에 대한 다음 정보를 제공합니다.
속성 값 설명 이름 JsonToJsonTemplate
맵의 이름이며, 이 예제에서는 "JsonToJsonTemplate"입니다. 맵 유형 Liquid 맵의 형식입니다. JSON부터 JSON 변환의 경우 Liquid를 선택해야 합니다. Map SimpleJsonToJsonTemplate.liquid
변환에 사용할 기존 Liquid 템플릿이나 맵 파일이며 이 예제에서는 "SimpleJsonToJsonTemplate.liquid"입니다. 이 파일을 찾으려면 파일 선택기를 사용할 수 있습니다. 맵 크기 제한에 대해서는 제한 및 구성을 참조하세요. 완료되면 확인을 선택합니다.
맵 파일 업로드가 완료되면 맵 목록에 해당 맵이 나타납니다. 통합 계정의 개요 페이지에 있는 아티팩트에서 업로드한 맵이 표시됩니다.
3단계: Liquid 변형 작업 추가
다음 단계에서는 사용량 및 표준 논리 앱 워크플로에 대한 Liquid 변환 작업을 추가하는 방법을 보여 줍니다.
아직 열려 있지 않은 경우 Azure Portal의 디자이너에서 논리 앱 워크플로를 엽니다.
워크플로에 트리거 또는 워크플로에 필요한 다른 작업이 없는 경우 먼저 해당 작업을 추가합니다. Liquid 작업에는 사용할 수 있는 트리거가 없습니다.
이 예에서는 HTTP 요청을 수신하는 경우라는 요청 트리거를 사용하여 계속합니다.
워크플로 디자이너의 Liquid 작업을 추가할 단계 아래에서 새 단계를 선택합니다.
작업 선택 검색 상자에서 모두를 선택합니다. 검색 상자에 liquid를 입력합니다.
작업 목록에서 사용하려는 Liquid 작업을 선택합니다.
이 예에서는 JSON을 JSON으로 변환이라는 작업을 계속 사용합니다.
작업의 콘텐츠 속성에서 다음 단계에 따라 변환하려는 트리거 또는 이전 작업의 JSON 출력을 제공합니다.
콘텐츠 상자 내부를 클릭하여 동적 콘텐츠 목록을 표시합니다.
동적 콘텐츠 목록에서 변환할 JSON 데이터를 선택합니다.
이 예의 경우 동적 콘텐츠 목록의 HTTP 요청이 수신될 때에서 트리거의 본문 콘텐츠 출력을 나타내는 본문 토큰을 선택합니다.
맵 목록에서 Liquid 템플릿을 선택합니다.
이 예는 JsonToJsonTemplate이라는 템플릿으로 계속됩니다.
참고 항목
맵 목록이 비어 있는 경우 논리 앱 리소스가 통합 계정에 연결되지 않았거나 통합 계정에 맵 파일이 없는 것입니다.
완료되면 작업은 다음 예와 유사합니다.
워크플로를 저장합니다. 디자이너 도구 모음에서 저장을 선택합니다.
워크플로 테스트
워크플로를 트리거하려면 다음 단계를 따릅니다.
요청 트리거에서 HTTP POST URL 속성을 찾아 URL을 복사합니다.
HTTP 요청 도구를 열고 지침에 따라 요청 트리거에서 예상하는 메서드를 포함하여 복사된 URL로 HTTP 요청을 보냅니다.
이 예에서는 URL과 함께
POST
메서드를 사용합니다.변환할 JSON 입력을 포함합니다. 예를 들면 다음과 같습니다.
{ "devices": "Surface, Mobile, Desktop computer, Monitors", "firstName": "Dean", "lastName": "Ledet", "phone": "(111)0001111" }
워크플로 실행이 완료되면 워크플로의 실행 기록으로 이동하여 JSON을 JSON으로 변환 작업의 입력과 출력을 검사합니다. 예를 들면 다음과 같습니다.
기타 Liquid 변형
Liquid를 사용하여 다음과 같은 다른 변환을 수행할 수 있습니다.
JSON을 텍스트로 변환
다음 Liquid 템플릿은 JSON을 텍스트로 변환하는 예를 보여 줍니다.
{{content.firstName | Append: ' ' | Append: content.lastName}}
다음 예는 샘플 입출력을 보여 줍니다.
XML에서 JSON으로 변환
다음 Liquid 템플릿은 XML을 JSON으로 변환하는 예를 보여 줍니다.
[{% JSONArrayFor item in content -%}
{{item}}
{% endJSONArrayFor -%}]
JSONArrayFor
루프는 후행 쉼표를 사용하지 않는 JSON 페이로드를 생성할 수 있도록 해주는 XML 입력에 대한 사용자 지정 반복 메커니즘입니다. 또한 사용자 지정 반복 메커니즘의 where
조건은 다른 Liquid 필터와 같은 요소의 값이 아닌 비교를 위해 XML 요소 이름을 사용합니다. 자세한 내용은 집합체 정책에 대한 심층 정보 - 모음을 참조하세요.
다음 예는 샘플 입출력을 보여 줍니다.
XML에서 텍스트로 변환
다음 Liquid 템플릿은 XML을 텍스트로 변환하는 예를 보여 줍니다.
{{content.firstName | Append: ' ' | Append: content.lastName}}
다음 예는 샘플 입출력을 보여 줍니다.
Liquid 템플릿 고려 사항
Liquid 템플릿은 Azure Logic Apps의 맵 파일 크기 제한을 따릅니다.
JSON을 JSON으로 변환 작업은 Liquid용 DotLiquid 구현을 따릅니다. 이 구현은 Liquid용 Shopify 구현에서의 .NET Framework 포트이며 특정 사례에서 달라집니다.
다음 목록은 알려진 차이점을 설명합니다.
JSON을 JSON으로 변환 작업은 기본적으로 JSON, XML, HTML 등을 포함할 수 있는 문자열을 출력합니다. Liquid 작업은 Liquid 템플릿의 예상 텍스트 출력이 JSON 문자열임을 나타냅니다. 작업은 입력을 JSON 개체로 구문 분석하고, Liquid에서 JSON 구조를 해석할 수 있도록 래퍼를 적용하도록 논리 앱에 지시합니다. 변환 후, 작업은 텍스트 출력을 Liquid에서 JSON으로 구문 분석하도록 논리 앱에 지시합니다.
DotLiquid은 기본적으로 JSON을 인식하지 않으므로 백슬래시 문자(
\
)와 기타 예약된 JSON 문자를 이스케이프해야 합니다.템플릿이 Liquid 필터를 사용하는 경우, DotLiquid 및 C# 명명 규칙을 준수해야 합니다. 이 규칙은 문장의 첫 글자를 대문자로 표기합니다. 모든 Liquid 변환에 대해 템플릿의 필터 이름이 문장의 첫 글자를 대문자로 표기하는지 확인합니다. 그렇지 않으면 필터가 일치하지 않습니다.
예를 들어,
replace
필터를 사용하는 경우replace
이 아닌Replace
를 사용합니다. DotLiquid online에서 예시를 사용해 보는 경우에도 동일한 규칙이 적용됩니다. 자세한 내용은 Shopify Liquid 필터 및 DotLiquid Liquid 필터를 참조하세요. Shopify 사양에는 각 필터에 대한 예시가 포함되어 있으므로, 비교를 위해 DotLiquid - 온라인 사용해 보기에서 이러한 예시를 사용해 볼 수 있습니다.Shopify 확장 필터의
json
필터는 현재 DotLiquid에서 구현되지 않습니다. 일반적으로 이 필터를 사용하여 JSON 문자열 구문 분석용 텍스트 출력을 준비할 수 있지만, 대신Replace
필터를 사용해야 합니다.DotLiquid 구현의 표준
Replace
필터는 정규식(RegEx) 일치를 사용하는 반면, Shopify 구현은 간단한 문자열 일치를 사용합니다. 두 구현 모두 RegEx 예약 문자 또는 match 매개 변수에 이스케이프 문자를 사용할 때까지 동일한 방식으로 작동하는 것처럼 보입니다.예를 들어 RegEx 예약 백슬래시(
\
) 이스케이프 문자를 이스케이프하려면| Replace: '\', '\\'
이 아니라| Replace: '\\', '\\'
를 사용합니다. 다음 예시는 백슬래시 문자를 이스케이프하려고 할 때Replace
필터가 어떻게 다르게 동작하는지 보여줍니다. 이 버전이 성공적으로 작동하는 동안:{ "SampleText": "{{ 'The quick brown fox "jumped" over the sleeping dog\\' | Replace: '\\', '\\' | Replace: '"', '\"'}}"}
이 결과로:
{ "SampleText": "The quick brown fox \"jumped\" over the sleeping dog\\\\"}
이 버전은 실패합니다:
{ "SampleText": "{{ 'The quick brown fox "jumped" over the sleeping dog\\' | Replace: '\', '\\' | Replace: '"', '\"'}}"}
이 오류와 함께:
{ "SampleText": "Liquid error: parsing "\" - Illegal \ at end of pattern."}
자세한 내용은 RegEx 패턴 일치를 사용하는 표준 필터 바꾸기를 참조하세요.
DotLiquid 구현의
Sort
필터는 배열 또는 컬렉션의 항목을 속성별로 정렬하지만 다음과 같은 차이점이 있습니다.Shopify의 sort 동작이 아닌 Shopify의 sort_natural 동작을 따릅니다.
문자열-알파뉴메릭 순서로만 정렬합니다. 자세한 내용은 숫자 정렬을 참조하십시오.
대/소문자를 구분하지 않는 순서를 사용합니다. 자세한 내용은 정렬 필터가 Shopify 사양의 대/소문자 동작을 따르지 않음을 참조하세요.