작은 AI가 해결하는 C드라이브 저장 공간 부족 문제
컴퓨터 사용 중 가장 익숙한 스트레스 요인 중 하나는 바로 "C드라이브 용량 부족" 경고창이다. 수많은 파일과 폴더 속에서 무엇을 삭제해야 할지 막막할 때, 단순히 '일괄 삭제'보다 더 나은 방법이 있을까? 이 글에서는 전통적인 정리 방식을 넘어, 소규모 양자화 언어 모델(Qwen1.5-1.8B GPTQ)을 활용해 안전하고 투명한 방식으로 저장 공간을 관리하는 지능형 접근법을 소개한다.
기존 정리 도구의 한계와 새로운 패러다임
기존의 C드라이브 정리 방법은 크게 세 가지로 나뉜다: 수동 탐색, Windows 내장 도구, 제3자 클리너 앱. 하지만 이들 모두 본질적인 문제를 안고 있다.
- 수동 정리: 사용자가 직접 파일을 찾아 삭제하지만, 시스템 영역이나 프로그램 설정 파일을 잘못 건드리면 시스템 오류나 애플리케이션 충돌이 발생할 수 있다. 또한 각자의 설치 환경에 따라 안전한 경로가 달라지므로 보편적인 가이드라인은 쉽게 통하지 않는다.
- 시스템 내장 도구: 안정성은 높지만 주로 Windows 업데이트 잔여물이나 임시 파일만 처리하며, 사용자가 설치한 앱(예: 크롬, 포토샵, 위챗)이 생성한 캐시나 로그는 거의 무시된다.
- 제3자 소프트웨어: 강력한 자동 정리를 제공하지만, 그 판단 기준이 불투명하다. 어떤 파일이 '쓰레기'로 간주되는지, 왜 삭제 가능한지 설명하지 않으며, 일부는 광고 프로그램까지 함께 설치하는 경우도 있다.
결국 모든 전통적 접근은 "맥락 부족(Context-Agnostic)"하다. 반면, AI 기반 시스템은 상황을 이해하고 추론하는 능력을 갖춘다. 여기서 핵심 아이디어는 다음과 같다:
- 사용자 디스크 상태를 구조화된 데이터로 수집한다.
- 로컬에서 실행되는 경량 LLM이 해당 정보를 분석하여 위험도를 평가한다.
- 자연어 기반의 명확한 보고서를 출력해 사용자가 스스로 결정할 수 있도록 돕는다.
즉, AI는 자동 삭제 기계가 아니라, 저장 공간 컨설턴트 역할을 수행한다.
왜 Qwen1.5-1.8B GPTQ인가?
클라우드 기반 대형 모델(API) 대신 이 특정 모델을 선택한 이유는 다음과 같다.
- 경량화 및 로컬 실행 가능: GPTQ 양자화 기술을 적용하면 모델 크기가 약 1GB 미만으로 줄어 개인 PC에서도 GPU 없이 실행 가능하다. 데이터가 외부로 유출되지 않아 개인정보 보호 측면에서 안전하다.
- 적절한 추론 능력: 18억 파라미터 규모는 파일 경로 해석, 확장자 패턴 인식, 일반 소프트웨어의 캐시 위치 식별 같은 작업에 충분하다. 과도하게 큰 모델보다 효율적이다.
- 오픈소스 생태계 지원: Hugging Face 등에서 쉽게 다운로드 가능하며, Transformers 라이브러리와 호환되어 개발·통합이 용이하다.
핵심 설계: 시스템 역할 정의와 입력 구성
모델에게 올바른 판단을 하게 하려면 명확한 지침이 필요하다. 이를 위해 시스템 프롬프트(system prompt)를 아래와 같이 설계한다.
당신은 전문적인 디스크 최적화 어시스턴트입니다. 다음 규칙을 따르며 분석을 수행하세요:
1. **대상 확장자**: .tmp, .log, .cache, .msi, .crdownload 등을 우선 고려
2. **안전 금지 영역**:
- 경로에 'Windows', 'System32', 'Program Files' 포함 시 기본적으로 high-risk 처리
- 예외: 'Temp' 또는 'Logs' 하위 폴더 내 특정 파일은 별도 검토
3. **사용자 문서 보호**: Documents, Pictures, Desktop 내 파일은 삭제 권고 금지 (단, 다운로드 폴더는 예외)
4. **앱 특화 캐시 인식**: WeChat Files, Chrome Cache, Adobe Premiere Auto-Save 등은 별도 항목으로 식별
출력 형식은 반드시 아래 JSON 스키마를 따르세요:
{
"summary": "전체 분석 요약",
"items": [
{
"path": "/full/path/to/file",
"category": "temporary|cache|log|installer",
"size_mb": 102.5,
"risk": "low|medium|high",
"rationale": "삭제 가능한 이유 및 주의사항 설명"
}
],
"total_savings_mb": 1234.5,
"final_recommendation": "전체 조치 권고 사항"
}
자동화 파이프라인 구현
전체 시스템은 세 단계로 구성된다: 스캔 → 분석 → 보고서 생성.
1단계: 디렉터리 스캔 및 데이터 전처리
C드라이브를 전체 탐색하는 대신, 성능과 관련성을 고려해 필터링된 결과를 수집한다.
import os
from pathlib import Path
import json
def scan_candidate_files(root='C:\\Users'):
candidates = []
ignore_dirs = {'$Recycle.Bin', 'System Volume Information'}
for p in Path(root).rglob('*'):
if any(ignored in str(p) for ignored in ignore_dirs):
continue
try:
if p.is_file():
size_mb = p.stat().st_size / (1024**2)
if size_mb > 1: # 1MB 이상만 수집
candidates.append({
'path': str(p),
'ext': p.suffix.lower(),
'size': round(size_mb, 2),
'mtime': p.stat().st_mtime
})
elif p.name.lower() in ['temp', 'cache', 'logs']:
candidates.append({
'path': str(p),
'type': 'directory',
'note': f'Potential {p.name} folder'
})
except (PermissionError, OSError):
continue
# 크기 기준 내림차순 정렬
candidates.sort(key=lambda x: x.get('size', 0), reverse=True)
return {'files': candidates[:300]} # 상위 300개만 전달
2단계: 로컬 모델 기반 분석
양자화된 Qwen 모델을 로드하고, 앞서 수집한 데이터를 기반으로 추론을 수행한다.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
import re
import json
def analyze_with_local_model(scan_data_path, model_dir='./qwen-gptq'):
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_dir,
device_map="auto",
torch_dtype=torch.float16,
trust_remote_code=True
)
with open(scan_data_path, 'r') as f:
data = json.load(f)
file_text = "\n".join([
f"File: {f['path']}, Size: {f['size']}MB, Ext: {f['ext']}"
for f in data['files'] if 'size' in f
])
prompt = (
"[시스템] 당신은 디스크 최적화 전문가입니다...\n"
"[사용자] 다음 파일 목록을 기반으로 정리 제안을 JSON 형식으로 작성하세요:\n"
f"{file_text}"
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=800)
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
# 응답에서 JSON 추출
json_str = re.search(r'\{.*\}', result, re.DOTALL)
if json_str:
return json.loads(json_str.group())
else:
return {"raw_output": result}
3단계: 인간 친화형 보고서 생성
모델의 출력을 사용자가 쉽게 이해할 수 있는 형태로 변환한다.
def generate_report(advice_json):
lines = ["="*50, "C드라이브 정리 분석 보고서", "="*50, ""]
if 'summary' in advice_json:
lines += ["■ 분석 요약", advice_json['summary'], ""]
if 'items' in advice_json:
lines += ["■ 상세 제안 목록", "-"*40]
for item in advice_json['items']:
lines += [
f"• 경로: {item['path']}",
f" 크기: {item['size_mb']}MB | 위험도: {item['risk']}",
f" 이유: {item['rationale']}",
""
]
total_gb = advice_json.get('total_savings_mb', 0) / 1024
lines += [f"■ 예상 절약 용량: {total_gb:.2f} GB"]
with open("disk_analysis_report.txt", "w", encoding="utf-8") as f:
f.write("\n".join(lines))
return "\n".join(lines)
실제 적용 시 고려사항
이 시스템은 실험 초기 단계이며 몇 가지 제약이 있다.
- 정확도 의존성: 모델의 판단은 프롬프트 설계와 훈련 데이터에 크게 좌우된다. 드문 앱의 캐시는 잘못 인식할 수 있다.
- 입력 제한: 너무 많은 파일을 동시에 분석하면 토큰 한계에 걸릴 수 있으므로, 우선순위 기반 샘플링이 필요하다.
- 최종 결정권은 사용자에게: 특히 risk:high 항목은 절대 자동 삭제하지 말고 반드시 수동 확인해야 한다.
향후 개선 방향으로는 사용자 피드백을 학습하는 적응형 규칙 엔진, GUI 기반 실행 인터페이스, PowerShell 자동화 스크립트 생성 기능 등이 있다.
결론: AI는 도구가 아니라 협업자
이 프로젝트의 핵심 메시지는 "AI를 통해 사용자의 통제력을 강화한다"는 것이다. 대용량 모델을 굳이 쓸 필요 없이, 특정 과제에 맞춰 최적화된 소형 모델이 일상 문제 해결에 효과적으로 활용될 수 있음을 보여준다. C드라이브 정리는 단순한 예시일 뿐이며, 이 접근법은 로컬 데이터 기반 의사결정 보조 시스템 전반에 응용 가능하다.