> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sifi.life/llms.txt
> Use this file to discover all available pages before exploring further.

# 스케일링과 배포

> 이 문서는 **[Databricks Apps](/blog/guides/apps/overview)** 섹션의 일부입니다.

Databricks Apps의 스케일링, 배포 방식, 모니터링, 의존성 관리에 관한 고급 기능을 다룹니다.

***

## Scale to Zero — App Spaces (Private Preview)

**App Spaces** 는 microVM 기반의 새로운 런타임으로, Scale to Zero를 지원합니다. 약 30분간 트래픽이 없으면 자동으로 중지되고, 새 요청이 들어오면 자동 재시작됩니다.

> **주의**
> **현재 상태**: App Spaces는 **Private Preview** 입니다. 기존 앱을 App Spaces로 변환할 수 없으며, 새 앱을 생성해야 합니다. GA 전까지는 아래 "현재 비용 절감 방법"을 참고하세요.

### 동작 방식

| 상태                 | 조건                   | 과금 여부   | 응답 시간              |
| ------------------ | -------------------- | ------- | ------------------ |
| **Active**         | 요청 처리 중 또는 최근 트래픽 있음 | 과금      | 즉시                 |
| **Idle**           | 트래픽 없음 (30분 미만)      | 과금      | 즉시                 |
| **Scaled to Zero** | 30분간 트래픽 없어 자동 중지    | **비과금** | 콜드 스타트 (수 초\~수십 초) |

### App Spaces의 현재 제한사항

| 항목                        | 상태                             |
| ------------------------- | ------------------------------ |
| **기존 앱 변환**               | 불가 — 새 앱 생성 필요                 |
| **워크스페이스 Network Policy** | 아직 미적용 (SEG, Private Link 미지원) |
| **템플릿 기반 생성**             | 미지원 — API로 직접 생성               |

### 현재 비용 절감 방법 (GA 전까지)

App Spaces GA 전까지는 다음 방법으로 비용을 관리할 수 있습니다:

**1. Databricks Jobs로 자동 시작/중지 스케줄링:**

```python theme={null}
# 앱 자동 중지/시작 Job 예시 (Python SDK)
from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

# 퇴근 시 앱 중지 (7PM Job으로 등록)
w.apps.stop("my-dashboard-app")

# 출근 시 앱 시작 (7AM Job으로 등록)
w.apps.start("my-dashboard-app")
```

**2. CLI 기반 스크립트:**

```bash theme={null}
# cron 또는 Databricks Job으로 실행
# 퇴근 시 (19:00)
databricks apps stop my-dashboard-app

# 출근 시 (07:00)
databricks apps start my-dashboard-app
```

**3. 사용하지 않는 앱 수동 중지:**

```bash theme={null}
# 모든 앱 목록 확인
databricks apps list --output json | jq '.[] | select(.status == "RUNNING") | .name'

# 불필요한 앱 중지
databricks apps stop unused-app-1
```

### 콜드 스타트 최적화

Scale to Zero에서 앱이 다시 시작될 때 **콜드 스타트** 시간이 발생합니다. 이를 최소화하는 방법:

| 최적화 방법                   | 효과       | 설명                                      |
| ------------------------ | -------- | --------------------------------------- |
| **경량 의존성**               | 시작 시간 단축 | `requirements.txt`에서 불필요한 패키지 제거        |
| **Lazy Loading**         | 초기 로드 단축 | 무거운 라이브러리는 필요할 때 import                 |
| **Serverless Warehouse** | 쿼리 응답 단축 | Classic Warehouse는 콜드 스타트가 길어 추가 지연 발생  |
| **캐싱**                   | 반복 요청 가속 | `st.cache_data`, `st.cache_resource` 활용 |

> **참고**
> **비용 참고**: 실제 운영 사례에서 Medium 사이즈 앱의 월 비용은 약 **$215** 입니다 (24/7 실행 기준). 업무 시간만 운영(12시간/일, 주 5일)하면 약 **$65/월** 로 절감할 수 있습니다.

***

## Horizontal Scaling (수평 스케일링, Private Preview)

단일 컨테이너의 성능 한계를 넘기 위해 **최대 5개 인스턴스** 로 수평 확장할 수 있습니다.

| 항목         | 설명                                   |
| ---------- | ------------------------------------ |
| **상태**     | Private Preview                      |
| **인스턴스 수** | 1\~5개 (수동 설정)                        |
| **세션 친화성** | Stateful session affinity 지원 (업계 최초) |
| **무중단 배포** | Zero-downtime deployments            |
| **빌드 캐시**  | Deployment build caching             |

### REST API 설정

```json theme={null}
{
  "name": "my-scaled-app",
  "description": "Horizontally scaled app",
  "compute_size": "MEDIUM",
  "compute_min_instances": 1,
  "compute_max_instances": 3
}
```

> **주의**
> 기존 앱을 Horizontal Scaling으로 업그레이드할 수 없습니다. 새 앱을 생성해야 합니다. 템플릿 기반 생성도 미지원이며, API를 통해 직접 생성해야 합니다.

***

## Git 기반 배포 (Public Preview)

소스 코드를 수동으로 업로드하는 대신, **Git 레포지토리에서 직접 배포** 할 수 있습니다.

### 주요 기능

| 기능           | 설명                                |
| ------------ | --------------------------------- |
| **Git 레퍼런스** | 브랜치, 태그, 커밋 해시 지정 가능              |
| **소스 코드 경로** | 레포 내 특정 디렉토리 지정 가능                |
| **강제 적용**    | 워크스페이스 관리자가 Git-only 배포를 강제할 수 있음 |

```bash theme={null}
# Git 기반 배포 (CLI)
databricks apps deploy my-app \
  --git-url https://github.com/myorg/myrepo \
  --git-ref main \
  --source-code-path ./app
```

> **참고**
> GitHub Enterprise Managed Users(EMU)의 개인 레포는 OAuth 제한으로 인해 PAT를 대안으로 사용해야 합니다.

***

## 앱 텔레메트리 / 모니터링 (Beta)

**OpenTelemetry** 기반으로 앱의 로그, 스팬, 메트릭을 Unity Catalog에 자동 수집할 수 있습니다.

### 설정 방법

`app.yaml`에 텔레메트리 설정을 추가하면 앱 코드 변경 없이 자동으로 계측됩니다:

```yaml theme={null}
command: ['streamlit', 'run', 'app.py']
# 텔레메트리 내보내기 설정 (app.yaml 또는 앱 설정 UI에서)
```

> **참고**
> 텔레메트리 데이터는 near real-time으로 Unity Catalog 시스템 테이블에 저장됩니다. 앱 성능 모니터링, 오류 추적, 사용 패턴 분석에 활용할 수 있습니다.

***

## uv 의존성 관리 (2026년 3월\~)

`requirements.txt` 대신 **uv** 를 사용하여 Python 의존성을 관리할 수 있습니다.

```toml theme={null}
# pyproject.toml
[project]
name = "my-databricks-app"
version = "0.1.0"
requires-python = ">=3.10"
dependencies = [
    "streamlit>=1.32.0",
    "databricks-sdk>=0.20.0",
    "pandas>=2.2.0",
]
```

```bash theme={null}
# uv.lock 생성
uv lock
```

> **참고**
> **uv vs pip**: uv는 pip보다 최대 10-100배 빠른 의존성 해결과 설치를 제공합니다. `pyproject.toml` + `uv.lock`으로 전환하면 배포 시간이 단축됩니다. 기존 `requirements.txt`도 계속 지원됩니다.
