> ## 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.

# Serverless 컴퓨트

## 서버리스 컴퓨팅이란?

> 💡 **Serverless 컴퓨트** 는 사용자가 서버(클러스터)를 직접 생성하거나 관리할 필요 없이, **코드를 실행하면 Databricks가 알아서 리소스를 할당** 해 주는 방식입니다.

서버리스 컴퓨팅은 인프라 관리의 부담을 완전히 제거합니다. 노드 타입 선택, 오토스케일링 설정, 런타임 버전 관리, 보안 패치 적용 등 모든 인프라 운영을 Databricks가 대신 처리합니다. 사용자는 **비즈니스 로직에만 집중** 할 수 있습니다.

***

## 왜 서버리스가 필요한가?

기존 클러스터 기반 방식에서 팀이 겪는 공통적인 문제들을 서버리스가 해결합니다.

| 기존 방식의 문제                     | 서버리스의 해결                           |
| ----------------------------- | ---------------------------------- |
| 클러스터 시작까지 3\~5분 대기합니다         | **수 초 만에 시작** 되어 즉시 작업을 시작합니다      |
| 노드 타입, 수량, 런타임 버전을 선택해야 합니다   | **설정 없이** 코드만 실행하면 됩니다             |
| 유휴 클러스터가 비용을 발생시킵니다           | **사용한 만큼만** 과금되며 유휴 비용이 없습니다       |
| 런타임 업그레이드, 보안 패치를 직접 적용해야 합니다 | Databricks가 **자동으로 최신 상태** 를 유지합니다 |
| 클러스터 관리를 위한 전담 인력이 필요합니다      | **관리 인건비 절감**, 인프라 팀 부담 감소         |

***

## Databricks 서버리스 아키텍처

서버리스의 핵심은 **컴퓨트 리소스가 Databricks 관리 환경에서 실행** 된다는 것입니다. 기존 방식에서는 고객의 클라우드 계정(VPC/VNet)에서 VM이 실행되었지만, 서버리스에서는 Databricks가 관리하는 인프라에서 실행됩니다.

| 구성 요소                   | 위치               | 설명               |
| ----------------------- | ---------------- | ---------------- |
| Databricks Workspace    | 고객 환경            | 워크스페이스 UI 및 관리   |
| 클라우드 스토리지 (S3/ADLS/GCS) | 고객 환경            | 데이터 저장           |
| Serverless Compute      | Databricks 관리 환경 | 컴퓨팅 리소스 자동 관리    |
| Control Plane           | Databricks 관리 환경 | 작업 스케줄링, 클러스터 관리 |

고객의 데이터는 고객 환경에 유지되며, 서버리스 컴퓨트만 Databricks가 관리합니다.

### 기존 방식과의 비교

| 구분           | Customer-Managed | Serverless             |
| ------------ | ---------------- | ---------------------- |
| **VM 실행 위치** | 고객의 클라우드 계정      | Databricks 관리 환경       |
| **VM 수명주기**  | 고객이 시작/중지 관리     | Databricks가 자동 관리      |
| **네트워크**     | 고객 VPC/VNet 내부   | Databricks VPC (보안 연결) |
| **런타임 버전**   | 고객이 선택/업그레이드     | 항상 최신 버전 자동 적용         |
| **스토리지 접근**  | VPC 내부에서 직접      | 보안 채널을 통해 고객 스토리지 접근   |

***

## 서버리스 지원 워크로드

현재 Databricks에서 서버리스를 사용할 수 있는 워크로드는 다음과 같습니다.

| 워크로드                 | 서버리스 지원 | 설명                                     |
| -------------------- | ------- | -------------------------------------- |
| **SQL Warehouse**    | ✅ GA    | SQL 분석, BI 도구 연결에 가장 많이 사용됩니다          |
| **Notebooks**        | ✅ GA    | 대화형 개발. Python, SQL, Scala, R 모두 지원합니다 |
| **Jobs (Workflows)** | ✅ GA    | 스케줄된 배치 작업. JAR 태스크도 지원됩니다             |
| **SDP (Pipelines)**  | ✅ GA    | 선언적 데이터 파이프라인을 서버리스로 실행합니다             |
| **Model Serving**    | ✅ GA    | ML 모델 추론 엔드포인트입니다                      |
| **Vector Search**    | ✅ GA    | 벡터 유사도 검색 인덱스입니다                       |
| **Apps**             | ✅ GA    | Streamlit, Gradio 등 웹 애플리케이션입니다        |

***

## 서버리스 vs 클래식 상세 비교

### 시작 시간 비교

| 컴퓨트 유형                   | 시작 시간                                         |
| ------------------------ | --------------------------------------------- |
| Customer-Managed Cluster | VM 프로비저닝 (\~3분) + Spark 초기화 (\~2분) = **약 5분** |
| Serverless Compute       | 웜 풀 할당 (\~5초) + 즉시 실행 = **약 10초**             |

| 단계          | Customer-Managed    | Serverless             |
| ----------- | ------------------- | ---------------------- |
| VM 할당       | 2\~3분 (클라우드 API 호출) | **수 초**(사전 예열된 풀에서 할당) |
| 런타임 초기화     | 30초\~1분             | **이미 초기화됨**            |
| 라이브러리 설치    | 추가 시간 소요            | **환경 설정에 포함**          |
| **총 소요 시간** | **3\~5분**           | **5\~15초**             |

### 관리 부담 비교

| 관리 항목            | Customer-Managed | Serverless |
| ---------------- | ---------------- | ---------- |
| 노드 타입 선택         | 사용자가 직접          | 자동         |
| 오토스케일링 설정        | Min/Max 직접 설정    | 자동         |
| 런타임 버전 관리        | 직접 선택/업그레이드      | 항상 최신      |
| 보안 패치            | 런타임 업데이트 필요      | 자동 적용      |
| Spot Instance 설정 | 직접 구성            | 자동 최적화     |
| Init Script      | 직접 관리            | 환경 설정으로 대체 |
| 라이브러리 충돌         | 직접 해결            | 격리된 환경     |

***

## 서버리스 SQL Warehouse 상세

서버리스 SQL Warehouse는 가장 먼저 도입되고, 가장 널리 사용되는 서버리스 워크로드입니다.

| 특징            | 설명                               |
| ------------- | -------------------------------- |
| **즉시 시작**     | 수 초 내에 쿼리 실행이 가능합니다              |
| **자동 스케일링**   | 동시 쿼리 부하에 따라 자동으로 확장/축소됩니다       |
| **Photon 기본** | C++ 벡터화 엔진이 기본으로 활성화되어 있습니다      |
| **자동 중지**     | 유휴 상태에서 자동으로 리소스를 해제합니다          |
| **관리 불필요**    | 사이즈만 선택하면 나머지는 Databricks가 관리합니다 |

```sql theme={null}
-- 서버리스 SQL Warehouse에서 쿼리 실행 (일반 SQL과 동일)
SELECT
    region,
    COUNT(*) AS order_count,
    SUM(revenue) AS total_revenue
FROM production.ecommerce.orders
WHERE order_date >= '2025-01-01'
GROUP BY region
ORDER BY total_revenue DESC;
```

***

## 서버리스 Notebooks 상세

서버리스 Notebooks는 대화형 개발에서 클러스터 시작 대기 시간을 제거합니다.

### 사용 방법

1. 노트북 상단의 클러스터 선택 드롭다운을 클릭합니다
2. **Serverless** 를 선택합니다
3. 코드를 실행하면 수 초 내에 결과를 확인할 수 있습니다

### 환경 설정 (Environment)

서버리스 Notebooks에서는 **Environment** 를 통해 Python 라이브러리를 관리합니다.

```python theme={null}
# 노트북 상단에서 %pip로 라이브러리 설치 가능
%pip install scikit-learn==1.4.0 xgboost==2.0.0

# 설치 후 바로 사용
import sklearn
import xgboost
```

> 💡 **Environment vs Init Script**: 서버리스에서는 Init Script 대신 **Environment** 설정을 사용합니다. 노트북 또는 Job에서 필요한 Python 라이브러리를 `requirements.txt` 형식으로 지정할 수 있습니다.

***

## 서버리스 Jobs 상세

서버리스 Jobs는 스케줄된 배치 작업을 인프라 관리 없이 실행합니다.

### Databricks Asset Bundle에서 설정

```yaml theme={null}
# databricks.yml - 서버리스 Job 설정
resources:
  jobs:
    daily_etl:
      name: "Daily ETL Pipeline"
      tasks:
        - task_key: "extract"
          notebook_task:
            notebook_path: "/Workspace/etl/extract"
          # environment_key를 지정하면 Serverless로 실행됩니다
          environment_key: "default"

        - task_key: "transform"
          depends_on:
            - task_key: "extract"
          notebook_task:
            notebook_path: "/Workspace/etl/transform"
          environment_key: "default"

        - task_key: "load"
          depends_on:
            - task_key: "transform"
          notebook_task:
            notebook_path: "/Workspace/etl/load"
          environment_key: "default"

      environments:
        - environment_key: "default"
          spec:
            client: "1"
            dependencies:
              - "pandas>=2.0"
              - "requests"
              - "great-expectations"

      schedule:
        quartz_cron_expression: "0 0 6 * * ?"  # 매일 오전 6시
        timezone_id: "Asia/Seoul"
```

### UI에서 서버리스 Job 설정

1. **Workflows** 메뉴에서 **Create Job** 클릭합니다
2. 태스크 설정에서 **Compute** 옵션을 **Serverless** 로 선택합니다
3. 필요한 라이브러리를 **Environment** 탭에서 추가합니다
4. 스케줄을 설정합니다

***

## 서버리스 파이프라인 (SDP)

선언적 데이터 파이프라인(SDP, 구 DLT)도 서버리스로 실행할 수 있습니다.

```python theme={null}
# SDP 파이프라인 노트북
import dlt

@dlt.table(comment="원본 주문 데이터")
def bronze_orders():
    return spark.readStream.format("cloudFiles") \
        .option("cloudFiles.format", "json") \
        .load("/Volumes/production/raw/orders/")

@dlt.table(comment="정제된 주문 데이터")
@dlt.expect_or_drop("valid_amount", "total_amount > 0")
def silver_orders():
    return dlt.read_stream("bronze_orders") \
        .filter("status IS NOT NULL")
```

파이프라인 설정에서 **Serverless** 를 선택하면, 파이프라인 실행 시 자동으로 서버리스 컴퓨트가 할당됩니다.

***

> **다음 페이지**: 보안, 비용 모델, 제한사항, 마이그레이션 가이드 내용은 [서버리스 컴퓨팅 보안, 비용, 마이그레이션](/training/04-compute-and-workspace/serverless-compute-operations) 페이지에서 이어집니다.
