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

# 배포

> 발행된 버전을 프로덕션에 배포하고, 필요 시 롤백하며, 배포 생명주기를 관리하세요.

## 배포 생명주기

```
발행 (DRAFT → ACTIVE)  →  배포 (ACTIVE → LIVE)
                                 ↕
                           롤백 / 배포 해제
```

## 배포 액션

| 액션        | 설명                                                              |
| --------- | --------------------------------------------------------------- |
| **발행**    | DRAFT → ACTIVE. 버전이 잠겨 규칙 변경 불가.                                |
| **배포**    | ACTIVE → LIVE. 프로덕션 트래픽 수신.                                     |
| **롤백**    | 이전 배포 버전으로 되돌림. 새 배포 레코드 생성.                                    |
| **배포 해제** | 라이브 버전 제거. 새 배포 전까지 트래픽 처리 없음.                                  |
| **예약 배포** | 유효 시작일이 미래인 발행됨 버전을 등록하면 해당 시각에 자동으로 배포됩니다. 그룹당 대기 중 예약은 1건입니다. |

## 단계별 배포

### 1. 드라이런으로 검증

```bash theme={null}
lexq analytics dry-run --version-id <vid> --debug --mock \
  --json '{"facts": {"payment_amount": 150000, "customer_tier": "VIP"}}'
```

### 2. 발행

```bash theme={null}
lexq deploy publish --group-id <gid> --version-id <vid> --memo "검증 완료"
```

<Info>
  규칙이 참조하지만 스키마에 정의되지 않은 팩트가 있어도 발행은 차단되지 않습니다. 미등록 팩트가 있으면 발행은 진행되고 경고로 표시됩니다 — 먼저 확인하려면 해당 버전에 `lexq facts unregistered` 를 실행하세요.
</Info>

### 3. 프로덕션 배포

```bash theme={null}
lexq deploy live --group-id <gid> --version-id <vid> --memo "라이브 배포 — v3"
```

버전의 `effectiveFrom`이 아직 미래라면 즉시 배포는 거부됩니다(`P-037`). 대신 예약 배포(Scheduled Deployment)를 사용하세요. 유효 기간이 열리는 시각에 시스템이 자동으로 배포합니다:

```bash theme={null}
lexq deploy schedule --group-id <gid> --version-id <vid> --memo "4분기 가격 정책"
```

### 4. 모니터링

```bash theme={null}
lexq deploy overview
lexq history list --group-id <gid>
```

## 롤백

```bash theme={null}
lexq deploy rollback --group-id <gid> --memo "높은 오류율로 인한 롤백"
```

## 예약 배포

예약 배포(Scheduled Deployment)는 `effectiveFrom`이 미래인 발행됨 버전을 등록해 두는 기능입니다. 해당 시각이 되면 시스템이 스케줄러 주기(최대 60초) 안에 자동으로 배포하고, 수동 배포와 동일하게 배포 이력에 기록합니다. 배포자는 **System**, 메모는 예약 시 입력한 메모가 사용됩니다.

예약은 명시적 행위입니다. 미래 유효 시작일 버전을 발행하는 것만으로는 예약되지 않습니다. 콘솔 배포 다이얼로그, `lexq deploy schedule`, MCP 툴 `lexq_deploy_schedule`에서 생성합니다.

**무결성은 예약 시점에 봉인됩니다.** 예약 생성 시 규칙 스냅샷 해시를 저장하고 실행 시점에 다시 검증합니다. 버전이 변경되었거나 삭제되었거나 해시가 일치하지 않으면 배포하지 않고 `실패` 상태로 종결합니다. 검토하지 않은 내용이 배포되는 일을 차단하기 위한 설계입니다.

**그룹당 대기 중 예약은 1건입니다.** 기존 예약을 취소하기 전에는 새 예약이 거부됩니다.

**대기 중 예약은 다음 사건 발생 시 자동으로 취소됩니다:**

| 사건                 | 대기 중 예약                        |
| ------------------ | ------------------------------ |
| 수동 배포 / 롤백 / 배포 해제 | 취소됨                            |
| A/B 테스트 시작         | 취소됨                            |
| 그룹 보관              | 취소됨                            |
| 사용자 취소             | 취소됨 (`lexq deploy unschedule`) |

대기 중 예약이 참조하는 버전의 삭제는 거부됩니다(`P-043`). 예약을 먼저 취소해야 합니다.

모든 예약은 이력을 남깁니다. 누가 예약했고, 언제 실행되었으며, 취소나 실패라면 그 사유까지 조회할 수 있습니다:

```bash theme={null}
lexq deploy schedules --format table
```

## 배포 이력

```bash theme={null}
lexq deploy history --group-id <gid>
lexq deploy detail --deployment-id <deploymentId>
```

## 다음 단계

<CardGroup cols={2}>
  <Card title="드라이런" icon="flask-vial" href="/ko/guides/dry-run">
    개별 입력에 대한 배포 전 검증.
  </Card>

  <Card title="변경 영향 시뮬레이션" icon="chart-bar" href="/ko/guides/simulation">
    배포 전 과거 데이터에 대한 배치 검증.
  </Card>
</CardGroup>
