주요 컨텐츠로 이동
고객

대형 화물 철도 회사가 Genie Code로 파이프라인 생성을 확장한 방법

캐나다의 선도적인 운송 및 물류 기업은 Genie Code, Unity Catalog 및 맞춤형 Agent Skills를 사용하여 거버넌스가 적용된 레거시 파이프라인 현대화를 자동화하고, 신규 테이블 수집 시간을 수일에서 수분으로 단축했습니다.

작성자: Dinesh Chandrasekaran, Subhadip Chanda, Julia Brouillette , 갈 오시리

  • 이 기업은 Databricks Genie Code를 사용하여 레거시 파이프라인을 자동으로 현대화했으며, 이를 통해 파이프라인 제공 시간을 테이블당 수일에서 수분으로 단축했습니다.
  • 이 현대화 작업은 Genie Code의 Agent Skills 및 Unity Catalog 통합을 활용하여 엔터프라이즈 표준과 메타데이터 그라운딩을 유지합니다.
  • 엔터프라이즈 표준, 메타데이터 그라운딩, 전문가 검토를 유지하면서 수백 개의 데이터 파이프라인을 수동으로 재구축해야 하는 핵심 확장성 문제를 해결함으로써, 이 접근 방식은 신규 테이블 수집의 90% 이상을 자동화하고 파이프라인 제공 시간을 테이블당 수일에서 수분으로 단축했습니다.

캐나다 최대 규모의 철도망 중 하나는 캐나다 전역과 미국까지 약 20,000 노선 마일에 걸쳐 뻗어 있으며, 매년 2,500억 캐나다 달러 이상의 상품 이동을 지원합니다. 이 정도 규모로 운영되는 조직에서 수십 년 된 데이터 자산을 현대화하는 것은 결코 한 번에 테이블 하나씩 처리할 수 있는 작업이 아니었습니다.

수백 개의 파이프라인이 가동 중이고 실시간 분석 및 AI에 대한 수요가 증가하는 한편, 기존 레거시 시스템에 깊은 제도적 지식이 내재되어 있는 상황에서, 이 기업은 수동 개발 노력을 늘리지 않고도 현대화 규모를 확장할 수 있는 방법이 필요했습니다.

Databricks Genie Code, Unity Catalog, 커스텀 Agent SkillsDatabricks Apps에 구축된 Streamlit 앱을 사용하여, 팀은 파이프라인 개발 자체를 반복 가능한 공장처럼 전환했습니다. 이제 짧은 YAML 프롬프트만으로 실제 카탈로그 메타데이터에 기반하고 기본적으로 기업 컨벤션에 부합하는 프로덕션 지원 수집 코드를 생성할 수 있습니다. 여기에는 테이블 정의, 이력 로드 로직, 스트리밍 수집 로직, 증분 병합 로직 및 자동화된 테스트가 포함됩니다.

그 결과 새로운 테이블 수집의 90% 이상이 자동화되었고, 파이프라인 제공 시간이 며칠에서 몇 분으로 단축되었으며, 개발자의 리소스 한계에 구애받지 않고 비즈니스와 함께 확장할 수 있는 현대화 프로그램을 갖추게 되었습니다.

엔터프라이즈 규모에서 복잡한 데이터 자산 현대화하기

많은 대기업과 마찬가지로, 이 회사도 메인프레임 시스템, 레거시 데이터 웨어하우스, 엔터프라이즈 ETL 플랫폼 및 특수 목적 어플라이언스에 걸쳐 수십 년 동안 분석 자산을 구축해 왔습니다. 회사가 현대적인 레이크하우스 아키텍처로 전환함에 따라, 당면 과제는 단순한 마이그레이션 그 이상이었습니다. 팀은 대규모 레거시 환경 전반에서 중요한 비즈니스 로직을 보존하면서 파이프라인 구축 방식을 단순화하고 표준화해야 했습니다.

자동화 이전에는 단일 테이블에 대한 파이프라인을 구축하는 데 며칠이 걸렸습니다. 팀은 소스 스키마를 검사하고, 소스-타겟 매핑(Source-to-Target Mapping) 스프레드시트에 비즈니스 로직을 정의하고, 이력 및 스트리밍 수집 로직을 구축하고, 증분 병합 파이프라인을 작성하고, 다운스트림 변환을 구현하고, 스키마 진화, 열 이름 변경, 타입 캐스트 및 소프트 삭제와 같은 사례에 대한 테스트 커버리지를 생성해야 했습니다.

이러한 작업은 테이블 하나일 때는 감당할 수 있었지만, 수백 개일 때는 불가능했습니다. 진짜 제약 조건은 레거시 로직을 레이크하우스 파이프라인으로 반복적이고 일관되게 변환하는 데 필요한 수동 작업이었습니다.

이 회사에 필요했던 것은 단순한 파이프라인 현대화가 아니라, 수백 개의 파이프라인을 구축하는 프로세스 자체의 현대화였습니다.

현대화 엔진으로서의 Databricks

이 솔루션은 두 가지 기능의 협업을 중심으로 합니다. 바로 프로덕션 지원 수집 아티팩트를 생성하는 커스텀 Agent Skills가 포함된 Genie Code와, 소스 필드를 타겟 레이크하우스 테이블에 매핑하고 변환 로직을 생성하는 Databricks App입니다.

이 두 가지가 결합되어 메타데이터 검색부터 코드 생성에 이르는 엔드투엔드 워크플로우가 모두 Databricks 내에서 만들어졌습니다. Genie Code는 자율적인 AI 파트너 역할을 하며, 커스텀 Agent Skill은 회사의 수집 패턴과 병합 로직을 인코딩합니다. Unity Catalog는 raw, 이력(historical), 준비(prep) 레이어 전반에 걸쳐 스키마 인트로스펙션을 제공하며, Databricks Apps는 소스-타겟 매핑 경험을 지원합니다. 결과 파이프라인은 PySpark, Spark SQL 및 Delta Lake를 사용하며 Lakeflow Jobs를 통해 실행되도록 설계되었습니다.

이 접근 방식을 통해 팀은 자체 수집 표준 및 파이프라인 컨벤션으로 Genie Code를 확장할 수 있었습니다. 감사 컨벤션, 중복 제거 로직, 변경 시퀀스 병합 가드, 소프트 삭제 조정 및 테스트 패턴이 모든 개발자가 수동으로 적용하도록 의존하는 대신 생성 프로세스에 직접 내장됩니다.

"확률적 워크플로우에 결정론을 추가하는 것이 핵심입니다. 우리는 올바르다고 확신하는 부분을 자동화하기로 선택했고, 해석 레이어는 선택 사항으로 남겨두었습니다. LLM은 생각하는 과정에서 도움을 줍니다. 프레임워크는 설명 가능성이 내장되도록 보장합니다."—Dinesh Chandrasekaran, 캐나다의 선도적인 운송 및 물류 기업의 Data & AI 리더

이 철학은 전체 접근 방식의 핵심이 되었습니다. 즉, 추론과 발견이 중요한 곳에는 AI를 사용하고, 일관성과 재현성이 가장 중요한 곳에는 엄격한 패턴을 사용하는 것입니다.

짧은 프롬프트에서 프로덕션 지원 파이프라인까지

개발자는 간결한 YAML 프롬프트로 시작합니다. 가장 간단한 경우, raw 수집을 위한 프롬프트는 단 두 줄만큼 짧을 수 있습니다. 전체 테이블 파이프라인의 경우 소스 및 타겟 테이블 이름, 기본 키(primary key), 중복 제거 로직, 새로 고침 동작과 같은 핵심 입력이 포함됩니다.

여기에서 Genie Code는 구조화된 워크플로우를 따릅니다. 프롬프트를 파싱하고 검증하며, Unity Catalog 메타데이터를 통해 이력 및 신뢰할 수 있는 레이어 스키마를 검색하고, 열을 소스와 자동 매칭하고, 타입 캐스트 및 이름 변경 요구 사항을 식별하고, 변환 패턴을 해결하고, 회사의 표준 패턴을 사용하여 요청된 아티팩트를 생성하고, 필수 엔터프라이즈 불변성(invariant)에 대해 각 출력을 검증합니다. 이러한 불변성에는 기본 키 커버리지, 감사 열 배치, 변경 시퀀스 보호 병합, REFRESH 인식 중복 제거 및 테스트 스위트 커버리지가 포함됩니다.

모드에 따라 워크플로우는 단일 테이블, 단일 요청의 여러 테이블 또는 Unity Catalog 볼륨에 저장된 CSV 또는 Excel 파일로 구동되는 대량 실행을 지원합니다. 실제로 워크플로우는 DDL, 이력 로드, raw 스트리밍 수집, 첫 번째 증분 병합, 지속적인 증분 병합 및 자동화된 테스트 스위트의 6가지 프로덕션 지원 출력을 생성할 수 있습니다.

생성된 모든 노트북은 감사 열, 중복 제거, 변경 시퀀스 인식 병합 및 소프트 삭제 조정에 대해 동일한 엔터프라이즈 컨벤션을 따릅니다.

엔터프라이즈 표준을 재사용 가능하게 만든 Agent Skills

아키텍처의 핵심 부분은 Genie Code에 회사의 수집 표준, 명명 규칙 및 파이프라인 패턴을 적용할 수 있는 재사용 가능한 방법을 제공하는 커스텀 Agent Skill이었습니다.

이 스킬은 다른 코드베이스와 마찬가지로 버전이 관리됩니다. 여기에는 SKILL.md 진입점과 카탈로그 검색, 컨벤션, raw 수집, 이력 로드, 증분 병합 및 테스트 생성을 위한 지원 패턴 파일이 포함됩니다. 이러한 구조를 통해 회사는 생성 로직을 중앙에서 유지 관리하는 동시에 Genie Code를 통해 개발자가 사용할 수 있도록 지원합니다.

이 스킬은 workspace/.assistant/skills/lakehouse-ingestion/에 업로드된 단일 폴더입니다.


여기에는 SKILL.md 진입점과 아티팩트 유형당 하나씩 총 7개의 패턴 파일이 포함되어 있습니다.

SKILL.md 프런트매터(frontmatter)는 Genie Code가 스킬을 로드할 시기를 결정하는 데 사용하는 요소입니다.

한 곳에 표준을 문서화하고 모든 개발자에게 수동으로 해석하도록 요구하는 대신, 팀은 이러한 표준을 워크플로우 자체에 인코딩했습니다. 에이전트는 컨텍스트 수집 및 오케스트레이션을 처리합니다. 스킬은 생성된 아티팩트가 매번 동일한 패턴을 따르도록 보장합니다.

개발자는 Genie Code 세션 내에서 짧은 YAML 프롬프트로 코드 생성을 시작합니다. 최소 두 줄이면 raw 수집만 생성할 수 있습니다. 전체 파이프라인은 6줄이 소요됩니다.

최소 예시, raw 수집 노트북만 생성:

전체 예시, 단일 테이블에 대한 완전한 6개 아티팩트 파이프라인 생성:

6개의 아티팩트는 런타임에 다음 순서로 실행됩니다:

Unity Catalog를 기반으로 하며 기본적으로 거버넌스가 적용됩니다

또 다른 핵심 설계 원칙은 정적 가정이 아닌 실제 라이브 메타데이터를 기반으로 코드를 생성하는 것이었습니다.

Genie Code는 Unity Catalog를 사용하여 원시(raw), 이력(historical), 준비(prep) 테이블 전체의 스키마를 실시간으로 검사합니다. 이러한 메타데이터 기반 접근 방식은 별도의 검색 레이어가 필요하지 않으며, 에이전트가 코드를 내보내기 전에 매핑을 생성하고, 변환을 추론하며, 필수 필드를 검증하는 데 필요한 컨텍스트를 제공합니다.

그에 못지않게 중요한 점은 생성된 모든 아티팩트가 Databricks 워크스페이스 내에 유지되며, 나머지 데이터 플랫폼과 동일한 거버넌스 모델 내에서 작동한다는 것입니다. 액세스 제어, 메타데이터 정책 및 변경 이력은 Databricks에 내장된 상태로 유지됩니다. 이러한 메타데이터 기반과 거버넌스가 적용된 실행의 결합은 기업의 AI 도입에서 흔히 발생하는 격차, 즉 일관성을 해치거나 통제를 약화하지 않으면서도 더 빠르게 움직이는 문제를 해결하는 데 도움이 되었습니다.

중요한 부분에 Human-in-the-loop 적용

이 기업은 이를 완전히 사람의 손을 타지 않는 자동 생성 문제로 취급하지 않았습니다. 코드가 생성되기 전에 데이터 디자이너는 Databricks 앱을 사용하여 레거시 소스 시스템의 필드가 타겟 레이크하우스 테이블에 어떻게 매핑되어야 하는지 검사합니다.

소스-타겟 매핑(Source-to-Target Mapping)이라고 불리는 이 단계는 맹목적으로 추측하거나 자동화해서는 안 되는 비즈니스 로직을 캡처합니다. Streamlit 기반 Databricks Apps로 빌드된 이 앱은 소스 시스템 테이블을 스캔하고, 컬럼 매핑을 미리 채우며, 데이터 디자이너가 브라우저에서 변환 로직을 검토하고 세분화할 수 있도록 지원합니다.

각 수정 사항은 변경 로그에 기록되며, 최종 매핑은 내보내어 생성 워크플로우의 입력값으로 사용할 수 있습니다. 덕분에 비즈니스적 해석이 여전히 중요한 워크플로우 단계에서 전문가의 검토를 배제하지 않으면서도 프로세스 속도를 높일 수 있었습니다. 데이터 디자이너는 변환 의도와 비즈니스 로직에 집중할 수 있었고, Genie Code와 생성 프레임워크는 반복 가능한 구현 패턴을 처리했습니다.

설계 단계부터 결정론적 방식 채택

아키텍처에서 가장 중요한 결정 중 하나는 추론 레이어를 지능적이고 적응력 있게 유지하는 동시에, 출력되는 파이프라인 코드는 결정론적(deterministic)으로 만드는 것이었습니다.

Genie Code는 프롬프트 해석, 스키마 검색, 올바른 생성 경로 선택, 올바른 작업 시퀀스 연결 등 에이전트 기반 추론의 이점을 누릴 수 있는 워크플로우 부분을 처리합니다. 하지만 생성된 PySpark 코드 자체는 규칙 기반이며 재현 가능합니다. 병합(merge) 문, 중복 제거 윈도우, 감사(audit) 컬럼 배치, 타입 캐스트 및 테스트 패턴은 모두 명시적인 템플릿과 불변성(invariants)을 통해 정의됩니다.

이 기업에게 이는 필수적이었습니다. 프로덕션 파이프라인 생성에서 병합 로직, 중복 제거 윈도우 또는 감사 컬럼 배치의 미세한 차이는 다운스트림 데이터 품질 리스크를 초래할 수 있습니다. 결정론적 출력을 통해 시스템을 엔터프라이즈 규모에서 사용할 수 있을 만큼 신뢰할 수 있게 만들었고, 어렵게 확보한 엔지니어링 표준을 유지할 수 있을 만큼 일관되게 만들었습니다.

결과: 개발자 처리량에서 현대화 처리량으로의 전환

그 효과는 즉각적이고 실용적이었습니다:

  • Databricks Lakehouse로의 신규 테이블 수집(ingestion) 90% 이상 자동화
  • 테이블당 며칠씩 걸리던 파이프라인 개발 시간을 단 몇 분으로 단축
  • 임시(ad hoc) 요청, 배치 마이그레이션, 스프린트 규모의 현대화 작업 전반에 걸쳐 단일, 다중 및 대량 생성 모드 지원
  • 수동 컴플라이언스 검토 없이도 생성된 모든 아티팩트에 일관된 엔터프라이즈 표준 적용

변화된 것은 개발자 생산성뿐만이 아니었습니다. 이 기업은 현대화 프로그램 자체의 처리량을 높였습니다.

모든 테이블 마이그레이션을 맞춤형 엔지니어링 프로젝트로 취급하는 대신, 팀은 레거시 자산을 거버넌스가 적용된 레이크하우스 파이프라인으로 대규모 변환할 수 있는 반복 가능한 시스템을 구축했습니다.

향후 전망

이 기업은 이를 더 광범위한 현대화 자동화의 토대로 보고 있습니다. 현재 팀은 오케스트레이션, 변환, 비즈니스 로직 및 관찰 가능성(observability)을 위한 보다 모듈화된 스킬 아키텍처를 탐색하고 있으며, 검색 범위를 Unity Catalog를 넘어 더 넓은 엔터프라이즈 데이터 카탈로그로 확장하고 있습니다. 또한 레거시 DataStage, COBOL 및 저장 프로시저(stored-procedure) 로직을 PySpark로 변환하는 AI 지원 방안을 평가하고 있으며, 일상적인 파이프라인 분류, DBR 업그레이드 및 스키마 불일치 복구를 지원하기 위해 새롭게 등장하는 백그라운드 에이전트 기능을 활용하는 방안을 검토하고 있습니다.

장기적인 목표는 단순히 더 빠른 코드 생성을 넘어섭니다. 레거시의 복잡성, 비즈니스 요구사항 및 플랫폼 범위가 계속 확장되더라도 지속적으로 확장(scale) 가능한 현대화 모델을 구축하는 것입니다.

(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

최신 게시물을 이메일로 받아보세요

블로그를 구독하고 최신 게시물을 이메일로 받아보세요.