개요 — 무엇을 하나
백업 보관소(Vaults) 는 백업 결과물이 실제로 쌓이는 저장 대상(storage target) 을 관리하는 화면입니다. 로컬 경로·원격 rsync/SSH·S3·NFS 같은 "어디에 저장하나"를 이름 붙은 보관소로 등록해 두면, 여러 백업 작업이 이 보관소를 공유해서 쓸 수 있습니다.
각 보관소 카드는 무엇이 얼마나 저장되어 있는지(연결된 백업 계획 수 · 저장량 · 용량 · 사용률)와 오프사이트 여부(3-2-1 규칙)를 보여 주고, 카드에서 바로 추가·편집·삭제(CRUD)할 수 있습니다.
- 데이터 테이블:
infr_backup_target(마이그레이션000402). 신규 테이블·신규 쓰기 라우트를 만들지 않고, 쓰기는 백업 스케줄 보드의target-save/target-delete엔드포인트를 재사용합니다. - 이 화면은 구 Backup Scripts 페이지의
[저장소]탭을 사이드바 메뉴(/backup/vaults)로 분리한 것입니다. - 비밀번호·키는 인라인으로 저장하지 않습니다 — 자격 참조(
cred_ref)만env:PREFIX또는 vault 참조로 둡니다.
이 화면의 "도메인" 계열 용어는 웹 TLD 를 뜻하지 않습니다. 여기서 다루는 것은 순수하게 저장 대상(보관소) 이며, 백업 파일이 놓이는 물리/원격 위치입니다.
언제 쓰나
- 백업을 어디에 저장할지 먼저 정의하고 싶을 때 — 스크립트 빌더에서 작업을 만들기 전에 보관소를 등록해 두면 작업이 이 보관소를 골라 쓸 수 있습니다.
- 3-2-1 규칙(사본 3벌 · 매체 2종 · 오프사이트 1벌)을 점검하고 싶을 때 — 오프사이트 보관소가 몇 개인지, 무엇이 원격지에 사본을 두고 있는지 KPI 로 확인합니다.
- 보관소별 저장량 증가·용량 포화를 감시하고 싶을 때 — 저장량 대비 용량(사용률)을 카드에서 봅니다.
- 원격 보관소의 자격 참조·경로·거주 인스턴스 메타를 정리해 둘 때.
화면 구성
히어로 + KPI 스트립
상단 KPI 6종은 전체 보관소를 집계합니다.
| KPI | 의미 | 계산 |
|---|---|---|
| 보관소 | 등록된 보관소 총 개수 | count(vaults) |
| 호스트 | 보관소가 거주하는 고유 원격 호스트 수 | host 값이 빈 문자열(=로컬)인 것은 제외한 distinct count |
| 오프사이트 | 오프사이트로 표시된 보관소 수 | offsite = true 개수 |
| 계획 | 이 보관소들을 대상으로 하는 백업 작업(계획) 합계 | Σ job_count |
| 저장량 | 저장된 용량 합계 | Σ stored_bytes |
| 용량 | 등록된 용량 합계 | Σ capacity_bytes (미입력 보관소가 있으면 —) |
보관소 카드 그리드
보관소마다 카드 하나. 카드 구성:
- 헤더: 유형 아이콘 + 이름 + (오프사이트면) 지구본 배지 + 유형 배지(로컬/rsync/SSH/S3/NFS/기타). 카드 테두리 색은 상태(
active/full/offline/retired)에 따라 톤이 바뀝니다. - 위치:
host:path형태의 원격 경로 또는 URI(예:s3://YOUR_BUCKET/backups). 로컬이면 경로만 표시. - 통계 3칸:
- 계획 — 이 보관소를 쓰는 백업 작업 수(
job_count) - 저장량 —
stored_bytes(사람이 읽는 단위로 표기) - 용량 —
capacity_bytes. 미입력이면?로 표시되고, 쓰기 권한이 있으면 이 칸을 클릭해 바로 편집 모달을 엽니다(툴팁: "용량 미입력 — 클릭해 편집").
- 계획 — 이 보관소를 쓰는 백업 작업 수(
- 푸터(쓰기 권한 시): 편집(연필) · 삭제(휴지통) 버튼.
보관소 편집 모달
[보관소 추가] 또는 카드 편집을 누르면 작은 모달이 뜹니다.
| 필드 | 설명 |
|---|---|
| 이름 | 보관소 표시 이름(비우면 "보관소") |
| 유형(kind) | local · rsync · ssh · s3 · nfs · other |
| 상태(status) | active · full · offline · retired |
| 호스트(원격) | rsync/ssh/s3 엔드포인트 호스트 |
| 경로/URI | 베이스 경로 또는 s3://bucket/prefix |
| 거주 인스턴스 | infr_instance 참조(보관소가 사는 호스트) |
| 스토리지 자산 | infr_storage 참조(자산 스토리지 & 파일) |
| 용량 | 숫자 + 단위(KB/MB/GB/TB) — 저장 시 바이트로 환산 |
| 자격 참조(cred_ref) | env:PREFIX 또는 vault 참조. 예: env:BK_S3 — 비밀 인라인 금지 |
| 오프사이트 보관 | 3-2-1의 "1벌은 오프사이트" 체크박스 |
| 메모 | 자유 메모 |
사용법
보관소 등록
- 우상단
[보관소 추가]클릭. - 이름·유형을 정하고, 원격이면 호스트/경로(URI) 를 입력합니다.
- 용량을 숫자+단위로 입력하면 카드에서 사용률(저장량 ÷ 용량)을 볼 수 있습니다.
- 자격이 필요하면
cred_ref에 참조만 둡니다(예:env:BK_S3). 실제 키·비밀번호는 절대 여기 넣지 않습니다. - 원격지(다른 건물·리전·클라우드)에 있으면 오프사이트 보관을 체크합니다.
[저장]— 저장 후 목록이 갱신되고,stored_bytes는 다음 live 조회에서 다시 계산됩니다.
3-2-1 규칙 점검
3-2-1 규칙 — 데이터 사본을 3벌 만들어, 서로 다른 저장 매체 2종에 두고, 그중 1벌은 물리적으로 떨어진 장소(오프사이트)에 보관합니다. 화재·도난·랜섬웨어로 원본이 망가져도 멀리 있는 사본으로 복구할 수 있습니다.
- KPI 의 오프사이트 숫자로 최소 1개의 원격지 사본이 있는지 확인하세요.
- 오프사이트 보관소는 카드 헤더의 지구본 배지로 식별됩니다.
- 한 종류 매체에만 저장하고 있다면(예: 전부 로컬) 매체 다양성(2종)이 부족하다는 신호입니다.
오프사이트 연쇄 백업(SSH 키)
오프사이트 사본을 자동으로 이어서 만드는 설정은 스크립트 빌더에 있습니다. 동작 개념:
- 1차 백업(예:
mysqldump산출물)이 끝나면, - 방금 만든 파일을 오프사이트 보관소로 한 번 더 복사합니다(3-2-1의 "1벌은 오프사이트").
- 원격 복사는 SSH 키로 인증합니다(비밀번호를 스크립트에 넣지 않음).
- 오프사이트 복사가 실패해도 1차 백업은 그대로 보존됩니다.
빌더에서 "오프사이트 연쇄 백업"을 켜려면 미리 이 화면에서 오프사이트 보관소를 하나 이상 등록해 두어야 합니다(없으면 빌더가 "등록된 오프사이트 보관소가 없습니다" 안내를 표시).
보관소 삭제
- 카드 푸터의 휴지통 버튼으로 삭제합니다.
- 사용 중이면 삭제가 거부됩니다(HTTP 409). "이 보관소를 N개 작업이 사용 중입니다 — 먼저 재지정하세요" 메시지가 뜹니다. 해당 작업들의 보관소를 다른 것으로 바꾼 뒤 다시 삭제하세요.
데이터 소스
infr_backup_target— 보관소 정의(마이그레이션000402). 주요 컬럼:
id, key(slug·선택), name, kind(local|rsync|ssh|s3|nfs|other),
host, path, instance_id(→infr_instance), storage_id(→infr_storage),
capacity_bytes, cred_ref(env:PREFIX/vault), offsite(bool),
status(active|full|offline|retired), tags(json), note, seq, created_by, timestamps
- 카드에 표시되는 값은
BackupBoardService::board()가 조립합니다.job_count= 이 보관소를target_id로 가리키는 백업 작업 수.stored_bytes= 그 작업들의 가장 최근 성공 실행 산출물 크기 합(각 작업의 마지막 done 실행bytes를 더한 값).
stored_bytes는 디스크의 실제 사용량이 아니라 각 작업의 "마지막 성공 백업 파일 크기"의 합입니다. 세대 보존(여러 개 유지)을 하는 보관소라면 실제 점유 용량은 이보다 클 수 있습니다. 정확한 실디스크 사용량·RAID 상태는 인프라 ▸ 스토리지 & RAID와 자산 ▸ 스토리지 & 파일에서 확인하세요.
- 갱신: 화면은 30초 폴링(
/backup/vaults/live)으로 저장량·KPI 를 다시 계산합니다. 모달이 열려 있거나 탭이 백그라운드면 폴링을 건너뜁니다.
권한
/backup/*전체가infr.level:2미들웨어로 보호됩니다 — 읽기·쓰기 모두 level ≥ 2(스탭 이상) 가 필요합니다. 데모(level 1) 는 백업 영역에 접근할 수 없습니다.- 쓰기(보관소 저장/삭제)는 컨트롤러에서 다시
user_level ≥ 2를 확인합니다(can_write). 권한이 없으면403("권한이 없습니다(level ≥ 2 필요)"). - 모든 저장·삭제는 감사 로그에 남습니다:
backup.target.save/backup.target.delete→infr_audit_log(관리 ▸ 감사 로그). 자세한 등급 체계는 RBAC 레벨을 참고하세요.
문제해결 · FAQ
Q. 카드에 아무 보관소도 안 보여요.
아직 등록된 보관소가 없습니다. [보관소 추가] 로 첫 보관소를 만드세요. 백업 작업을 이미 만들었다면 스크립트 빌더에서 작업에 보관소를 지정할 때도 여기 등록된 보관소가 후보로 뜹니다.
Q. 저장량이 0 이거나 실제와 달라요.
stored_bytes 는 이 보관소를 쓰는 작업들의 마지막 성공 실행 바이트 합입니다. 아직 성공한 실행이 없으면 0, 세대 보존을 한다면 실제보다 작게 보일 수 있습니다. 실행 이력은 백업 실행 이력에서 확인하세요.
Q. 용량 칸에 ? 가 떠요.
용량을 아직 입력하지 않은 것입니다. 쓰기 권한이 있으면 그 칸을 클릭하면 바로 편집 모달이 열립니다. 용량을 넣어야 사용률(포화도) 판단이 됩니다.
Q. 삭제가 안 되고 "사용 중" 이라고 나와요. 그 보관소를 대상으로 하는 백업 작업이 남아 있습니다(409). 해당 작업의 보관소를 다른 것으로 바꾼 뒤 다시 삭제하세요.
Q. cred_ref 에 실제 비밀번호를 넣어도 되나요?
아니요. cred_ref 는 참조만 담습니다(env:PREFIX 또는 vault 참조). 실제 자격은 백업 서버의 --defaults-extra-file(0600) 이나 SSH 키로만 두세요. 스크립트·DB 에 비밀을 인라인하지 않는 것이 InfraGuard 의 규칙입니다.
Q. 오프사이트 보관소가 빌더에 안 뜹니다.
빌더의 "오프사이트 연쇄 백업"은 offsite = true 로 표시된 보관소만 후보로 사용합니다. 이 화면에서 원격지 보관소를 등록하고 오프사이트 체크박스를 켠 뒤 다시 시도하세요.
관련 항목
- 백업 스케줄 보드 — 무엇을·언제·어디에(배치 지도)와 3-2-1 확인
- 스크립트 빌더 — 작업 정의·오프사이트 연쇄 백업(SSH 키) 설정
- 백업 스크립트 — 등록 스크립트 그리드
- 복구 & 검증 — 복구지점 인출·무결성 검증
- 자산 ▸ 스토리지 & 파일 — 스토리지 자산 대장·파일 영역 트리
- 관리 ▸ 감사 로그 — 보관소 저장/삭제 감사 추적
