마루옵스서버 · 네트워크 · AI 기술 노트

소개문의

[Local LLM 구축하기 30] 문서 Q&A 도구 백업·복원과 운영 기록

서버 저장 장치 교체를 위해 준비한 디스크

참고 사진 · 서버 저장 장치 교체를 위해 준비한 디스크 · 사진: Andy Melton / 원본 / CC BY-SA 2.0 · 목록용 크기 조정

Local LLM 구축하기 · 30/30 · 심화와 운영

전체 연재와 학습 순서 · 실습 코드 ZIP

연재에서 준비한 검색과 답변 스크립트를 계속 쓰려면 자료를 고치고 백업에서 복원하는 방법도 필요합니다. 새 폴더에서 다시 시작할 수 있는지 확인해 볼게요. 여기서는 문서 Q&A 도구의 시작과 갱신, 백업·복원 순서를 정리합니다.

16~18편의 파일과 29편의 보안 점검을 기준으로 진행합니다. 가상 문서로 복원을 시험한 뒤 실제 자료의 보관 방식을 정합니다.

계속 사용할 기본 구성

기본 구성은 Windows Ollama와 Python 검색·답변 스크립트입니다. 임베딩에는 embeddinggemma:300m, 생성에는 qwen3:4b-instruct를 사용합니다. Open WebUI·Hermes·OpenClaw는 필요한 작업에 맞춰 선택하세요. 모두 상주시키면 메모리와 관리할 항목이 늘어납니다.

ollama --version
ollama list
.\.venv\Scripts\python.exe .\semantic_search.py --build
.\.venv\Scripts\python.exe .\rag_answer.py

새 폴더에 ZIP을 풀었다면 8편처럼 .venv를 만들고 2·16편의 모델을 받습니다. ZIP의 docs는 가상 자료입니다. 실제 문서는 별도 개인 폴더에 두고 접근 권한과 저장 위치를 확인합니다.

원문과 인덱스 갱신

  • 현재 런타임 버전, 모델 ID, 프롬프트와 평가표를 저장합니다.
  • 새 버전을 적용하고 같은 고정 질문을 실행합니다.
  • 검색 누락·숫자 오류·거절 행동·속도를 비교합니다.
  • 합격 기준을 벗어나면 기록해 둔 이전 구성으로 돌아갑니다.

원문이나 임베딩 모델, 청크 조건이 바뀌면 –build로 인덱스를 다시 만듭니다. 작은 예제는 전체 재생성이 단순해요. 문서가 많아지면 파일 해시와 수정·삭제 추적을 추가해 변경된 부분만 갱신하는 방법을 검토할 수 있습니다.

설정 백업과 빈 폴더 복원

ZIP의 runbook.txt를 작업 폴더에 두고 아래 명령을 실행합니다. 지정한 파일만 묶으므로 .venv, 모델 가중치, API 키는 포함하지 않습니다. docs의 원문이 민감하다면 만들어진 백업도 같은 수준으로 보호합니다.

$project = (Get-Location).Path
$backupRoot = Join-Path $env:USERPROFILE "llm-lab-backups"
New-Item -ItemType Directory -Force $backupRoot | Out-Null
$names = @("docs", "llm_http.py", "semantic_search.py", "rag_answer.py", "evaluation-template.csv", "runbook.txt")
$files = $names | ForEach-Object { Join-Path $project $_ }
$missing = $files | Where-Object { -not (Test-Path -LiteralPath $_) }
if ($missing) { throw "Required backup files missing: $($missing -join ', ')" }
$stamp = Get-Date -Format "yyyyMMdd-HHmmss"
$archive = Join-Path $backupRoot "llm-lab-$stamp.zip"
Compress-Archive -LiteralPath $files -DestinationPath $archive
Get-FileHash -LiteralPath $archive -Algorithm SHA256

같은 SSD 안에 복사한 ZIP은 그 SSD의 고장에 대비한 백업이 되지 못합니다. 보호된 외장 저장소나 별도 위치에 사본을 둡니다. 빈 폴더에서 가상환경 재생성, 모델 준비, 인덱스 생성, 고정 질문 확인까지 이어 가야 도구를 복원했는지 확인할 수 있습니다.

장비·전력·API 비용

로컬 모델에도 장비와 전력, 저장 공간, 관리 시간의 비용이 있습니다. 전력은 벽면 전력계의 증가분과 실제 사용 시간으로 계산합니다. TDP나 GPU 정격을 시스템 전체의 실측값으로 대신하지 않습니다.

# 계산 방법을 보여 주는 가정: 추가 소비전력 100W, 하루 3시간, 30일
$extraWatts = 100
$hoursPerDay = 3
$days = 30
$kWh = ($extraWatts / 1000) * $hoursPerDay * $days
$kWh

예제의 9kWh는 위 가정을 계산한 값입니다. 특정 장비를 측정한 결과가 아닙니다. 실제 전기 요금은 지역·계약·사용량 조건으로 계산하고, 외부 API는 사용 토큰과 단가, 부가 비용으로 비교합니다.

운영 기록과 다음 개선

답할 수 있는 질문과 답하면 안 되는 질문, 원문 갱신 방법, 복구 순서를 한 장에 적어 두세요. 모델을 교체한 뒤에도 그 기록과 평가 질문으로 확인하면 설정이 바뀐 부분을 찾기 편합니다.

여기까지는 개인용 학습 예제입니다. 팀 서비스에는 사용자 인증과 문서 권한, 동시 요청·예산 제한을 추가해야 합니다. 다음 개선을 정할 때는 현재 실패하는 질문부터 모아 보세요. 그 결과를 보고 청크 조정, 키워드·벡터 혼합 검색, reranker나 평가 자동화를 검토할 수 있습니다.

참고 자료

문서·모델 태그 확인 기준: 2026년 10월 18일. 기본 실습 환경: Windows 11 x64.


댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

닉네임·이메일·댓글 내용·IP 주소·브라우저 정보는 댓글 게시 및 관리에 사용됩니다. 이메일과 접속 정보는 공개 댓글에 표시하지 않습니다. 개인정보 요청은 운영자 이메일로 보내 주세요. 개인정보처리방침