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

# Lifecycle 의미

> Disable, revoke, release, uninstall, update의 차이를 public-port와 identity 관점에서 설명합니다.

# Lifecycle 의미

FRP Auto Deploy는 **서비스 게시 상태**, **management identity**, **public-port reservation**을 서로 다른 상태로 관리합니다.

```text theme={null}
disable   != release
revoke    != release
uninstall != release
update    != re-enrollment
```

## Service lifecycle

```mermaid theme={null}
stateDiagram-v2
    [*] --> Published
    Published --> Disabled: disable service
    Disabled --> Published: enable service
    Published --> Published: edit + apply
    Published --> Released: release service
    Disabled --> Released: release service
    Released --> [*]
```

| 동작           | 의미               | Public port     |
| ------------ | ---------------- | --------------- |
| Disable      | 게시 일시 중지         | **유지**          |
| Enable       | 게시 재개            | **같은 port 재사용** |
| Edit + apply | Target/config 변경 | **가능하면 유지**     |
| Release      | Reservation 삭제   | **pool 반환**     |

## Client lifecycle

```mermaid theme={null}
flowchart LR
    E[Enrolled Client] -->|revoke client| R[Management identity 차단]
    E -->|release client| X[Server record + service port reservation 반환]
    E -->|local uninstall| L[Client local software/state 삭제]
    L -. 자동으로 하지 않음 .-> X
```

* `revoke client`: management identity 차단
* `release client`: server record와 service reservation 반환
* local uninstall: client local state 삭제, server reservation 자동 반환 아님

## 어떤 명령을 선택해야 하나요?

```mermaid theme={null}
flowchart TD
    A[목적은?] --> B{Service를 잠시만 멈춤?}
    B -->|예| D[disable]
    B -->|아니오| C{Public port도 영구 반환?}
    C -->|예| R[release service]
    C -->|아니오| M{Client management identity 차단?}
    M -->|예| V[revoke client]
    M -->|아니오| X{Client 완전 decommission + 예약 반환?}
    X -->|예| RC[release client 후 필요 시 local uninstall]
```

## Stable v2.1.2 Enrollment credential

Active enrollment credential은 다음처럼 revoke할 수 있습니다.

```bash theme={null}
sudo frpctl revoke enrollment <ID>
```

<Note>
  2.1.3 development tree에는 terminal enrollment retention/purge 관련 명령이 추가됩니다. Stable v2.1.2의 기본 command로 가정하지 마세요.
</Note>

## Update

정상적인 supported project update는 re-enrollment가 아닙니다. CLIENT ID, CA, token, registry, public-port reservation을 유지하도록 설계되어 있습니다.

<Warning>
  잠시 중지하려는 것뿐인데 `release`를 실행하면 public-port reservation을 반환하게 됩니다. Intent를 먼저 확인하세요.
</Warning>
