주요 컨텐츠로 이동

Databricks Apps와 Lakebase로 프로덕션 수준의 데이터 및 AI 앱 구축하기

앱을 실행하고, 데이터를 동기화하고, Databricks에 모든 것을 배포하세요

Flowchart for building production-ready data and AI apps.

Published: November 19, 2025

제품4분 소요

Summary

  • 서버나 컨테이너 관리 없이 Databricks Apps 및 Lakebase로 풀스택 데이터 앱 빌드
  • Unity Catalog 데이터를 몇 초 내에 복제하는 Lakebase 동기화 테이블로 자동 데이터 최신성 유지
  • 일관된 CI/CD 기반 릴리스를 위해 Databricks 자산 Bundles를 사용하여 모든 것을 코드로 배포합니다.

프로덕션 데이터 애플리케이션의 과제

프로덕션용 데이터 애플리케이션을 구축하는 것은 복잡합니다. 앱을 호스팅하고, 데이터베이스를 관리하고, 시스템 간에 데이터를 이동하려면 별도의 도구가 필요한 경우가 많습니다. 각 레이어는 설정, 유지 관리, 배포 오버헤드를 추가합니다.

Databricks는 모든 것을 단일 플랫폼인 Databricks Data Intelligence Platform으로 통합하여 이 과정을 단순화합니다. Databricks Apps 는 serverless compute에서 웹 애플리케이션을 실행합니다. LakebaseUnity Catalog와 동기화되는 관리형 Postgres 데이터베이스를 제공하여 앱이 거버넌스가 적용된 데이터에 빠르게 액세스할 수 있도록 합니다. 또한 Databricks Asset Bundles(DABs)를 사용하면 코드, 인프라, 데이터 파이프라인을 함께 패키지하여 단일 명령으로 배포할 수 있습니다.

이 블로그에서는 Unity Catalog 데이터를 Lakebase에 동기화하고, Databricks에서 웹 앱을 실행하며, 자산 Bundles로 배포를 자동화하는 이 세 가지 요소가 함께 작동하여 실제 데이터 애플리케이션을 빌드하고 배포하는 방법을 보여줍니다.

아키텍처 및 작동 방식

Lakebase 동기화 테이블에서 읽어오고 Unity Catalog Delta 테이블의 데이터가 몇 초 내에 자동으로 업데이트되는 React 및 FastAPI 애플리케이션인 택시 주행 애플리케이션을 통해 전체 패턴을 살펴보겠습니다.

다음 다이어그램은 솔루션 아キ텍처를 간략하게 보여줍니다.

app-lakebase-uc-솔루션-arch

개략적으로 Databricks Apps는 사용자가 데이터를 탐색하고 시각화하는 프런트엔드 역할을 합니다. Lakebase는 앱이 query하는 Postgres 데이터베이스를 제공하며, 동기화된 테이블을 통해 Unity Catalog의 라이브 데이터와 가깝게 유지됩니다. Databricks 자산 Bundles는 모든 리소스(앱, 데이터베이스, 데이터 동기화)를 버전 제어되는 하나의 단위로 정의하고 배포하여 모든 것을 하나로 묶습니다.

주요 솔루션 구성 요소:

  • Databricks 앱: 사용자는 React, TypeScript, Vite, FastAPI를 사용하여 빌드된 웹 애플리케이션과 상호 작용합니다. 이 앱은 Lakebase Postgres 데이터베이스에 저장된 Unity Catalog 동기화 테이블에서 데이터를 읽습니다.
  • Unity Catalog 동기화된 테이블: 관리형 동기화 파이프라인을 통해 Unity Catalog 테이블과 자동으로 동기화되는 읽기 전용 Postgres 테이블입니다. Lakebase 데이터베이스 인스턴스에서 실행됩니다.
  • Lakebase 데이터베이스 인스턴스: Lakebase 스토리지 및 compute를 관리하고 Databricks App이 연결할 Postgres Endpoint를 제공합니다.
  • Unity Catalog 테이블: 모든 데이터베이스 workspace에서 사용 가능한 samples.nyctaxi.trips 샘플 테이블에서 복제된 뉴욕시 택시 운행에 대한 데이터가 포함된 Delta 테이블입니다.
  • Databricks 자산 Bundles(DABs): 아키텍처의 모든 주요 요소는 DABs 번들을 사용하여 코드로 정의됩니다.

예제 앱은 최근 택시 운행을 테이블 및 차트 형식으로 표시하고 새로운 운행을 자동으로 폴링합니다. Lakebase 동기화 테이블에서 데이터를 읽어오며, 이 테이블은 Unity Catalog의 Delta 테이블을 미러링합니다. 

nyc-taxi-dashboard-static

동기화된 테이블이 자동으로 업데이트되므로 Unity Catalog 테이블의 모든 변경 사항이 몇 초 내에 앱에 표시되며, 별도의 ETL이 필요 없습니다.

소스 Delta 테이블에 새 데이터를 삽입한 다음 동기화된 테이블을 새로 고쳐서 이를 테스트할 수 있습니다.

그런 다음 동기화된 trips_synced 테이블을 trigger refresh합니다.

refresh-synced-trip

동기화를 구동하는 관리형 파이프라인은 소스 Delta 테이블에서 대상 Postgres 테이블로 스냅샷 복사를 수행합니다.

몇 초 내에 새 레코드가 대시보드에 나타납니다. 앱은 업데이트를 폴링하고 사용자가 필요 시 refresh할 수 있도록 하여, Lakebase가 추가적인 엔지니어링 없이 운영 데이터를 최신 상태로 유지하는 방법을 보여줍니다.

이러한 원활한 데이터 흐름은 사용자 지정 ETL 코드나 팀 간의 조정 없이 Lakebase 동기화 테이블이 모든 동기화를 자동으로 처리하기 때문에 가능합니다.

Databricks 앱 구조

Databricks 앱에서 솔루션의 다양한 요소가 어떻게 결합되는지 살펴보겠습니다.

인증 및 데이터베이스 연결

각 Databricks 앱에는 생성 시 할당되는 고유한 service principal ID가 있으며, 이 ID를 사용하여 앱이 Lakebase를 포함한 다른 Databricks 리소스와 상호 작용합니다.

Lakebase는 OAuth M2M(machine-to-machine) 인증을 지원합니다. 앱은 Python용 Databricks SDK의 WorkspaceClient 및 service principal 자격 증명을 사용하여 유효한 토큰을 얻을 수 있습니다. WorkspaceClient는 수명이 짧은(1시간) OAuth 토큰을 새로 고치는 작업을 처리합니다.

그런 다음 앱은 Psycopg Python Postgres 어댑터를 사용하여 Lakebase에 연결을 설정할 때 이 토큰을 사용합니다.

앱용 Lakebase 리소스를 사용하면 Postgres 호스트와 데이터베이스 이름이 Databricks App의 환경 변수로 자동 설정됩니다.

Postgres 사용자는 service principal(Databricks Apps에 배포된 경우) 또는 로컬에서 앱을 실행하는 사용자의 Databricks 사용자 이름입니다.

RESTful FastAPI 백엔드

앱의 FastAPI 백엔드는 이 연결을 사용하여 Lakebase를 query하고 동기화된 테이블에서 최신 trips 데이터를 가져옵니다.

FastAPI는 API Endpoint를 제공하는 것 외에도 StaticFiles 클래스를 사용하여 정적 파일을 제공할 수도 있습니다. Vite의 빌드 프로세스를 사용하여 React 프런트엔d(app/frontend)를 번들링함으로써 FastAPI를 사용하여 제공할 수 있는 정적 파일 세트를 생성할 수 있습니다.

React 프런트엔드

React 프런트엔드는 FastAPI endpoint를 호출하여 데이터를 표시합니다.

예제 애플리케이션은 시각화를 위해 ag-grid 및 ag-charts를 사용하고 몇 초마다 새 데이터를 자동으로 확인합니다.

Databricks Asset Bundles(DAB) 리소스 정의

위에 표시된 모든 Databricks 리소스와 애플리케이션 코드는 단일 소스 코드 리포지토리에서 DABs 번들로 유지 관리할 수 있습니다. 이는 또한 단일 명령으로 모든 리소스를 Databricks workspace에 배포할 수 있음을 의미합니다. 자세한 배포 지침은 GitHub 리포지토리 를 참조하세요.

이는 소프트웨어 개발 수명 주기를 단순화하고, 개발, 스테이징, 프로덕션 환경 전반에서 CI/CD 모범 사례를 통한 배포를 지원합니다. 

다음 섹션에서는 번들 파일에 대해 더 자세히 설명합니다.

번들 구성

databricks.yml에는 번들 설정 및 포함된 리소스 형식의 DABs 번들 구성이 포함됩니다.

이 예제에서는 개발 및 스테이징 환경만 정의합니다. 프로덕션 사용 사례의 경우 추가 환경을 추가하는 것을 고려해 보세요. 더 고급 구성 예제는 databricks-dab-examples repository 및 DABs 문서 를 참조하세요.

Lakebase 설정 및 Unity Catalog와 동기화

DABs에서 Lakebase 인스턴스를 정의하려면 database_instances 리소스를 사용합니다. 최소한 인스턴스의 capacity 필드를 정의해야 합니다.

또한 Unity Catalog 테이블과 Postgres 테이블 간에 관리형 동기화 파이프라인을 설정하는 synced_database_tables 리소스를 정의합니다.

이를 위해 source_table_full_name을 통해 소스 테이블을 정의합니다. Unity Catalog의 소스 테이블은 primary_key_columns 필드에 정의된 업데이트를 처리할 수 있도록 고유한 (복합) 기본 키가 필요합니다.

Lakebase의 대상 테이블 위치는 logical_database_name으로 지정된 대상 데이터베이스 개체와 name으로 정의된 테이블 이름에 따라 결정됩니다.

동기화 테이블은 Unity Catalog 개체이기도 합니다. 이 리소스 정의에서는 databricks.yml에 정의된 DABs 변수를 사용하여 동기화 테이블을 소스 테이블과 동일한 카탈로그 및 스키마에 배치합니다. 다른 변수 값을 설정하여 이러한 default를 재정의할 수 있습니다.

이 사용 사례에서는 SNAPSHOT 동기화 모드를 사용합니다. 사용 가능한 옵션에 대한 자세한 내용은 고려 사항 및 모범 사례 섹션을 참조하세요.

Databricks Apps 리소스

DABs를 사용하면 Databricks Apps compute 리소스를 리소스로, 그리고 애플리케이션 소스 코드를 하나의 번들로 정의할 수 있습니다. 이를 통해 Databricks 리소스 정의와 소스 코드를 단일 repository에 보관할 수 있습니다. 이 경우 FastAPI 및 Vite 기반 앱 소스 코드는 프로젝트의 최상위 앱 디렉터리에 저장됩니다.

구성은 database.yml 리소스 정의에 정의된 database_name 및 instance_name을 동적으로 참조합니다.

데이터베이스는 DABs에서 정의할 수 있는 지원되는 앱 리소스 입니다. 데이터베이스를 앱 리소스로 정의하면 앱 service principal이 Lakebase 인스턴스와 상호 작용할 때 사용할 Postgres 역할을 자동으로 만듭니다.

고려 사항 및 모범 사례

모듈식의 재사용 가능한 번들 만들기

이 예제는 개발 및 스테이징 환경에 배포되지만, DABs를 사용하면 개발 수명 주기에 맞게 여러 환경을 쉽게 정의할 수 있습니다. Azure DevOps, GitHub Actions 또는 기타 DevOps 플랫폼으로 CI/CD 파이프라인을 설정하여 이러한 환경에 대한 배포를 자동화하세요.

DABs의 대체 및 변수 를 사용하여 환경별 구성을 정의할 수 있습니다. 예를 들어 개발 및 프로덕션 환경에 대해 서로 다른 Lakebase 인스턴스 용량 구성을 정의하여 비용을 절감할 수 있습니다. 마찬가지로 동기화된 테이블에 대해 서로 다른 Lakebase 동기화 모드를 정의하여 환경별 데이터 지연 시간 요구사항을 충족할 수 있습니다.

Lakebase 동기화 모드 선택 및 성능 최적화

올바른 Lakebase 동기화 모드 를 선택하는 것은 비용과 데이터 최신성의 균형을 맞추는 데 중요합니다. 

 

스냅샷

Trigger됨

연속

업데이트 방법

각 실행 시 전체 테이블 교체초기 전체 복사 + 증분 변경 사항초기 로드 + 실시간 스트리밍 업데이트

성능

다른 모드보다 10배 더 효율적균형 잡힌 비용 및 성능높은 비용(지속적으로 실행)

지연 시간

높은 지연 시간
(예약/수동)
중간 지연 시간
(온디맨드)
가장 낮은 지연 시간
(실시간, 약 15초)

최적의 용도

  • 자주 변경되지 않음
  • 소스 테이블의 10% 이상 수정
  • 긴급도가 낮은 대량 업데이트
  • 비용과 지연 시간의 절충
  • 합리적인 수준의 최신 데이터
  • refresh 타이밍 제어
  • 미션 크리티컬 시스템
  • 실시간 데이터 요구 사항
  • 수동 refresh 허용 안 함

제한 사항

  • 더 높은 지연 시간
  • 매번 전체 테이블 재생성
  • 5분보다 빠른 주기로 실행하지 마세요.
  • 변경 데이터 피드가 필요합니다
  • 너무 자주 실행하면 비용이 더 많이 듦
  • 가장 높은 비용
  • 변경 데이터 피드가 필요합니다
  • 지속적인 리소스 소비

관리형 동기화 파이프라인에 대한 알림을 설정하여 장애 발생 시 알림을 받으세요.

query 성능을 개선하려면 적절한 인스턴스 용량을 선택하여 Lakebase 데이터베이스 인스턴스의 크기를 적절하게 조정하세요. query 패턴과 일치하는 Postgres의 동기화 테이블에 인덱스 를 생성하는 것을 고려해 보세요. 사전 설치된 pg_stat_statements 익스텐션 을 사용하여 query 성능을 조사하세요.

프로덕션용 앱 준비하기

예제 애플리케이션은 Lakebase에서 최신 데이터를 가져오기 위해 폴링 기반 접근 방식을 구현합니다. 요구 사항에 따라 서버 리소스를 더 효율적으로 사용하고 데이터 업데이트의 적시성을 높이기 위해 WebSockets 또는 Server-Sent-Events 를 기반으로 푸시 기반 접근 방식을 구현할 수도 있습니다.

FastAPI 백엔드가 데이터베이스 운영을 trigger할 필요성을 줄여 더 많은 앱 사용자로 확장하려면 캐싱 구현을 고려해 보세요. 예를 들어 fastapi-cache 를 사용하여 query 결과를 메모리에 캐싱할 수 있습니다.

인증 및 권한 부여

권한 부여 및 인증에 OAuth 2.0을 사용하고, 레거시 개인용 액세스 토큰(PAT)에는 의존하지 마세요. 로컬 머신에서 개발하는 동안 Databricks CLI를 사용하여 OAuth U2M 인증 을(를) 설정하여 Lakebase와 같은 라이브 Databricks 리소스와 원활하게 상호 작용하세요.

마찬가지로 배포된 앱은 연결된 service principal을 사용하여 다른 Databricks 서비스에 대해 OAuth M2M 인증 및 권한 부여를 수행합니다. 또는 앱에 대한 사용자 권한 부여를 설정 하여 앱 사용자를 대신해 Databricks 리소스에 대한 작업을 수행할 수 있습니다.

추가적인 일반 및 보안 모범 사례는 Databricks 앱 설명서의 앱 모범 사례 도 참조하세요.

결론

프로덕션 데이터 애플리케이션을 구축한다고 해서 배포, 데이터 동기화, 인프라 관리를 위해 여러 도구를 따로따로 다뤄야 하는 것은 아닙니다. Databricks Apps는 인프라를 관리할 필요 없이 Python 및 Node.js 애플리케이션을 실행할 수 있는 serverless compute를 제공합니다. Lakebase 동기화 테이블은 Unity Catalog Delta 테이블에서 Postgres로 짧은 대기 시간의 데이터를 자동으로 제공하여 사용자 지정 ETL 파이프라인을 제거합니다. Databricks 자산 Bundles는 애플리케이션 코드, 인프라 정의, 데이터 동기화 구성을 여러 환경에 일관되게 배포되는 버전 제어 단일 번들로 패키지하여 모든 것을 하나로 통합합니다.

배포 복잡성은 추진력을 저해합니다. 변경 사항을 빠르고 자신 있게 배포할 수 없으면 반복 작업 속도가 느려지고, 환경 drift가 발생하며, 팀 간 조율에 시간을 낭비하게 됩니다. DABs를 사용하여 전체 애플리케이션 스택을 코드로 취급함으로써 CI/CD 자동화를 활성화하고, 개발, 스테이징, 프로덕션 전반에 걸쳐 일관된 배포를 보장하며, 귀사와 팀이 배포 파이프라인 문제 해결 대신 기능 구축에 집중할 수 있도록 합니다. 이렇게 하면 일반적인 배포 문제 없이 프로토타입에서 프로덕션으로 전환할 수 있습니다.

전체 예제는 단계별 배포 지침과 함께 GitHub repository 에서 확인할 수 있습니다.

시작하기

Databricks LakebaseDatabricks AppsDatabricks 자산 Bundles 에 대해 자세히 알아보려면 Databricks 설명서를 방문하세요. Databricks Apps에 대한 더 많은 개발자 리소스를 보려면 Databricks Apps Cookbook 및 Cookbook Resource Collection을 살펴보세요.

 

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

게시물을 놓치지 마세요

관심 있는 카테고리를 구독하고 최신 게시물을 받은편지함으로 받아보세요

다음은 무엇인가요?

ETL and BI Migration Strategies

솔루션

January 27, 2025/1분 이내 소요

Databricks로의 마이그레이션 탐색: 아키텍처와 전략적 접근법

DeepSeek R1 on Databricks

공지사항

January 31, 2025/1분 이내 소요

DeepSeek R1 on Databricks