
ETL: Extract-Transform-Load
데이터의 최종 목적은 sink
Azure Data Factory는 보고서를 작성하는데 기초되는 데이터의 반복적 적재에 사용
Azure Data Factory는 다양한 데이터 소스에서 데이터를 수집하고, 필요한 형태로 이동·변환·적재하는 데이터 통합 서비스이다. 이번 정리는 ADF의 개념, ETL/ELT 배경, 핵심 구성 요소, 그리고 Blob Storage의 CSV 데이터를 SQL Database로 복사하는 기본 실습 흐름까지 한 번에 정리한 내용이다.
데이터 기반 의사결정 중요성 증가함
기업은 데이터로부터 비즈니스 인사이트 도출 필요함
데이터 활용 목적:
데이터를 수집하고 저장하는 것만으로는 충분하지 않고, 분석에 적합한 형태로 가공한 뒤 실제 의사결정에 연결해야 가치가 생긴다. 자료에서도 수집/변환/저장 → 데이터 분석 → 비즈니스 인사이트 도출 흐름으로 설명한다.
| 구분 | 설명 |
|---|---|
| 위키백과 | 양, 품질, 사실, 통계 등의 형태로 된 의미의 단위 |
| 옥스포드 컴퓨터 용어 사전 | 프로그램을 운용할 수 있는 형태로 기호화·숫자화한 자료 |
| 네이버 사전 | 이론을 세우는 데 기초가 되는 사실 또는 바탕 자료 |
| 옥스포드 대사전 | 추론과 추정의 근거를 이루는 사실 |
| 유형 | 설명 |
|---|---|
| 정성적 데이터 | 언어, 문자 등 비정형 데이터 |
| 정량적 데이터 | 숫자, 도형, 기호 등 정형 데이터 |
| 암묵지 | 학습, 체험 등으로 개인이 습득한 무형 지식 |
| 형식지 | 문서화되어 전달·공유가 가능한 지식 |
정형 데이터는 저장·검색·분석에 유리하고, 비정형 데이터는 활용 가치가 크지만 전처리와 통합이 더 어렵다.
| 단계 | 설명 |
|---|---|
| Data | 관찰을 통해 수집된 원시 데이터 |
| Information | 정제·가공되어 의미가 부여된 데이터 |
| Knowledge | 연결된 정보 패턴을 이해하여 내재화한 결과 |
| Wisdom | 근본 원리에 대한 깊은 이해를 바탕으로 한 의사결정 |
| 단계 | 예시 |
|---|---|
| Data | A마트 식빵 100원, B마트 식빵 200원 |
| Information | A마트가 B마트보다 식빵이 더 쌈 |
| Knowledge | 식빵은 A마트에서 사는 것이 좋음 |
| Wisdom | 다른 식료품도 A마트가 더 저렴할 가능성이 높음 |
즉, 데이터는 그 자체로 끝나지 않고, 가공과 해석을 거쳐 정보·지식·지혜로 발전해야 실제 비즈니스 가치가 된다.
| 구분 | OLTP | OLAP |
|---|---|---|
| 목적 | 실시간 데이터 처리 | 데이터 분석 및 의사결정 |
| 데이터 형태 | 원시 데이터 | 정제·집계된 데이터 |
| 구조 | 정규화된 스키마 중심 | 분석 친화적 구조 |
| 특징 | 거래 시스템 중심 | 다차원 분석 및 리포트 중심 |
OLTP는 운영계 시스템이고, OLAP는 분석계 시스템이다. ADF는 주로 운영계의 데이터를 분석계 저장소로 이동시키는 역할과 맞닿아 있다.
| 단계 | 도구 | 역할 |
|---|---|---|
| 수집·정제·결합 | Azure Data Factory | ETL/ELT, 데이터 파이프라인 구축 |
| 분석·모델링 | Azure Machine Learning | EDA, Feature Engineering, 모델 학습·예측 |
| 시각화·의사결정 | Power BI | 리포트, 대시보드, 결과 공유 |
ADF는 데이터를 준비하는 계층이고, AML은 패턴을 학습하는 계층이며, Power BI는 결과를 보여주는 계층이라고 보면 이해가 쉽다.
| 항목 | 설명 |
|---|---|
| 파일 포맷 | 형식 변환이 필요한지 확인해야 함 |
| 질의 처리 | 쿼리 성능 및 실행 계획 확인 필요함 |
| JSON 구조 | 스키마 변경 필요 여부 점검해야 함 |
| 결측치 | 누락 데이터 처리 기준 필요함 |
| 보안 | 민감 데이터 보호 방안 필요함 |
| 중복 데이터 | 여러 소스 통합 시 중복 제거 필요함 |
| 비용·인력 | 운영·이관에 드는 비용 고려해야 함 |
자료에서는 이 과정을 복잡성, 정합성, 무결성, 보안성 문제로 정리한다.
핵심은 “데이터를 한곳에 통합하고, 권한 있는 사용자가 쉽게 활용할 수 있어야 한다”는 점이다.
| 요소 | 설명 |
|---|---|
| 통합 데이터 허브 | 모든 데이터를 한 곳에 통합하고 다양한 형식을 지원해야 함 |
| 데이터 통합 | 원천 데이터를 ETL/ELT 방식으로 추출·변환·적재해야 함 |
| Self-Service Access | 사용자가 필요한 데이터를 손쉽게 조회·활용할 수 있어야 함 |
| Right & Responsibility | 데이터 품질 책임과 활용 책임을 분리해 관리해야 함 |
ADF는 이 중에서도 특히 데이터 통합을 담당하는 대표 도구로 볼 수 있다.
| 구분 | ETL | ELT |
|---|---|---|
| 처리 순서 | 추출 → 변환 → 적재 | 추출 → 적재 → 변환 |
| 변환 위치 | 외부 시스템 | 대상 시스템 내부 |
| 실행 시간 | 잦은 데이터 이동으로 상대적으로 느림 | 병렬 처리 활용 가능해 빠름 |
| 장점 | 정제된 상태로 적재 가능 | 대용량 처리와 클라우드 환경에 유리 |
| 유연성 | 정해진 파이프라인 중심 | SQL/Spark로 유연하게 가공 가능 |
| 적합 환경 | 전통적인 DWH | 고성능 DWH, 레이크하우스 |
| 활용 예시 | 금융기관 정기 보고서 | 로그, 센서, ML 분석용 데이터 |
최근에는 대용량 비정형·반정형 데이터가 늘어나면서 ELT 방식이 더 자주 활용된다고 설명한다.
CDC는 데이터 소스에서 발생한 변경 사항만 감지해 추출하고 반영하는 방식이다.
| 단계 | 설명 |
|---|---|
| Detect | Insert, Update, Delete 같은 변경 이벤트 감지 |
| Capture | 변경 내용을 추출해 전달 가능한 형태로 준비 |
| Apply | 변경분만 대상 시스템에 반영해 동기화 유지 |
| 항목 | 설명 |
|---|---|
| 주요 목적 | 전체 재처리 없이 최신 상태 유지 |
| 처리 방식 | 실시간 또는 Near Real-Time |
| 주요 기술 | DB 로그, 트리거, 타임스탬프 비교, Debezium 등 |
| 장점 | 대용량 효율 처리, 실시간 분석 가능 |
| 활용 예시 | 실시간 대시보드, 복제 시스템, 이벤트 기반 아키텍처 |
즉, CDC는 ETL/ELT의 배치 처리 한계를 보완하는 실시간 데이터 처리 방식이다.
데이터 파이프라인은 원천 시스템에서 분석·활용 시스템까지 이어지는 전체 데이터 흐름을 자동화하는 구조다. 수집, 처리, 저장, 전달 전 단계를 연결한다.
| 단계 | 설명 |
|---|---|
| Ingest | 파일, DB, API, IoT 등에서 데이터 수집 |
| Process | 정제, 필터링, 변환, 결측치 처리, 집계 |
| Store | 데이터 웨어하우스, 데이터 레이크 등에 저장 |
| Deliver | 대시보드, 분석 시스템, 모델링 시스템 등에 전달 |
| 구성 요소 | 설명 |
|---|---|
| Data Source | 데이터베이스, 파일 시스템, API, 로그 등 원천 위치 |
| Extract | 소스에서 데이터를 읽어오는 단계 |
| Transform | 필터링, 조인, 포맷 변경, 집계 등 가공 단계 |
| Load | 대상(데이터 웨어하우스, 데이터레이크, NoSQL DB) 시스템에 저장하는 단계 |
| Orchestration | 전체 흐름 제어, 조건 분기, 재시도, 트리거 관리 |
| Monitoring & Alert | 성공/실패 감시, 알림, 로깅, 성능 분석 |
| Execution Environment | 정의된 파이프라인을 실제 실행하는 컴퓨팅 환경 |
ADF에서는 이 Execution Environment를 Integration Runtime이라고 부른다.
| 구분 | 구성 요소 | 설명 |
|---|---|---|
| 오케스트레이션 | 워크플로우 | 작업 순서와 흐름 정의 |
| 트리거 | 일정·이벤트·수동 실행 조건 설정 | |
| 조건 분기 및 반복 | 조건에 따른 분기와 루프 제어 | |
| 에러 처리 및 알림 | 실패 시 재시도, 로그, 알림 수행 | |
| 트랜스포메이션 | Extract | 데이터 추출 |
| Transform | 데이터 가공 | |
| Load | 데이터 적재 | |
| 사용자 정의 로직 | 커스텀 처리 코드 실행 |
ADF는 특히 오케스트레이션에 강점이 있고, 복잡한 변환은 외부 컴퓨팅 서비스와 함께 사용하는 구조가 자주 등장한다.
| 도구/플랫폼 | 실행 환경 명칭 | 설명 |
|---|---|---|
| Azure Data Factory | Integration Runtime | 컴퓨팅/실행 엔진(Azure/Self-Hosted/SSIS) |
| AWS Glue | Job Worker / Spark Environment | Spark 기반 실행 환경 |
| Apache Airflow | Worker / Executor | DAG를 실제로 실행하는 프로세스 |
| Google Dataflow | Worker / Runner | 파이프라인을 실행하는 관리형 워커 노드 |
| Talend | Job Server | Talend Job 실행 환경 |
파이프라인이 “무엇을 할지”를 정의한다면, Execution Environment는 “어디서 어떻게 실행할지”를 담당한다.

자료에서는 ADF를 배송 시스템에 비유한다. 출발지 서류보관함에서 서류를 집하해 처리한 뒤 목적지 서류보관함에 전달하는 흐름으로 설명한다. 이 비유에서 파이프라인은 전체 배송 계획, 액티비티는 개별 운송 작업, 데이터셋은 다루는 서류 묶음, 링크드 서비스는 출발지·도착지 정보, Integration Runtime은 실제 배송을 수행하는 엔진에 해당한다.


자료의 그림에서는 하나의 Pipeline 아래에 여러 Copy Activity가 들어갈 수 있고, 각 Activity는 입력 Dataset과 출력 Dataset을 가진다. 즉, 파이프라인은 큰 흐름이고 액티비티는 그 안에서 수행되는 세부 작업이다.
(원본 → 싱크)


기본 실습의 전체 구조는 다음과 같다. 자료의 아키텍처 그림에서 Blob Storage의 CSV 파일을 SQL Database 테이블로 복사하는 구조를 보여준다. 중간에는 ADF Pipeline, Integration Runtime, Linked Service, Dataset, Copy Activity가 위치한다.
Blob Storage (CSV)
↓
Linked Service
↓
Source Dataset
↓
Copy Activity
↓
Sink Dataset
↓
Linked Service
↓
SQL Database (Table)
| 구간 | 구성 |
|---|---|
| 원본 | Blob Storage의 CSV 파일 |
| 연결 정보 | Blob Linked Service |
| 원본 정의 | Source Dataset |
| 복사 작업 | Copy Activity |
| 목적지 정의 | Sink Dataset |
| 연결 정보 | SQL Linked Service |
| 목적지 | SQL Database Table |
| 실행 엔진 | Integration Runtime |
| 전체 제어 | Pipeline |
실습 데이터는 iris.csv와 iris-columns.sql 파일로 구성된다. iris.csv에는 SepalLength, SepalWidth, PetalLength, PetalWidth, Species 컬럼이 포함된 붓꽃 데이터가 들어 있다.

ADF 생성 시 설정한 주요 항목은 다음과 같다.
| 항목 | 설정 예시 |
|---|---|
| 이름 | 영문자, 숫자, 하이픈 조합 |
| 지역 | 자유롭게 지정 |
| 버전 | V2 |
| 리소스 그룹 | 방금 만든 그룹 선택 |
배포가 완료되면 Data Factory 리소스의 첫 화면에서 Studio를 시작할 수 있다.

SQL Database 생성 과정에서는 논리 서버도 함께 만든다.
| 항목 | 설정 예시 |
|---|---|
| 리소스 그룹 | 실습용 리소스 그룹 |
| 데이터베이스 이름 | 식별 가능한 이름 |
| 서버 | 새로 만들기 |
| 인증 방식 | SQL 인증 사용 |
| 워크로드 | 개발 |
| 컴퓨팅 계층 | DTU Basic |
| 최대 크기 | 2GB |
| 연결 방법 | Public Endpoint |
| 방화벽 | Azure 서비스 허용, 현재 클라이언트 IP 허용 |




Storage Account 생성 시 설정 항목은 다음과 같다.
| 항목 | 설정 예시 |
|---|---|
| 리소스 그룹 | 실습용 리소스 그룹 |
| 스토리지 계정 이름 | 기억하기 쉬운 이름 |
| 지역 | ADF와 동일 지역 |
| 기본 스토리지 유형 | Azure Blob Storage 또는 Azure Data Lake Storage Gen2 |
| 워크로드 | 기타 |
| 성능 | 표준 |
| 중복도 | GRS |
배포가 끝나면 Blob 서비스와 컨테이너를 생성해 원본 파일을 올릴 수 있다.

Storage Account에서 Blob service로 이동한 뒤 컨테이너를 생성한다. 자료 예시에서는 inputstorage라는 이름을 사용한다. 컨테이너는 비공개 상태로 생성된다.

생성한 컨테이너에 iris.csv 파일을 업로드한다. 업로드 후 파일을 클릭해 개요와 편집 화면을 확인할 수 있다.

자료의 편집 화면 예시에서는 다음과 같은 구조로 보인다.
| 컬럼 | 의미 |
|---|---|
| SepalLength | 꽃받침 길이 |
| SepalWidth | 꽃받침 너비 |
| PetalLength | 꽃잎 길이 |
| PetalWidth | 꽃잎 너비 |
| Species | 품종 |
자료에서는 실습 중 여러 리소스를 자주 오가야 하므로, 리소스 그룹·ADF·SQL Database·SQL Server·Storage Account를 대시보드에 고정하는 방식을 소개한다. 핀 아이콘으로 메뉴를 고정하고, 새 대시보드를 만들어 자주 쓰는 리소스를 한눈에 모아두면 이동이 편해진다.
| 리소스 | 용도 |
|---|---|
| Data Factory | 파이프라인 편집 및 실행 |
| SQL Database | 목적지 테이블 관리 |
| SQL Server | 방화벽 및 서버 설정 |
| Storage Account | 원본 CSV 업로드 |
| Resource Group | 전체 리소스 관리 |

좌상단 핀버튼 누르고 추가 가능
대시보드 접근은 좌상단 三 버튼 누르기


SQL Database 리소스로 이동한 뒤 쿼리 편집기에서 SQL 인증으로 로그인한다. 이후 iris-columns.sql의 내용을 복사해 실행하여 목적지 테이블을 만든다. 자료 예시에서는 Iris 테이블을 생성한다. 실행 후 Explorer에서 테이블과 컬럼이 보이고, Messages 영역에 Query executed successfully가 표시된다.

CREATE TABLE Iris (
SepalLength decimal(5,2),
SepalWidth decimal(5,2),
PetalLength decimal(5,2),
PetalWidth decimal(5,2),
Species nvarchar(100)
);

| 컬럼 | 타입 |
|---|---|
| SepalLength | decimal(5,2) |
| SepalWidth | decimal(5,2) |
| PetalLength | decimal(5,2) |
| PetalWidth | decimal(5,2) |
| Species | nvarchar(100) |
ADF 리소스에서 Studio 시작하기를 클릭한 뒤, 왼쪽의 연필 아이콘인 Author 메뉴로 이동한다. 여기서 파이프라인, 데이터셋, 연결된 서비스 등을 만들 수 있다.


자료의 화면 예시에서는 파이프라인 목록 오른쪽 메뉴에서 새 파이프라인을 클릭하고, 편집창이 열리면 우측 속성의 일반 메뉴에서 이름을 지정한다. 예시 이름은 Blob to SQL이다.

| 항목 | 예시 |
|---|---|
| 파이프라인 이름 | Blob to SQL |
| 역할 | 전체 데이터 복사 흐름 제어 |
파이프라인은 가장 상위의 작업 흐름 단위이며, 이후 여기에 Linked Service, Dataset, Copy Activity가 연결된다.

관리 메뉴에서 연결된 서비스를 선택하고 새로 만들기를 눌러 Blob Storage 연결 정보를 생성한다. 이 연결은 원본 CSV 파일이 있는 Storage Account를 가리킨다.


로컬에 있는걸 연결하고 싶으면 통합 런타임이 아닌 다른 런타임을 사용해야 한다.
생성 전 연결 테스트는 항상 해보자.





iris.csv데이터세트는 하나의 함수로 이해하면 됨

미리보기로 연결이 정상인지 확인

Azure SQL Database 선택


만들기가 비활성화됐다면 취소했다가 다시 생성하면 된다.
혹은 db, adf 네트워킹 설정을 다시 확인해보자.
같은 방식으로 SQL Database용 Linked Service를 생성한다. 이 연결은 SQL 서버 주소, 데이터베이스, 인증 정보 등을 사용해 목적지에 접속한다.

| 구분 | 연결 대상 | 역할 |
|---|---|---|
| 원본 Linked Service | Blob Storage | CSV 원본 연결 |
| 싱크 Linked Service | SQL Database | 대상 테이블 연결 |




| 구분 | 형식 | 연결 | 대상 |
|---|---|---|---|
| Source Dataset | CSV | Blob Linked Service | iris.csv |
| Sink Dataset | SQL Table | SQL Linked Service | Iris Table |

Copy Activity는 실습의 핵심이다. 원본 Dataset에서 데이터를 읽어 싱크 Dataset으로 복사한다. 자료의 실습 구성도에서는 Blob과 SQL 사이 중앙에 Copy Activity가 배치되고, 이후 강조 표시된 그림에서는 Dataset → Copy Activity → Dataset 구간이 하나의 핵심 처리 블록으로 묶여 있다.
좌측 데이터 복사를 드래그 앤 드랍




스키마 가져오기 선택


실무에서는 트리거를, 실습에서는 디버그를 사용(단일 테스트)

db의 쿼리편집기에서 확인

| 항목 | 설명 |
|---|---|
| 입력 | Source Dataset |
| 출력 | Sink Dataset |
| 기능 | 데이터 복사 및 기본 매핑 수행 |
| 위치 | Pipeline 내부 |

게시하지 않으면 저장이 안되므로 주의하자



모니터에서 확인

쿼리 편집기에서 확인

동일한 실행을 두 번하여 중복 발생으로 2배 count됨

매번 실행마다 delete 후 실행하도록 처리


Pipeline 아래에 여러 Activity가 들어갈 수 있다. 하나의 파이프라인 안에서 원본과 목적지가 다른 복사 작업을 여러 개 넣을 수도 있다.
여러 Activity가 같은 원본 Storage 또는 같은 SQL Database를 사용할 경우, 연결 정보는 하나의 Linked Service를 재사용한다. 즉, 연결을 중복 생성하지 않고 중앙에서 관리할 수 있다.
Copy Activity는 각각 원본 Dataset과 싱크 Dataset을 참조한다. Dataset은 실제 데이터 파일이나 테이블의 위치와 형식을 정의하므로, Activity가 데이터를 해석하는 기준이 된다.

이 전체 흐름의 목표는 Blob Storage의 CSV 데이터를 SQL Database 테이블로 복사하는 것이다.
| 항목 | 내용 |
|---|---|
| 데이터 문제 | 데이터 사일로, 이기종 데이터, 높은 운영 복잡성 |
| 해결 방향 | 데이터를 한곳에 통합하고 자동화된 파이프라인 구축 |
| 핵심 방식 | ETL, ELT, CDC |
| ADF 역할 | 데이터 이동·오케스트레이션 |
| 실행 엔진 | Integration Runtime |
| 실습 구조 | Blob CSV → Copy Activity → SQL Table |
Azure Data Factory는 데이터를 직접 분석하는 도구라기보다는, 분석 가능한 형태로 데이터를 연결하고 이동시키는 데이터 파이프라인 도구에 가깝다. 따라서 ADF를 이해할 때는 단순히 “복사 도구”로 보기보다, 원본 시스템과 분석 시스템 사이를 이어주는 오케스트레이션 계층으로 보는 것이 중요하다. 이번 실습도 결국 Blob Storage의 파일과 SQL Database의 테이블을 연결하면서, Pipeline·Activity·Dataset·Linked Service·Integration Runtime이 어떻게 협력하는지 익히는 과정이라고 볼 수 있다.
제공해주신 소스(03-30-2.01 매개변수화_v12.pdf)의 개요 부분 내용을 요약 없이 마크다운 형식으로 정리해 드립니다.
매개변수(Parameter)는 데이터 팩토리의 작업 수행 시 입력값으로 사용되는 값이며, 각 액티비티, 파이프라인, 데이터셋(Datasets) 등에서 사전에 정의된 값 또는 사용자 정의 값을 입력받을 수 있습니다. 매개변수화는 특히 프로덕션 환경에서 재사용성과 유지보수성 향상에 큰 효과가 있습니다.
파이프라인, 데이터세트 등에서 정의하는 외부 입력값으로, 실행 시 값을 주입받아 유연한 동작을 지원합니다.
| 항목 | 내용 |
|---|---|
| 주요 특성 | • 사전에 정의된 값 혹은 사용자 정의 가능 • 주로 실행 시점에 결정되는 정적인 값 • 런타임 시점에 값 전달 • 데이터세트, 파이프라인 등 다양한 요소에 적용 |
| 활용 목적 | • 동적 처리: 날짜별/부서별/환경별 분기 • 재사용성: 동일 파이프라인을 다양한 값으로 실행 • 유연성: 실행 시점에 변경 가능한 구성 |
| 활용 예시 | • 날짜별 파이프라인 실행: 특정 일자 데이터만 추출 • 환경 분기: Dev./Prod. 연결 서비스 자동 전환 • 부서별 로직: SQL 쿼리의 동적 적용 |
| 구문 예시 | @pipeline().parameters.inputDate |
파이프라인 실행 중에 값을 저장, 조회, 업데이트할 수 있는 내부 런타임 변수입니다.
| 항목 | 내용 |
|---|---|
| 주요 특성 | • 범위(scope): 파이프라인 단위(자식 파이프라인에 자동 전달되지 않음) • 런타임 수정 가능: Set Variable 액티비티로 값 변경 • 선언 시 초기값 지정 가능 • 지원 데이터 타입: String, Boolean, Int, Array |
| 활용 예시 | • 중간 연산값 관리: 복잡한 표현식 결과를 변수에 담아 재사용 • 재시도 카운터: 오류 발생 시 retryCount를 1씩 증가시켜 제어 • 루프 인덱스 누적: ForEach 반복 횟수 누적 혹은 조건부 루프 제어 • 상태 메시지: 각 단계 완료 후 상세 로그 저장 |
| 선언 구문 | "variables": { "retryCount": { "type": "Int", "defaultValue": 0 } } |
| 참조/할당 | 참조: @variables('retryCount')할당: @add(variables('retryCount'), 1) |
런타임에 동적으로 값의 연산, 변환, 판단을 수행하기 위해 다양한 함수를 포함하는 표현식을 활용합니다.
@concat('landing/', pipeline().parameters.region, '/', formatDateTime(utcNow(), 'yyyyMMdd'))@formatDateTime(addDays(utcNow(), -1), 'yyyy-MM-dd')@if(greater(activity('Lookup').output.count, 0), 'HasData', 'NoData')concat, formatDateTime, addDays, if, length, json.| 구분 | Parameter | Variable |
|---|---|---|
| 정의 | 파이프라인 실행 시 외부에서 주입받는 입력 값 | 파이프라인 실행 중 내부에서 생성, 조회, 업데이트 가능한 런타임 변수 |
| 적용 범위 | 파이프라인, 데이터세트, 연결 서비스 등 선언한 레벨에 한정됨 | 파이프라인 단위(자식 파이프라인에 전달되지 않음) |
| 런타임 변경 | 불가능 (정적 값) | Set Variable 액티비티로 언제든 변경 가능 |
| 참조 구문 | @pipeline().parameters.<이름> | @variables('<이름>') |
| 주요 활용 예 | 날짜 필터링, 환경 분기(environment) | 재시도 카운터 증가, 상태 메시지 저장 |



SQL Server에서 SQL 데이터베이스로 접속 후 쿼리편집기에서 추가











디버그




연결탭의 파일 경로에서 파일 이름 삭제

동적 콘텐츠 추가 - 하단의 매개 변수 선택



수동으로 입력 체크



원본 설정

싱크 설정

디버그 실행







데이터복사 추가


위에서부터 성공, 실패, 항상처리 시 다음 처리 연결 노드
백업이므로 output(원본) → input(싱크)


디버그

추가된것을 확인 가능


싱크 - 값에 동적 콘텐츠 추가 후 식 선택
1. String - concat

2. Date-utcNow

3. 쉼표 입력 후 .csv 입력

디버그 확인

• 예시 : SQL Server에서 사용되는 데이터베이스를 매개변수화
• 예시 : 파일 이름, Blob 컨테이너 등을 매개변수화
• pipeline 내에서 특정 값을 전달할 수 있도록 매개변수 사용
• 예시 : pipeline에서 특정 원본 파일을 특정 싱크 파일에 복사하도록 매개변수 지정
• Data Factory 수준에서 사용되는 매개변수
• 원하는 곳에서 참조 가능

파이프라인 매개변수 설정

파이프라인식 작성기에서 파라미터 추가

원본에도 동적 콘텐츠 추가

Copy data1쪽도 동일하게 처리
원본-동적콘텐츠추가

싱크-동적콘텐츠추가

디버그


이후 게시


| 구분 | Schedule Trigger | Tumbling Windows Trigger |
|---|---|---|
| 주기 유형 | 고정 주기 | 고정 간격 시간 구간 |
| 재시도 정책 | 없음 | 파이프라인 단위 재시도 지원 |
| 실행 관계 | Many-to-many | One-to-one |
| 상태 관리 | 이전 수행 상태와 무관 | 이전 파이프라인 상태 고려 |
| 실행 의존성 | 없음 | 다른 트리거에 의존 가능 |
| 적용 예 | 단순 정기 실행 | 시간 단위 안정적 처리 |



컨테이너: input, output 컨테이너를 생성하고 input에 iris.csv를 업로드합니다.

링크드 서비스: BlobStorage1 (Azure Blob Storage) 생성.
input output을 구분하지 않고 쓸 수 있도록 새로 생성

데이터세트: inputCSV1(input 컨테이너), outputCSV1(output 컨테이너) 생성. inputCSV1은 첫 번째 행을 머리글로 설정합니다.





파이프라인: pipeline1 생성 후 Copy Data 활동을 배치하고 원본과 싱크를 연결합니다.


매개변수화: 데이터세트에 fileName 매개변수를 생성하고 파일 경로에 @dataset().fileName 동적 콘텐츠를 추가합니다. 파이프라인 테스트 시 iris.csv를 입력하여 성공 여부를 확인합니다.





디버깅: 파이프라인의 원본, 싱크에 값 입력




트리거 생성: scheduleTrigger1 (형식: 일정, 주기: 15분) 생성 및 게시.
검증: 모니터링 탭에서 성공 상태와 생성된 파일을 확인합니다.

트리거 편집에서 주 단위 고급 되풀이 옵션 확인 가능

One-to-Many 실습: pipeline2(Wait 활동 포함)를 생성하고 기존 scheduleTrigger1에 연결하여 두 파이프라인이 동시 실행되는 것을 확인합니다.




파이프라인은 여러개지만 트리거는 동일한 트리거


관리-트리거에서 중지 후 삭제 가능

중괄호 아이콘 선택 시 트리거 코드 확인 가능


Tumbling Window는 오프셋 오류를 방지하기 위해 00초로 설정하는게 바람직

재시도 정책을 2로 하면 실패시 재시도를 최대 2번까지 함
오프셋은 보통 이전걸 참조해야하니 음수값을 많이 준다
창크기는 고정된 시간 기준으로 이전 몇개까지 진행됐던 걸 볼거냐를 설정 가능케 함
LoadData(Wait 3초)와 ProcessData(Wait 5초) 파이프라인을 준비합니다.TW_LoadData1 생성 후, TW_ProcessData1 생성 시 종속성 추가를 통해 TW_LoadData1이 성공한 후에만 실행되도록 설정합니다.



매번 변경사항마다 게시를 눌러야 적용됨을 잊지 말자
준비: fileName 매개변수를 사용하는 Copy CVS 파이프라인을 생성합니다.(입출력 전부 fileName 매개변수 사용, input output 구분만 주의)
트리거 생성: SE_NewCSV (이벤트: 생성됨, 끝 문자: .CSV) 생성 및 파이프라인 매개변수에 @triggerBody().fileName을 매핑합니다.


테스트: input 컨테이너에 penguins.csv를 업로드하여 파이프라인이 자동 실행되는지 확인합니다.
파일 삭제 실습: Delete 활동을 사용하는 파이프라인과 SE_DeleteCSV(이벤트: 삭제됨) 트리거를 생성하여 파일 삭제 시 로깅이 발생하는지 테스트합니다.

Delete시에는 항상 로깅을 기본으로 해야 함


추가 및 실행 후 input에서 파일을 삭제 시 output에서도 삭제되는지 확인
준비: Copy CSV to CSV 파이프라인과 관련 데이터세트(inputCSV3, outputCSV3)를 준비합니다.
Logic Apps 구성: A000-manual-trigger 로직 앱을 생성하고, Recurrence 트리거와 Azure Data Factory - 파이프라인 실행 만들기 동작을 추가합니다.



매개변수 주입: 로직 앱에서 {"fileName":"penguins.csv"} JSON 데이터를 전달하도록 설정합니다.
확인: 로직 앱 실행 기록(Succeeded)과 ADF 파이프라인 모니터링(수동 트리거 항목)을 통해 최종 결과를 확인합니다.



Azure Data Factory(ADF)에서 매개변수를 설정하는 과정은 크게 데이터세트 수준의 설정, 파이프라인 수준의 설정, 그리고 이 둘을 연결(매핑)하는 과정으로 나뉩니다. 전체적인 스텝을 순서대로 정리해 드립니다.
먼저 데이터를 동적으로 처리할 수 있도록 데이터세트 자체에 매개변수를 생성합니다.
1. 데이터세트 열기: 수정할 데이터세트를 선택합니다.
2. 매개변수 탭 이동: 하단의 [매개변수] 탭을 클릭한 후 [+새로 만들기]를 통해 사용할 이름(예: fileName, tableName)과 형식을 지정합니다.
3. 동적 콘텐츠 적용: [연결] 탭으로 돌아가 동적으로 바뀔 항목(파일명, 테이블명 등)을 클릭하고 하단에 나타나는 [동적 콘텐츠 추가]를 선택합니다.
4. 식 작성: 파이프라인 식 작성기에서 앞서 만든 매개변수를 선택하여 @dataset().매개변수명 형태의 식이 입력되도록 합니다.
파이프라인 실행 시 외부에서 값을 입력받을 수 있도록 설정합니다.
1. 파이프라인 캔버스 클릭: 파이프라인 내 빈 공간을 클릭하여 하단 속성창을 활성화합니다.
2. 매개변수 추가: 하단의 [매개변수] 탭에서 [+새로 만들기]를 눌러 외부에서 주입받을 매개변수 이름과 형식을 정의합니다.
파이프라인 매개변수를 데이터세트 매개변수로 전달하는 과정입니다.
1. 활동 선택: 파이프라인 내의 활동(예: 복사 활동)을 클릭합니다.
2. 원본/싱크 설정: 활동 속성의 [원본] 또는 [싱크] 탭으로 이동합니다.
3. 데이터세트 속성 입력: 해당 탭 하단의 데이터세트 속성 섹션에 이전에 정의한 데이터세트 매개변수들이 나열됩니다.
4. 파이프라인 매개변수 연결: 각 속성의 값 필드를 클릭하고 [동적 콘텐츠 추가]를 눌러 파이프라인 매개변수를 선택합니다. 식은 @pipeline().parameters.매개변수명 형태로 구성됩니다.
이렇게 설정이 완료되면 파이프라인을 디버그할 때 팝업창을 통해 매개변수 값을 직접 입력하여 테스트할 수 있습니다.