Source: Dev.to
번역을 진행하려면 번역하고자 하는 본문 내용을 제공해 주시겠어요?
본문을 알려주시면 원본 형식과 마크다운을 유지하면서 한국어로 번역해 드리겠습니다.
Overview
Azure Logic Apps Standard는 Azure Table Storage를 기본 영속성 계층으로 사용합니다:
이 문서는 테이블 아키텍처, 명명 규칙 및 스키마 패턴에 대한 포괄적인 참고 자료를 제공합니다.
테이블 카테고리
Logic Apps Standard는 데이터를 두 가지 별도 테이블 카테고리로 구성합니다:
| 카테고리 | 범위 | 목적 |
|---|
| 기본 테이블 | Logic App 리소스 | 전체 워크플로우에 걸친 공유 런타임 메타데이터 |
| 플로우 테이블 | 개별 워크플로우 | 워크플로우당 격리된 실행 데이터 |
이 분리는 워크플로우 격리, 수평 확장, 및 독립적인 수명 주기 관리를 가능하게 합니다.
기본 테이블 (앱‑수준)
기본 테이블은 전체 Logic App 리소스에 적용되는 메타데이터를 저장합니다. 하나의 Logic App에 포함된 모든 워크플로는 이 테이블들을 공유합니다.
테이블‑명명 패턴
flow{LAIdentifier}{suffix}
| 구성 요소 | 설명 |
|---|
| LAIdentifier | MurmurHash64(LogicAppName)의 처음 15자 |
| suffix | 테이블 유형 식별자 (아래 목록 참조) |
기본 테이블 유형
| 테이블 접미사 | 목적 | 핵심 데이터 |
|---|
flows | 마스터 워크플로 레지스트리 | 워크플로 정의, 상태, CU 할당 |
flowruntimecontext | 런타임 실행 컨텍스트 | 플로우 상태, 실행 클러스터 유형, 런타임 구성 |
flowaccesskeys | 워크플로 액세스 키 | 워크플로 API 접근을 위한 기본/보조 키 |
flowsubscriptions | 구독 등록 | 테넌트 등록, 구독 상태 |
flowsubscriptionsummary | 워크플로 수 및 요약 | 상태별 플로우 수 (활성/비활성) |
jobdefinitions | 작업 스케줄러 메타데이터 | 실행 상태, 재시도 구성, 반복 일정 |
예시
Logic App 이름이 **OrderProcessing**인 경우:
LAIdentifier = flow7365adc025615f3
결과적인 기본 테이블:
flow7365adc025615f3flows
flow7365adc025615f3flowruntimecontext
flow7365adc025615f3flowaccesskeys
flow7365adc025615f3flowsubscriptions
flow7365adc025615f3flowsubscriptionsummary
flow7365adc025615f3jobdefinitions
흐름 테이블 (워크플로 수준)
흐름 테이블은 각 워크플로에 대한 실행 데이터를 저장합니다. 각 워크플로마다 고유한 격리된 테이블 세트를 가집니다.
테이블 명명 패턴
flow{LAIdentifier}{WFIdentifier}{suffix}
| 자리표시자 | 설명 |
|---|
| LAIdentifier | MurmurHash64(LogicAppName) 의 처음 15자 |
| WFIdentifier | MurmurHash64(WorkflowId) 의 처음 15자 |
| suffix | 테이블 유형 식별자 (예: flows, runs, …) |
흐름 테이블 유형
| 테이블 접미사 | 목적 | 저장되는 핵심 데이터 |
|---|
flows | 워크플로 정의 캐시 | 최신 정의, 매개변수, 런타임 컨텍스트, CU |
runs | 실행 메타데이터 | 실행 상태, 타이밍, 트리거 정보, 상관 관계 ID |
histories | 트리거 기록 | 트리거 발생, 평가 결과, 입력/출력 링크 |
actions | 액션 실행 | 액션 상태, 타이밍, 입력/출력 Blob 링크 |
variables | 워크플로 변수 | 변수 이름, 데이터 유형, 값 링크 |
concurrentruns | 동시 실행 추적 | 활성 실행 조정 (동시성이 활성화된 경우) |
날짜가 포함된 테이블
액션 관련 테이블은 확장성을 위해 날짜별로 파티션됩니다:
{WFIdentifier}yyyyMMddT000000Z{suffix}
예시: 1c859134ef297b720250114T000000Zactions
예시
워크플로 ProcessOrder 가 OrderProcessing Logic App에 있는 경우:
LAIdentifier = flow7365adc025615f3
WFIdentifier = 1c859134ef297b7
결과 테이블:
flow7365adc025615f31c859134ef297b7flows
flow7365adc025615f31c859134ef297b7runs
flow7365adc025615f31c859134ef297b7histories
flow7365adc025615f31c859134ef297b720250114T000000Zactions
flow7365adc025615f31c859134ef297b720250114T000000Zvariables
테이블 주요 필드
기본 Flows 테이블 (마스터 레지스트리)
| Field | Description |
|---|
FlowId | 고유 워크플로 식별자 (GUID) |
FlowName | 워크플로 이름 |
Kind | 워크플로 유형 (Stateful / Stateless) |
State | Enabled 또는 Disabled |
ScaleUnit | CU 할당 (CU00, CU01, …) |
DefinitionCompressed | 압축된 워크플로 JSON 정의 |
ParametersCompressed | 압축된 워크플로 매개변수 |
RuntimeConfiguration | 보존 설정, 운영 옵션 |
CreatedTime / ChangedTime | 라이프사이클 타임스탬프 |
FlowRuntimeContext 테이블
| Field | Description |
|---|
FlowId | 워크플로 식별자 |
FlowState | 현재 워크플로 상태 |
FlowExecutionClusterType | 실행 클러스터 (Classic 등) |
Kind | 워크플로 유형 |
RuntimeConfiguration | 런타임 설정 JSON |
FlowSequenceId | 시퀀스 식별자 |
FlowAccessKeys 테이블
| Field | Description |
|---|
FlowId | 워크플로 식별자 |
FlowAccessKeyName | 키 이름 (예: default) |
PrimaryKey | 기본 액세스 키 |
SecondaryKey | 보조 액세스 키 |
FlowSubscriptions 테이블
| Field | Description |
|---|
SubscriptionId | Azure 구독 식별자 |
State | 등록 상태 (Registered 등) |
Properties | 테넌트 ID 및 등록된 기능 JSON |
RegistrationDate | 구독 등록 타임스탬프 |
FlowSubscriptionSummary 테이블
| Field | Description |
|---|
FlowCountsByState | 활성/비활성 워크플로 수를 포함한 JSON |
FlowId / FlowName | 워크플로 참조 (워크플로별 항목용) |
State | 워크플로 상태 |
ScaleUnit | CU 할당 |
DefinitionCompressed | 캐시된 압축 정의 |
JobDefinitions 테이블
| Field | Description |
|---|
JobId | 고유 작업 식별자 |
JobPartition | 작업 파티션 키 |
Callback | 작업 콜백 유형 (예: LinearSequencerJob) |
State | 작업 상태 (Completed, Waiting, …) |
ExecutionState | 현재 실행 상태 |
StartTime / EndTime | 작업 스케줄링 기간 |
NextExecutionTime | 다음 예정 실행 시간 |
이 참조는 Azure Logic Apps Standard의 영속성 레이어를 이해하거나 문제를 해결해야 하는 개발자, 아키텍트 및 운영 엔지니어를 위한 것입니다.
재발 및 재시도 구성
| 설정 | 설명 |
|---|
| RepeatMode / RepeatUnit / RepeatInterval | 재발 구성 |
| RetryMode / RetryCount / RetryInterval | 재시도 구성 |
| CurrentExecutionCount | 전체 실행 횟수 |
| LastExecutionStatus / LastExecutionTime | 가장 최근 실행 정보 |
| BinaryMetadata00‑15 | 압축된 작업 메타데이터 청크 |
Runs Table
| Field | Description |
|---|
| FlowId / FlowName | 워크플로에 대한 참조 |
| Status | Succeeded, Failed, Running, Cancelled |
| CreatedTime / EndTime | 실행에 대한 타임스탬프 |
| TriggerName | 실행을 시작한 트리거 이름 |
| CorrelationId | 요청 상관관계 식별자 |
| ClientTrackingId | 클라이언트 제공 추적 식별자 |
| TriggerCompressed | 트리거의 압축된 페이로드 |
| OutputsCompressed | 실행 출력의 압축된 페이로드 |
Histories Table (Trigger History)
| 필드 | 설명 |
|---|
HistoryName | 히스토리 항목 식별자 |
TriggerName | 트리거 참조 |
Fired | 불리언 – 트리거가 실제로 실행되었는지 여부 |
Status | 트리거 평가 결과 |
InputsLinkCompressed | 트리거 입력에 대한 링크 (압축) |
OutputsLinkCompressed | 트리거 출력에 대한 링크 (압축) |
TrackingId | 상관 관계 추적 식별자 |
작업 테이블
| 필드 | 설명 |
|---|
| ActionName | 작업의 식별자 |
| ActionRepetitionName | 루프 반복 인덱스 (예: 000000) |
| Status | Succeeded, Skipped, Failed |
| Code | 결과 코드 (OK, ActionSkipped 등) |
| CreatedTime / CompletedTime | 작업이 시작되고 완료된 시점의 타임스탬프 |
| InputsLinkCompressed | 압축된 입력 블롭에 대한 링크 |
| OutputsLinkCompressed | 압축된 출력 블롭에 대한 링크 |
| RepeatItemIndex | 루프 반복의 인덱스 |
| RepeatItemScopeName | 부모 루프 작업의 이름 |
| Error | 오류 세부 정보 (작업이 실패한 경우) |
Variables Table
| Field | Description |
|---|
| VariableName | 변수 식별자 |
| DataType | 변수 유형 (Integer, String, Boolean 등) |
| FlowId / FlowName | 워크플로우 참조 |
| FlowRunSequenceId | 실행 순서 식별자 |
| OperationId | 변수를 수정한 작업 |
| OperationSequenceId | 작업 순서 |
| InputsLinkCompressed | 변수 입력에 대한 링크 |
| ValueLinkCompressed | 현재 변수 값에 대한 링크 |
| CreatedTime / ChangedTime | 변수 수명 주기 타임스탬프 |
Workflow Flows Table (Per‑Workflow Cache)
| Field | Description |
|---|
| FlowId / FlowName | 워크플로 식별자 |
| Kind | 워크플로 유형 (Stateful) |
| State | Enabled 또는 Disabled |
| ScaleUnit | CU 할당 |
| DefinitionCompressed | 압축된 최신 워크플로 정의 |
| ParametersCompressed | 압축된 매개변수 |
| RuntimeConfiguration | 런타임 설정 JSON |
| RuntimeContext | 압축된 런타임 컨텍스트 |
| FlowSequenceId | 정의 시퀀스 ID |
| FlowUpdatedTime | 마지막 정의 업데이트 시간 |
식별자 생성
Logic Apps는 MurmurHash64를 사용하여 결정적이며 충돌 방지 식별자를 생성합니다.
알고리즘
// Generate Logic App identifier (LAIdentifier)
string laIdentifier = "flow" + MurmurHash64(logicAppName).Substring(0, 15);
// Generate Workflow identifier (WFIdentifier)
string wfIdentifier = MurmurHash64(workflowId).Substring(0, 15);
// Build the complete table name
string tableName = laIdentifier + wfIdentifier + suffix;
제약 조건
- 테이블 이름: 최대 63자 (Azure Table Storage 제한)
- 문자: 소문자 영숫자만
- 해시 잘라내기: 15자는 충분한 고유성을 제공합니다
빠른 참고
테이블‑이름 형식
Base: flow{LAIdentifier}{suffix}
Flow: flow{LAIdentifier}{WFIdentifier}{suffix}
Dated: flow{LAIdentifier}{WFIdentifier}{yyyyMMddT000000Z}{suffix}
일반적인 접미사
| Suffix | Level | Purpose |
|---|
flows | Both | 정의 |
runs | Flow | 실행 기록 |
actions | Flow | 작업 실행 |
flowsubscriptions | Base | 트리거 구독 |
jobdefinitions | Base | 예약 작업 |