
# CLI

```bash
vendor/bin/storh stats <root> [collection] [doc|log|queue]
vendor/bin/storh verify <root> [collection] [doc|log|queue]
vendor/bin/storh compact <root> [collection] [doc|log]
vendor/bin/storh reindex <root> [collection]
```

`<root>`은 엔진을 연 저장소 루트로, `StorageRoot::resolve()`이 반환하는 경로입니다. 기본 디렉터리에 네임스페이스를 더한 값입니다. `StorageRoot::resolve(__DIR__ . '/var/storh', 'app')` 아래에서 연 저장소는 `var/storh/app` 아래에 있습니다:

```bash
vendor/bin/storh stats var/storh/app pages doc
vendor/bin/storh verify var/storh/app events log
vendor/bin/storh compact var/storh/app events log
vendor/bin/storh reindex var/storh/app pages
```

기본 디렉터리만 전달하면(`var/storh`) 아직 존재하지 않는 컬렉션을 대상으로 명령이 실행되므로, 실패하는 대신 빈 컬렉션으로 보고합니다.

storh을 종속성으로 설치한 경우 `vendor/bin/storh`에는 storh 0.5.2 이상이 필요합니다. 이전 버전은 패키지 자체의 `vendor/` 디렉터리에서만 Composer 오토로더를 찾아 `require` 오류가 발생했습니다.

CLI은 안정적인 JSON을 출력하므로 cron 작업과 배포 상태 확인에 사용할 수 있습니다. 컬렉션의 기본값은 `default`입니다. 엔진은 `stats`, `verify` 및 `reindex`에 대해 `doc`가 기본값이며, `compact`에는 `log`이 기본값입니다.

## 명령어에서 사용하는 유지 관리 메서드

모든 엔진은 CLI에서 사용하는 유지 관리 메서드를 제공합니다:

```php
$store->stats();
$store->health();
$store->verify();
$store->repair();
```

DocStore 추가 항목:

```php
$docs->reindex();
$docs->compact(); // no-op report for API symmetry
```

SegmentedLog 추가 항목:

```php
$log->compact();
$log->recover();
$log->state_index();
```

DocStore의 경우 `verify()`은 레코드가 올바르게 파싱되는지, 동등성·범위·복합 인덱스가 전체 레코드 스캔 결과와 일치하는지 확인합니다. `repair()`은 손상된 레코드 파일을 `.storh/corrupt/` 아래로 격리하고 유효한 레코드에서 인덱스를 다시 빌드합니다.

SegmentedLog의 경우 `verify()`은 세그먼트 줄을 디코딩하고 현재 파생 상태 인덱스를 세그먼트 전체를 새로 재생한 결과와 비교합니다. `repair()`은 파생 상태를 다시 빌드하고 끝부분이 잘린 줄을 잘라냅니다.

Queue의 경우 `verify()`은 내구성이 보장된 모든 이벤트를 디코딩하고 대기, 처리 중, 완료, 페이로드 및 클레임 순서 상태를 `queue.log` 전체 재생 결과와 비교합니다. `repair()`는 로그에서 큐 상태를 다시 빌드하고 시간 초과된 처리 중 작업을 다시 큐에 넣습니다.
