# **6. PBS 프룬 & 가비지 컬렉션 (Prune & Garbage Collection)**
 
![VirtOn PBS 프룬 & 가비지 컬렉션 메인](../_static/images/pbs/pbs_prune_gc_main.png)
 
- 프룬 (Prune)
  - **정의:** 설정된 '보존 정책(Retention Policy)'에 따라 보관 기간이 만료되었거나 불필요해진 **백업 스냅샷(인덱스)의 연결을 끊고 목록에서 지우는 작업**입니다.
- 가비지 컬렉션 (Garbage Collection)
  - **정의:** 프룬 작업으로 인해 더 이상 어떤 백업 스냅샷에서도 참조하지 않는(이름표가 모두 떨어진) **실제 데이터 조각(Chunk)들을 디스크에서 찾아 물리적으로 삭제하는 작업**입니다.
 
## 6.1 작업 정리(Prune) 정책 기능
 
![VirtOn PBS 프룬 정책](../_static/images/pbs/pbs_prune_main.png)
 
- **목적**
  - PBS 백업 보존 정책(Retention Policy)을 등록/수정/삭제하고, 필요 시 즉시 실행하기 위한 기능입니다.
- **핵심 동작**
  - 정책 저장: PBS prune job 설정을 생성/갱신
  - 정책 목록 조회: 저장된 prune 정책 테이블 표시
  - 정책 선택: 선택한 정책을 폼에 로드(수정 모드)
  - 정책 삭제: 선택 정책 삭제
  - 수동 실행: 선택 정책 기준으로 prune 즉시 실행
  - 상태 확인: 최근 정리 시각/상태/다음 실행 등을 조회
 
---
 
### 6.1.1 입력 항목별 설명
 
- **PBS 서버**
  - 대상 PBS 연결 서버 선택
  - 서버 목록은 등록된 PBS 연결 설정 기반으로 로드
- **데이터스토어**
  - prune 대상 datastore
  - 선택 서버의 기본 datastore가 초기값으로 반영
- **네임스페이스**
  - prune 적용 범위 namespace 지정
  - 비우면 Root(- (Root)) 기준
- **최대 심도 (max-depth)**
  - namespace 하위 탐색 깊이
  - 0이면 현재 namespace 기준 동작
 
![VirtOn PBS 프룬 일정](../_static/images/pbs/pbs_prune_schedule.png)
 
- **일정 정리 (schedule)**
  - cron/preset 스케줄
  - 예: hourly, daily, 02:30, mon..fri \*:00
- **보존 개수(Keep 정책)**
  - 최근 보관 (keep-last)
  - 시간당 보관 (keep-hourly)
  - 일별 보관 (keep-daily)
  - 주간 보관 (keep-weekly)
  - 월간 보관 (keep-monthly)
  - 연간 보관 (keep-yearly)
  - 각 조건에 맞는 스냅샷을 남기고 나머지는 prune 대상이 됨
- **설명 (comment)**
  - 운영 메모/정책 설명 텍스트
- **활성화됨 (enabled)**
  - 체크 시 스케줄 활성
  - 해제 시 정책은 남고 실행은 비활성
- **작업 ID (id)**
  - 정책 고유 식별자
  - 비우면 자동 생성
  - 수정 모드에서는 고정(식별자 변경 방지)
 
---
 
### 5.1.2 모드 동작
 
- **생성 모드**
  - 새 정책 저장
  - 작업 ID 직접 입력 가능(또는 자동할당)
- **수정 모드**
  - 기존 정책 값 로드 후 변경사항 저장
  - 작업 ID는 읽기 전용
  - 수정 취소 시 생성 모드로 복귀
 
---
 
### 6.1.3 실행/운영 포인트
 
- **Prune 실행**
  - 논리적 정리(참조 제거) 중심
  - 디스크 용량 즉시 회수는 제한적일 수 있음
- **GC와 관계**
  - 실제 물리 용량 회수는 GC 단계에서 수행
  - 보통 Prune -> GC 순서 운영 권장
- **주의**
  - 정책값이 공격적으로 설정되면 복구 지점이 급감할 수 있으므로, 운영 기준(일/주/월/년)을 먼저 정하고 적용하는 것이 안전합니다.
 
## 6.2 가비지 컬렉션(Garbage Collection) 및 수동 실행 기능
 
![VirtOn PBS 가비지 컬렉션 수동 실행](../_static/images/pbs/pbs_prune_gc_execution.png)
 
- **목적**
  - GC 스케줄을 설정/저장하고, 필요 시 작업 정리(Prune) 또는 가비지 컬렉션(GC)를 즉시 수동 실행합니다.
- **핵심 동작**
  - GC 일정 저장: datastore 기준 GC 스케줄 등록/수정
  - 수동 실행:
    - 작업 정리 실행(Prune 즉시 실행)
    - 가비지 컬렉션 실행(GC 즉시 실행)
  - 실행 추적: UPID 기반 상태/진행률/결과를 실시간 표시(SSE)
 
---
 
### 6.2.1 입력/표시 항목별 설명
 
- **선택 서버**
  - 현재 대상 PBS 서버 표시(읽기용)
- **데이터스토어**
  - GC/수동 실행 대상 datastore 표시(읽기용)
 
![VirtOn PBS 가비지 컬렉션 수동 실행](../_static/images/pbs/pbs_gc_schedule.png)
 
- **GC 일정**
  - 프리셋(없음, hourly, daily, 02:30 등) 또는 직접 입력 선택
  - 직접 입력 선택 시 크론/프리셋 문자열 직접 입력
- **GC 일정 저장 버튼**
  - 현재 GC 일정 값을 PBS에 저장
  - 없음 선택 시 스케줄 제거(비활성)
 
---
 
### 6.2.2 수동 실행 버튼
 
- **작업 정리 실행**
  - 저장된 prune 정책(작업 ID 기준)으로 즉시 실행
  - 정책 선택/ID가 없으면 실행 차단
- **가비지 컬렉션 실행**
  - 현재 datastore 대상으로 GC 즉시 실행
  - 실행 후 GC 상태 섹션 재조회
 
---
 
![VirtOn PBS 프룬 수동 실행](../_static/images/pbs/pbs_prune_execution.png)
 
![VirtOn PBS 가비지 컬렉션 수동 실행](../_static/images/pbs/pbs_gc_execution.png)
 
### 6.2.3 실행 상태 카드(최근 작업)
 
- **최근 작업**
  - PRUNE 또는 GC
- **UPID**
  - PBS 작업 고유 식별자
  - 상태 조회/스트림 추적의 기준 값
- **상태**
  - idle, running, stopped 등
- **진행률**
  - 로그 파싱/SSE 기반 퍼센트 표시
- **결과**
  - OK 또는 실패 코드(exitstatus)
- **진행 바**
  - 0~100% 시각화
 
---
 
### 6.2.4 동작 흐름
 
1. 서버/데이터스토어 기준으로 대상 확정
2. 필요 시 GC 일정 저장
3. 수동 실행(PRUNE 또는 GC)
4. UPID 수신 후 SSE 스트림 구독
5. 진행률/상태/결과 갱신
6. 완료 시 토스트 + GC 상태 재동기화
 
---
 
### 6.2.5 운영 주의사항
 
- **Prune ≠ 즉시 용량 회수**
  - prune은 논리 정리, 실제 공간 회수는 GC 단계에서 반영 합니다.
- **24시간 미만 청크**
  - GC 반복 실행해도 즉시 회수되지 않을 수 있습니다.
- **부하 관리**
  - 백업/동기화 시간대와 GC 시간대 분리 권장 합니다.
  - I/O 경합이 큰 환경에서는 수동 GC 남발 지양합니다.
 
## 6.3 가비지 컬렉션 상태 및 저장된 작업 정리 정책 목록
 
![VirtOn PBS 가비지 컬렉션 상태 및 작업 정리 정책 목록 메인](../_static/images/pbs/pbs_prune_gc_list.png)
 
![VirtOn PBS 가비지 컬렉션 상태](../_static/images/pbs/pbs_gc_list.png)
 
### 6.3.1 가비지 컬렉션 상태 (GC Status)
 
- **목적**
  - 현재 데이터스토어의 GC 실행 결과와 다음 실행 예정 정보를 한눈에 확인합니다.
- **표시 항목**
  - 일정: GC 스케줄(cron/preset)
  - 최근 GC: 마지막 GC 실행 시각
  - 지속시간: 마지막 GC 작업 소요 시간
  - 최근 상태: 마지막 실행 결과(OK, ERROR 등)
  - 다음 실행: 다음 예약 실행 시각
  - 데이터 제거됨: 마지막 GC에서 실제로 회수된 용량
  - 보류 중인 데이터: 아직 회수되지 않은 후보 데이터 용량
- **동작 방식**
  - 서버/데이터스토어 선택값 기준으로 상태를 조회합니다.
  - GC 수동 실행 완료 후 상태 테이블이 최신 값으로 갱신됩니다.
- **운영 포인트**
  - 데이터 제거됨이 0이어도 비정상은 아닙니다(보존/유예 조건 영향).
  - 보류 중인 데이터가 지속 증가하면 스케줄/보존정책을 점검해야 합니다.
 
---
 
![VirtOn PBS 작업 정리 정책 목록](../_static/images/pbs/pbs_prune_list.png)
 
### 6.3.2 저장된 정책 목록 (Saved Prune Policy List)
 
- **목적**
  - 등록된 작업 정리 정책(Prune Job)들을 검색/필터/선택/수정/삭제하기 위한 관리 테이블입니다.
- **핵심 기능**
  - **검색**: 작업 ID/데이터스토어/네임스페이스 기준 빠른 검색
  - **필터**: 일정/상태 기준 목록 축소
  - **행 선택**: 선택된 정책을 폼에 로드해 수정 모드 진입
  - **선택 삭제**: 선택한 정책을 삭제(확인 다이얼로그 기반)
- **표시 컬럼**
  - 작업 ID, 데이터스토어, 네임스페이스, 최대 심도
  - 일정, 최근/시간당/일별/주간/월간/연간 보존
  - 최근 정리, 지속시간, 상태, 다음 실행, 코멘트
- **동작 방식**
  - 목록 데이터는 PBS 정책 조회 결과를 기준으로 렌더링됩니다.
  - 행 선택 시 폼은 **수정 모드**로 전환되고, 취소 시 **생성 모드**로 복귀합니다.
- **운영 포인트**
  - 정책 저장/수정/삭제 후 목록을 즉시 재조회해 화면-실제 상태를 일치시킵니다.
  - Root 네임스페이스는 UI에서 -(Root)로 표기해 식별성을 유지합니다.
 
---
 
### 6.3.3 권장 확인 순서 (실무 기준)
 
1. GC 상태에서 최근 상태와 최근 GC 정상 여부 확인
2. 저장 정책 목록에서 대상 정책의 일정/보존값 검토
3. 필요 시 정책 수정 후 수동 실행(Prune → GC)
4. 실행 후 데이터 제거됨, 보류 중인 데이터, 작업 이력 로그까지 확인
 