안녕하세요, DataOps팀 김민제입니다. AICT Company로의 전환을 추진하면서 Microsoft와의 전략적 협업이 본격화되었고, 이에 따라 MS Azure 클라우드 환경으로의 전환이 진행되고 있습니다.
새로운 환경으로 전환하면서 Azure 환경에서 개발된 과제들의 운영 이관을 위한 프로세스가 정의가 되지 않았었고 낮은 숙련도로 인한 운영 이관 진행에 소소한 문제점들이 있었습니다.
그래서, 분석 조직에서 수행한 Azure 기반 분석 과제의 운영 이관을 진행하면서 정의한 운영 이관 프로세스 및 준비 사항에 대해 안내 드리고, 발생된 문제점 및 해결 방안 등에 대해 공유 드리려고 합니다.
1. 운영 이관 프로세스
2. 운영 이관 산출물 목록
3. 운영 이관 산출물 양식 (샘플)
- 1) 요구 사항 정의서
- 2) 시스템 또는 서비스 아키텍처 구성도
- 3) 프로그램 목록
- 4) Workflow 흐름도
- 5) 데이터 흐름도(DFD)
- 6) 테이블 명세서
- 7) 테이블 정의서
- 8) 데이터 매핑 정의서
- 9) 권한 부여 목록
- 10) 화면 설계서
- 1) Azure 환경의 운영자 권한 신청
- 2) Databricks Export 문제
- 3) Fabric items 소유권 문제
과제 수행 후 운영 이관을 위해서는 산출물 작성 및 프로세스에 따른 단계별 진행이 필요합니다.
일반적으로 운영 이관 시 준비해야 할 사항이 많은데, 운영 이관 요청 전에 프로세스를 참고해서 사전 준비를 하면 보다 원활한 운영 이관 진행이 가능합니다.
1. 운영 이관 프로세스
운영 이관 프로세스는 분석 과제의 운영 적정성 및 표준화 등을 검토하고 이관 작업 수행 후 최종 운영 단계로 진행됩니다.
프로세스는 상황에 따라 유동적으로 진행되기도 합니다.
아래와 같이 사용자의 운영 이관 프로세스에 대한 이해를 돕기 위해 운영 이관 프로세스 및 R&R을 도식화했습니다.

반려가 될 수 있어요!
-
운영 이관 대상 WF 개발 미완료
-
테이블 미생성 및 기준 컬럼 미정의
-
실행 테스트 미완료
-
Python 등 소스 개발 미완료
-
표준화/암호화 미적용
-
연동 데이터 미정의 및 테이블 미생성
-
연동 규격 미정의
-
신규 시스템 구축 미완료
-
데이터 등급 검토 미수행
-
보안성 검토 미준수
운영 이관 진행 시 위의 경우처럼 반려가 될 수도 있습니다.
일정이 촉박한 경우가 많다 보니 미쳐 보완을 못하는 경우가 발생할 수 있으나, 오히려 일정을 지연 시킬 수 있으니 꼼꼼하게 확인하는 것이 좋습니다.
2. 운영 이관 산출물 목록
운영 이관 시 요구되는 산출물은 운영 담당자의 이해를 돕고, 효율적인 운영을 위해 필요합니다.
내용이 많고 번거로울 수 있으나, 상세히 작성을 하면 원활한 운영 이관과 운영 업무에 도움이 됩니다.
산출물을 협의된 양식에 따라 작성하여 전달하고, 검토와 피드백을 통해 미비점이나 추가 사항 등을 협의하여 진행하면 됩니다.
아래는 운영 이관을 위한 산출물 목록으로 Azure 환경에서의 운영 이관 시 필요한 사항들을 정리했습니다.
구분 |
체크 항목 |
세부 사항 |
산출물 |
주요 항목 |
---|---|---|---|---|
|
요구 사항 |
|
|
|
서비스 코드 |
|
|
|
|
시스템/서비스 |
|
|
|
|
|
Workflow/Job |
|
|
|
Scheduling |
|
|
|
|
Report |
|
|
|
|
|
데이터 수집/생성 |
|
|
|
테이블 명세 |
|
|
|
|
테이블 정책 |
|
|
|
|
프로세스 |
|
|
|
|
데이터 보안 |
|
|
|
|
|
보안 |
|
|
|
3. 운영 이관 산출물 양식 (샘플)
운영 이관 요청 시 제출해야 하는 산출물이 다양하다 보니 양식이 없는지 문의하는 경우가 많습니다.
그래서, 참고 할 수 있도록 산출물의 샘플을 작성했습니다.
산출물은 사전 협의된 양식을 사용하거나, 과제를 수행하면서 작성된 자료 등으로 대체도 가능하니 운영 이관 담당자와 협의 후 진행하면 됩니다.
샘플 산출물에 사용된 workflow, table 등의 명칭은 임의로 입력했습니다.
1) 요구 사항 정의서
항목 |
내용 |
비고 (참고 사항 등 입력) |
---|---|---|
과제명 |
예시) 분석 효율화 |
과제에 대한 설명을 기입하세요. |
과제 목적 |
예시) 분석 효율화를 위한 데이터 생성 |
|
소속 |
예시) 우리부문 분석담당 ML팀 |
|
요청 담당자 |
예시) 고길동 |
|
유관 담당자 |
예시) Databricks 개발팀 마이콜, … |
과제 관련한 BIZ, 인프라 등 유관 시스템 및 담당자를 기입하세요. |
작성 일자 |
예시) 2025-04-03 |
|
요청 구분 |
예시) 신규 / 변경 |
신규 또는 변경 등이 구분을 기입하세요. |
서비스 코드 |
예시) service_code1234 |
서비스 코드를 기입하세요. |
구독 정보 |
예시) azure_cost |
Azure에서 사용하는 구독 정보를 기입하세요. |
요구 사항 |
예시) Databricks WF 4건 운영 이관을 요청드립니다. |
상세하게 기입해 주세요. |
사용 시스템 |
예시) Databricks, Fabric |
사용되는 플랫폼/솔루션을 기입하세요. |
작업 영역 |
예시) Databricks : azure-databricks-prd Fabrick : azure-fabrick-prd |
플랫폼/솔루션별 Workspace를 기입하세요. |
운영 범위 (SLA) |
|
운영 이관 대상별 운영 범위를 기입하세요. 운영 이관 대상별로 기준이 다른 경우 각각 작성하세요. |
2) 시스템 또는 서비스 아키텍처 구성도
시스템 또는 서비스의 전체적인 구성을 표현합니다.
예시)

3) 프로그램 목록
솔루션별 이관 필요한 프로그램(workflow, notebook 등) 목록 및 상세 정보를 작성합니다.
-
Databricks 운영 이관 대상 명세
예시)
Workflow그룹 |
실행순서 |
Item명 |
유형 |
설명 |
Run as |
위치 (디렉토리 등 기입) |
의존성 |
스케줄 |
비고 |
---|---|---|---|---|---|---|---|---|---|
1 |
1 |
WF_ANAL_ITEM_DD |
Workflow |
분석용 Workflow azure_test.tbl_azure_test01 테이블 데이터 생성 |
고길동 |
Workspace/databricks_analy/ |
WF_ANAL_DD 선행 |
매일 15:00 |
|
-
Fabric 운영 이관 대상 명세
예시)
개체명 |
유형 |
설명 |
소유자 |
위치 (디렉토리 등 기입) |
실행 주기(데이터 기준) 일/주/월(D-0) |
실행순서 |
스케줄 |
---|---|---|---|---|---|---|---|
dp_test01 |
Data Pipeline |
사용 이력 데이터 수집용 |
고길동 |
Workspace/databricks_analy/ |
일 (D-2) |
WF_ANAL_DD 선행 |
14:00 |
-
Power BI 운영 이관 대상 명세
예시)
보고서명 |
유형 |
설명 |
위치 (디렉토리 등 기입) |
사용 테이블 |
비고 |
---|---|---|---|---|---|
bi_report01 |
보고서 |
사용 이력 보고서 |
Workspace/fabric_analy/ |
table01 |
|
4) Workflow 흐름도
workflow의 흐름도는 과제의 전체적인 프로세스를 도식화합니다.
예시)

5) 데이터 흐름도(DFD)
데이터 흐름도는 프로세스 간 데이터 변환, 가공 등의 처리되는 흐름을 논리적으로 표현합니다.
예시)

6) 테이블 명세서
테이블 명세는 Databricks와 Fabric 등 각 솔루션별로 작성해야 합니다.
예시)
-
Databricks
카탈로그명 |
스키마명 |
테이블명 |
테이블 한글명 |
설명 |
WF/NODE명 |
원천 테이블명 |
적재 주기 |
보관 기간 (파티션 기준) |
파티션 |
데이터 등급 |
암호화 대상 |
비고 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Dataflows |
TEST_SCHEMA |
table01 |
테이블01 |
이력 정보 |
WF_ANAL_TEST/WF_ANAL_TEST01 |
dw_test.tbl_test001 |
D-1 |
6개월 |
base_date (yyyymmdd) |
3등급 |
N |
|
-
Fabric
OneLake명 |
스키마명 |
테이블명 |
테이블 한글명 |
설명 |
WF/NODE명 |
원천 테이블명 |
적재 주기 |
보관 기간 (파티션 기준) |
파티션 |
데이터 등급 |
암호화 대상 |
비고 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
TEST_LAKE |
dm_test |
table01 |
테이블01 |
이력 정보 |
WF_ANAL_TEST/WF_ANAL_TEST01 |
dw_test.tbl_test001 |
D-1 |
6개월 |
base_date (yyyymmdd) |
3등급 |
N |
|
7) 테이블 정의서
사용되는 테이블의 명세를 기입합니다.
예시)
스키마명 |
테이블영문명 |
테이블한글명 |
컬럼영문명 |
컬럼한글명 |
컬럼순서 |
Type |
Length |
Null |
Keys |
PartitionKey |
암호화 필드 |
Description |
비고 |
TEST_SCHEMA |
table01 |
테이블01 |
BASE_DATE |
기준일자 |
1 |
STRING |
8 |
NN |
PK |
Y |
N |
기준일자 |
|
8) 데이터 매핑 정의서
소스 데이터로부터 최종 생성되는 타겟 테이블까지의 매핑 정보를 기입합니다.
예시)
시스템 |
영역 |
소스 스키마 |
소스 테이블명 |
소스 테이블한글명 |
소스 컬럼명 |
소스 컬럼한글명 |
로직 |
타겟 스키마명 |
타켓 테이블명 |
타겟 테이블한글명 |
타겟 컬럼명 |
타겟 컬럼한글명 |
타겟 컬럼 타입 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PlatformA |
위치정보 |
SRC_SCHEMA |
TBL_SRC_TEST01 |
소스테이블01 |
BASE_DATE |
작업일자 |
전월말일 |
TAR_SCHEMA |
TBL_TEST_HST |
문의내역테이블(월) |
BASE_DATE |
작업일자 |
STRING |
PlatformA |
위치정보 |
SRC_SCHEMA |
TBL_SRC_TEST01 |
소스테이블01 |
CUST_ID |
고객ID |
NONE |
TAR_SCHEMA |
TBL_TEST_HST |
문의내역테이블(월) |
CUST_ID |
고객ID |
STRING |
PlatformA |
위치정보 |
SRC_SCHEMA |
TBL_SRC_TEST02 |
소스테이블02 |
TEXT_HIST |
문의내역 |
IFNULL(TEXT_HIST, ‘NULL’) |
TAR_SCHEMA |
TBL_TEST_HST |
문의내역테이블(월) |
TEXT_HIST |
문의내역 |
STRING |
9) 권한 부여 목록
Azure 환경에서는 workspace 등 작업 영역이나 접근 권한 등이 변경될 수 있습니다.
접근 권한이 필요한 대상자에 대해 Databricks, Fabric 등 각 솔루션별로 필요 권한 내역을 작성하여 이관 후 필요한 권한을 부여 받을 수 있도록 하는 것이 좋습니다.
시스템 |
Items |
권한 부여 대상 (Workflow, Items 등) |
권한 부여 대상자 |
필요 권한 |
비고 |
---|---|---|---|---|---|
Databricks |
WF_ANAL_TEST01 |
WF_ANAL_TEST01 |
고길동 kd.ko@kt.com |
CRUD |
|
10) 화면 설계서
Power BI 등의 보고서 등은 화면 설계서가 필요합니다.
리포트 화면 별 지표
카테고리 |
페이지 |
선택 조건 |
지표 카테고리 |
지표명 |
드릴 다운 |
기간 주기 (기준 일) |
상세 |
시각화 |
---|---|---|---|---|---|---|---|---|
요약 |
1 |
조회 일자 (월) |
공통 |
당월 목표 |
3 페이지 연결 |
조회 일자 |
|
|
당월 현재일까지 실적 |
3 페이지 연결 |
|
|
|||||
전월 실적 |
3 페이지 연결 |
|
|
|||||
목표 대비 당월 실적 |
3 페이지 연결 |
|
|
|||||
전월 대비 당월 실적 |
4 페이지 연결 |
|
|

여기까지, Azure 기반의 분석 과제 운영 이관을 진행하면서 수립한 프로세스 및 주요 산출물에 대해 소개했습니다.
다음은 진행하면서 기존 환경과 달랐던 점과 문제점들에 대해 말씀드리겠습니다.
4. knowledge
Azure 환경에서의 운영 이관을 진행하면서 권한 관리, 소스 이관, 모니터링 및 catalog 활용 등 다양한 상황이나 문제점들을 접하게 되어, 그 중 일부를 정리해 봤습니다.
1) Azure 환경의 운영자 권한 신청
이전 환경에서는 운영자에게 플랫폼별 admin 권한을 일괄로 부여하고 운영 담당자가 전체를 관리할 수 있도록 하여 운영의 효율성을 높이고 관리의 편의성을 제공하였습니다.
그러나, Azure 환경에서는 각 Layer마다 필요 권한이 세분화되고 이를 관리하는 조직이 분리되어 있어, 운영에 필요한 권한을 획득하기 위해서는 각각의 신청 프로세스를 통해 승인 후 권한 부여가 가능 합니다.
권한에 대한 범위와 프로세스는 새로운 유형의 리소스(솔루션)이 발생할 때마다 각각의 Azure RBAC 권한 정책 내 목록과 솔루션 종속 권한 정책을 확인하여 운영에 필요한 권한을 신청해야 합니다.
아래는 운영 이관을 진행하면서 권한 신청했던 내용입니다.
-
Azure Portal 구독에 대한 Reader 권한 (RBAC 신청 동일)
-
구독 신청 및 신청 ID 획득
-
PM 승인 요청 및 작업 진행
-
-
Azure Fabric Workspace 권한 신청 (Workspace Owner가 권한 부여)
-
Azure Fabric 용량 관리자 권한
-
Databricks Workspace 권한 신청
-
Databricks Catalog 권한 신청
Azure 환경의 세분화된 권한 관리는 다양한 정책 적용 및 보안 관리에 활용이 가능해 보입니다.
다만, 권한 신청이 세분화되면서 번거로운 점도 있어 운영의 효율성과 편의성을 위한 개선이 있으면 좋을 것 같습니다.
2) Databricks Export 문제
운영 이관 시 소스 등을 이관하기 위해서는 일반적으로 Export 기능을 주로 사용합니다.
그런데, 분석 과제의 Databricks Workspace 내 Notebook 및 파일의 Export 기능이 비활성화되어 있었습니다.
Databricks에서는 일반적으로 Notebook이나 파일을 .dbc
, .ipynb
, .html
등의 형식으로 내보내어 백업하거나 외부 시스템과 연동하는 것이 가능하지만,
특정 Workspace에서는 보안 정책 또는 권한 설정에 따라 Export 버튼 자체가 비활성화되는 경우가 있다는 점을 확인했습니다.
export 문제는 Databricks CLI를 통해 해결 방안을 찾을 수 있었습니다.
아래는 export 권한을 해결하는 방법입니다.
A. Databricks CLI를 설치 후 OAuth U2M 인증을 합니다.
databricks auth login --host https://adb-<workspace-id>.<random-number>.azuredatabricks.net Databricks profile name: <workspace_name>

연결 성공 시
B. Export 파일의 경로를 복사합니다.
workspace > export할 folder (폴더에 공백이 있는 경우 공백 제거 필요) > URL/path copy > Full path
C. CLI를 통해 Export 명령을 입력합니다.
databricks export-dir {export-folder-path} {local-path}
export 시 목록 확인이 가능하고, local-path 확인 시 export 결과 확인이 가능합니다.
참고로, Databricks CLI를 통한 Export는 최대 10MB 크기 제한이 있으며, 대용량의 파일 및 폴더에는 한계가 있습니다.
폴더 및 파일에 권한이 부여되지 않은 상태에서 CLI명령을 통해 export하는 것은 권한 및 보안에 위배 될 수 있으니 접근 권한을 사전에 신청하고 승인 절차를 거쳐야 합니다.
3) Fabric items 소유권 문제
운영 이관 시 운영 담당자에게는 변경 및 관리를 위해 운영 대상에 대한 CRUD 권한이 필요합니다.
Fabric에서는 데이터 웨어하우스, 레이크하우스 및 파이프라인 등 각 Item 항목에 대해 [**소유자(owner)**]가 존재하는데, 해당 소유자만이 항목을 편집하거나 삭제가 가능합니다.
만약, 운영 시 소유권을 이전 하지 않게 되면 소유자 계정 삭제나 장기 미접속 등의 문제로 해당 Item에 대해 관리가 되지 않을 수 있습니다.
그러나, 과제의 특성 상 사용자가 소스를 관리해야 하는 경우 소유권을 이전할 수 없게 되어 운영에 영향을 미치게 됩니다.
이 경우, 아래와 같은 방식으로 처리가 가능합니다.
-
소유자 계정 삭제 및 장기 미접속 시 문제점
-
Items 수정 불가
-
스케줄 호출 오류
-
-
해결 방안
-
소유자 계정 삭제 전 인수
-
powershell 수동 소유자 변경
-
개발자 도구(F12)를 실행, 네트워크 탭으로 이동합니다.
-
authorization 항목의 Bearer 토큰 값을 확인합니다.
-
아래의 스크립트를 ps 파일로 생성합니다.
-
-
param( [Parameter(Mandatory=$True)] [string] $WorkspaceId, [Parameter(Mandatory=$True)] [string] $PipelineIds, [Parameter(Mandatory=$True)] [string] $token ) $pipelineIdsSunArray = $PipelineIds.Split(",") $fabricEndpoint = "https://api.fabric.microsoft.com" function LogMessage($message) { Write-Host "`n$message" } function GetPipeline($workspaceId, $pipelineId) { LogMessage "Getting Pipeline $pipelineName" # Get-Item For Pipeline Artifact (https://learn.microsoft.com/en-us/rest/api/fabric/core/items/get-item?tabs=HTTP) $getPipelineArtifactMetadata = Invoke-RestMethod -URI "$fabricEndpoint/v1/workspaces/$workspaceId/items/$pipelineId" -Method GET -Headers @{Authorization="Bearer $token"} LogMessage "Pipeline Artifact Metadata: $getPipelineArtifactMetadata" return $getPipelineArtifactMetadata } function UpdatePipeline($workspaceId, $pipelineId, $displayName, $description) { LogMessage "Updating pipelines" $updatePipelineRequest = @" { "displayName": "$displayName", "description": "$description - $((Get-Date).ToString())" } "@ # Update-Item for Pipeline Artifact (https://learn.microsoft.com/en-us/rest/api/fabric/core/items/update-item?tabs=HTTP) $updatedPipelineArtifactMetadata = Invoke-RestMethod -URI "$fabricEndpoint/v1/workspaces/$workspaceId/items/$pipelineId" -Method PATCH -Headers @{Authorization="Bearer $token"} -body $updatePipelineRequest -ContentType "application/json" LogMessage "Update Pipeline Artifact Metadata: $updatedPipelineArtifactMetadata" } LogMessage "Start: Updating pipeline descriptions" ForEach($PipelineId in $pipelineIdsSunArray) { LogMessage "PipelineId: $PipelineId" LogMessage "workspace: $WorkspaceId" $getPipelineArtifactMetadata = GetPipeline $WorkspaceId $pipelineId UpdatePipeline $WorkspaceId $pipelineId $getPipelineArtifactMetadata.displayName $getPipelineArtifactMetadata.description } LogMessage "Stop: Pipeline descriptions updated successfully" LogMessage "Thank you!"
12345678910111213141516171819202122232425262728293031323334353637383940414243444546
이후 PowerShell 실행 후 아래와 같이 입력합니다. 파이프라인ID는 ,(콤마)로 구분합니다.
.\UpdatePipelineDefaultCredentialsInWorkspace.ps1 -WorkspaceId <WorkspaceID> -PipelineIds "<PipelineID,PipelineID>" -Token "<powerbiAccessToken>"
5. 맺음말
이 외에도 다양한 case가 있었지만, 이 정도에서 마무리하려고 합니다.
Azure 기반 과제의 운영 이관 요청 시 설명드린 산출물 목록 및 양식들을 참고하셔서 준비하시면 일정 단축과 원활한 운영 이관 진행이 될 수 있을 것 같습니다.
사전에 분석 과제를 진행하신 담당자분들께서 산출물을 잘 준비해 주셔서 운영 이관하는데 많은 도움이 되었습니다.
하지만, 이 과정에서 다양한 이슈와 미흡한 점들을 발견했습니다.
지속적인 프로세스 개선과 미흡했던 사항들을 개선하여 Azure 환경으로의 운영 이관 프로세스를 고도화하려고 합니다.
-
개선 사항
-
모니터링 방안
-
unity catalog 활용 방안
-
Fabric 운영 workspace 관리 방안
-
운영 이관 체크리스트
-
플랫폼 관련 운영 이관 항목 및 산출물
-
연동을 위한 프로세스 수립
-
권한 관리 방안
-
이 외에도 더 많은 개선점이 있겠지만, 지속적인 개선과 문제 해결을 통해 원활한 운영 이관 및 효율적인 운영이 될 수 있도록 노력하겠습니다.
산출물 양식 및 운영 이관에 도움을 주신 분석 과제 관련 담당자분들과 유관 담당자분들께 감사드리고 글 작성에 도움을 준 정완영 책임님, 이승경 선임님께 감사드립니다.