> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-trino-dialect.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ClickHouse Cloud의 예약 스케일링 기능을 설명하는 문서

# 예약 스케일링

export const Image = ({img, alt, size = "lg", background}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  const backgroundColor = background === "white" ? "white" : background === "black" ? "rgb(31 31 28)" : undefined;
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} style={{
    backgroundColor
  }} />
      </Frame>
    </div>;
};

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <span>베타</span>
            </a>;
  }
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#beta-features" className="betaBadge">
            <span>베타 기능</span>
        </a>;
};

<BetaBadge />

ClickHouse Cloud 서비스는 CPU 및 메모리 활용률에 따라 자동으로 스케일링되지만, 많은 워크로드는 예측 가능한 패턴을 보입니다. 예를 들어 일일 수집 급증, 야간에 실행되는 배치 작업, 또는 주말에 급격히 감소하는 트래픽 등이 있습니다. 이러한 사용 사례에서는 예약 스케일링을 통해 실시간 메트릭과 관계없이 서비스가 정확히 언제 스케일 업 또는 축소되어야 하는지 정의할 수 있습니다.

예약 스케일링을 사용하면 ClickHouse Cloud 콘솔에서 시간 기반 규칙 집합을 직접 구성할 수 있습니다. 각 규칙은 활성화되는 요일, UTC 기준 시작 및 종료 시간, 그리고 해당 윈도우에 적용할 설정을 지정합니다. 설정에는 레플리카 수(수평), 레플리카당 최소 및 최대 메모리(수직), 서비스의 유휴 상태 허용 여부가 포함됩니다. 해당 윈도우가 활성화되어 있는 동안 ClickHouse Cloud는 이러한 설정을 적용한 후, 윈도우가 종료되면 기본 스케일링 구성으로 되돌립니다. 따라서 서비스는 수요가 발생한 후에 대응하는 대신 수요가 도달하기 전에 적절한 크기로 조정됩니다.

이는 CPU 및 메모리 부하에 동적으로 대응하는 메트릭 기반 자동 스케일링과는 다릅니다. 예약 스케일링은 결정적입니다. 즉, 스케일링이 정확히 언제, 어떤 크기로 이루어지는지 명확히 알 수 있습니다. 두 방식은 상호 보완적입니다. 서비스는 기본 스케일링 일정을 설정해 두고, 해당 윈도우 내에서 워크로드가 예기치 않게 변동하더라도 자동 스케일링의 이점을 계속 활용할 수 있습니다.

예약 스케일링은 현재 **베타**로 제공됩니다.

<div id="setting-up-a-scaling-schedule">
  ## 스케일링 일정 설정
</div>

일정을 구성하려면 ClickHouse Cloud 콘솔에서 서비스로 이동한 다음 설정으로 이동합니다. 여기에서 **Schedule Override**를 선택하고 새 규칙을 추가합니다.

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/avthXRFo-wpxxds8/images/cloud/features/autoscaling/scheduled-scaling-1.webp?fit=max&auto=format&n=avthXRFo-wpxxds8&q=85&s=3a9290c8080085378c3ad54f34c87f23" size="md" alt="시간 기반 스케일링 규칙을 보여주는 ClickHouse Cloud 콘솔의 Scaling Schedules 인터페이스" border width="748" height="1606" data-path="images/cloud/features/autoscaling/scheduled-scaling-1.webp" />

<Image img="https://mintcdn.com/private-7c7dfe99-trino-dialect/avthXRFo-wpxxds8/images/cloud/features/autoscaling/scheduled-scaling-2.webp?fit=max&auto=format&n=avthXRFo-wpxxds8&q=85&s=d51794fc6c4ccf6b410454180de13231" size="md" alt="ClickHouse Cloud 콘솔에서 예약 스케일링 규칙을 구성하는 모습" border width="938" height="534" data-path="images/cloud/features/autoscaling/scheduled-scaling-2.webp" />

각 규칙에는 다음 항목이 필요합니다:

* **활성 요일:** 규칙이 적용되는 요일
* **시작 및 종료 시간:** 규칙이 적용되는 윈도우로, **UTC** 기준 정시로 지정합니다. 종료 시간이 시작 시간보다 이른 경우 다음 날까지 밤새 적용됩니다.
* **적용할 설정:** 윈도우가 활성화된 동안 사용할 레플리카 수, 레플리카당 최소 및 최대 메모리, 최소 유휴 시간(또는 유휴 상태 전환 안 함)

윈도우가 겹치지 않는 한 여러 규칙을 조합해 전체 주간 일정을 구성할 수 있습니다. 예를 들어, 월요일부터 금요일까지 UTC 06:00부터 20:00까지 적용되는 단일 규칙을 사용하면 업무 시간 동안 서비스를 더 큰 크기로 유지하고, 해당 윈도우 밖에서는 기본 구성을 적용할 수 있습니다.

<div id="use-cases">
  ## 활용 사례
</div>

**배치 및 ETL 워크로드:** 야간 수집 작업이 실행되기 전에 스케일 업하고 완료되면 다시 축소하면, 낮 동안 유휴 상태인 시간대에 리소스를 과도하게 프로비저닝하지 않아도 됩니다.

**예측 가능한 트래픽 패턴:** 피크 시간이 일정한 서비스(예: 업무 시간대의 쿼리 트래픽)는 부하가 들어온 뒤 자동 스케일링이 반응할 때까지 기다리지 않고, 미리 스케일링하여 부하를 처리할 수 있습니다.

**주말 축소:** 수요가 더 낮은 주말에는 레플리카 수 또는 메모리 티어를 줄이고, 월요일 아침의 급증에 대비해 그 전에 용량을 복원합니다.

**비용 제어:** ClickHouse Cloud 비용을 관리하는 팀은 활용률이 낮은 것으로 예상되는 시간대에 예약된 축소를 적용해 두면, 수동 개입 없이도 리소스 사용량을 의미 있게 줄일 수 있습니다.

<Note>
  예약 스케일링 작업과 동시에 자동 스케일링 권장 사항이 적용될 수 있으며, 이 경우 트리거 시점에는 예약 일정이 우선합니다.
</Note>

<div id="handling-bursty-workloads">
  ## 워크로드 급증 대응
</div>

워크로드가 곧 급증할 것으로 예상되는 경우
[ClickHouse Cloud API](/ko/products/cloud/features/admin-features/api/api-overview)를 사용해
급증에 대비하여 서비스 규모를 미리 확장하고, 수요가 줄어들면 다시 축소할 수
있습니다.

각 레플리카에서 현재 사용 중인 CPU 코어 수와 메모리를
확인하려면 아래 쿼리를 실행할 수 있습니다:

```sql theme={null}
SELECT *
FROM clusterAllReplicas('default', view(
    SELECT
        hostname() AS server,
        anyIf(value, metric = 'CGroupMaxCPU') AS cpu_cores,
        formatReadableSize(anyIf(value, metric = 'CGroupMemoryTotal')) AS memory
    FROM system.asynchronous_metrics
))
ORDER BY server ASC
SETTINGS skip_unavailable_shards = 1
```
