Databricks Apps의 기본 구조와 배포 방법은 Apps 가이드 — 앱 만들기를 먼저 참고하세요.
Lakebase 리소스 연결과 Service Principal 권한은 Apps 리소스 관리에서 다룹니다.
Lakebase란?
Lakebase는 Databricks가 완전 관리형으로 제공하는 PostgreSQL 호환 트랜잭션 데이터베이스입니다. AWS Aurora나 Cloud SQL과 달리, Unity Catalog에 통합되어 있어 별도의 네트워크 피어링이나 IAM 설정 없이 바로 사용할 수 있습니다. OLTP(온라인 트랜잭션 처리) 워크로드를 Lakebase에서 처리하고, Data Sync 기능으로 Delta Lake에 자동 동기화하면 분석까지 하나의 플랫폼에서 해결됩니다.사전 준비 체크리스트
시작하기 전에 아래 항목이 모두 준비되어 있는지 확인하세요.1. Lakebase 데이터베이스 및 테이블 생성
Lakebase 데이터베이스 생성
아래 SQL은 Unity Catalog 내에 Lakebase로 관리되는 새 데이터베이스를 생성합니다.MANAGED LAKEBASE 키워드가 이 데이터베이스를 PostgreSQL 엔진으로 구동하겠다는 선언입니다.
테이블 생성
이 SQL은 상품 정보를 저장할 테이블을 만듭니다. PostgreSQL 표준 문법(SERIAL, VARCHAR, NUMERIC 등)을 그대로 사용할 수 있습니다.
2. FastAPI + psycopg2 연결 설정
app.yaml (리소스 선언)
이 파일은 Databricks Apps에 배포할 앱의 실행 명령, 환경변수, 그리고 Lakebase 리소스 접근 권한을 선언합니다.resources 섹션에서 lakebase_database를 선언하면, 앱의 Service Principal이 해당 DB에 접근할 수 있는 권한을 자동으로 받습니다.
requirements.txt
연결 헬퍼 (db.py)
이 코드는 Lakebase에 연결하기 위한 커넥션 풀을 관리합니다. 핵심은generate_credential() 함수로 임시 인증 토큰을 발급받는 부분입니다.
generate_credential()이 왜 필요한가?
Lakebase는 고정된 사용자/비밀번호 대신 토큰 기반 인증을 사용합니다. generate_credential()은 현재 Service Principal의 권한으로 임시 PostgreSQL 접속 정보(호스트, 포트, 사용자명, 비밀번호)를 발급합니다. 이 토큰은 1시간 동안 유효하므로, 프로덕션에서는 만료 전에 풀을 재생성하는 로직이 반드시 필요합니다 (4장에서 다룹니다).
ThreadedConnectionPool 설정값 의미
3. CRUD 엔드포인트
main.py
아래 코드는 FastAPI로 상품(Product)의 생성·조회·수정·삭제 엔드포인트를 구현합니다.db() 컨텍스트 매니저가 커넥션 대여, 커밋/롤백, 반납을 자동으로 처리합니다.
4. 커넥션 풀링 고급 패턴
프로덕션에서는 토큰 만료를 자동 처리해야 합니다. 아래PoolRefresher는 백그라운드 스레드에서 50분(3000초)마다 커넥션 풀을 폐기하고 새로 생성합니다. 토큰 유효기간이 1시간이므로, 50분 간격이면 만료 전에 항상 새 토큰으로 교체됩니다.
5. Data Sync로 Delta Lake 동기화
Lakebase 테이블 변경분을 Delta Lake로 자동 동기화하려면 Data Sync를 설정합니다. 동기화된 Delta 테이블에서 BI 대시보드나 ML 파이프라인을 연결할 수 있습니다. 아래 SQL은products 테이블의 변경 사항을 5분마다 Delta Lake 테이블로 복제하는 동기화 작업을 생성합니다.
Python SDK로 Data Sync 생성
동일한 작업을 Python SDK로도 수행할 수 있습니다. CI/CD 파이프라인이나 자동화 스크립트에서 유용합니다.트러블슈팅
연결 실패: connection refused 또는 timeout
권한 오류: permission denied for table products
app.yaml의 resources 섹션에서 permission이 READ_WRITE가 아닌 경우, 또는 리소스 선언이 누락된 경우 발생합니다.
해결:
app.yaml에lakebase_database리소스가 정확히 선언되어 있는지 확인permission: READ_WRITE로 설정되어 있는지 확인- 앱을 재배포(
databricks apps deploy)하여 권한 변경을 적용
토큰 만료: password authentication failed
generate_credential()로 발급받은 토큰이 1시간을 초과하여 만료됨.
해결: 4장의 PoolRefresher 패턴을 적용하거나, 요청마다 _pool.closed를 체크하여 풀을 재생성하세요.