DOCS/ideas/250909_RAG_file_processing_architecture.md
happybell80 46c0db6321 docs: RAG 시스템 파일 처리 아키텍처 아이디어 추가
- 파일 저장 구조 설계 (HDD 활용, 해시 기반 중복 제거)
- 처리 파이프라인 (텍스트 추출 → 청킹 → 임베딩)
- 사용자 피드백 UI (실시간 진행 표시, 파일 카드)
- 데이터베이스 스키마 및 보안 고려사항

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-09 14:12:14 +09:00

4.0 KiB

RAG 시스템 파일 처리 아키텍처

작성일: 2025-09-09

작성자: Claude (51123 서버 관리자)

1. 개요

로빙의 RAG(Retrieval-Augmented Generation) 시스템을 위한 파일 업로드, 처리, 저장 아키텍처 설계. 사용자가 업로드한 문서를 로빙이 "기억"하고 대화에 활용할 수 있도록 하는 시스템.

2. 핵심 원칙

  • 로빙의 철학 반영: 파일을 단순 데이터가 아닌 "경험"으로 축적
  • 사용자별 격리: 각 사용자의 지식베이스를 완전히 분리
  • 투명한 피드백: 처리 과정을 실시간으로 사용자에게 전달

3. 파일 저장 아키텍처

3.1 디렉토리 구조

/mnt/hdd/uploads/
├── {user_id}/
│   ├── 2025-09/
│   │   ├── {sha256_hash}_original.pdf
│   │   ├── {sha256_hash}_extracted.txt
│   │   └── {sha256_hash}_metadata.json
│   └── 2025-10/

3.2 저장 전략

  • HDD 활용: 대용량 파일은 /mnt/hdd/uploads/에 저장 (SSD 용량 절약)
  • 해시 기반 중복 제거: SHA256으로 동일 파일 중복 저장 방지
  • 월별 분리: YYYY-MM 형식으로 월별 디렉토리 구성
  • 메타데이터 보존: 원본 파일명, 업로드 시간, MIME 타입 등 JSON 저장

4. 처리 파이프라인

4.1 단계별 프로세스

1. 파일 수신 (nginx → gateway)
2. 바이러스 검사 & 파일 타입 검증
3. 원본 저장 (/mnt/hdd/uploads/{user_id}/)
4. 텍스트 추출 (Apache Tika or python-docx/PyPDF2)
5. 청킹 (1000 토큰 단위, 200 토큰 오버랩)
6. 임베딩 생성 (skill-embedding 서비스)
7. ChromaDB 저장 (user_{user_id} 컬렉션)
8. PostgreSQL 메타데이터 저장

4.2 지원 파일 형식

  • 문서: PDF, DOCX, TXT, MD
  • 스프레드시트: XLSX, CSV
  • 프레젠테이션: PPTX
  • 이미지 내 텍스트: PNG, JPG (OCR 옵션)

5. 사용자 피드백 UI

5.1 웹 프론트엔드

// 진행 상태 표시
const stages = [
  { step: 1, label: "업로드중", progress: 25 },
  { step: 2, label: "분석중", progress: 50 },
  { step: 3, label: "임베딩중", progress: 75 },
  { step: 4, label: "완료", progress: 100 }
];

// WebSocket/SSE로 실시간 업데이트
socket.on('processing_update', (data) => {
  updateProgressBar(data.progress);
  showCurrentStage(data.stage);
});

5.2 파일 카드 UI 컴포넌트

  • 썸네일/아이콘 (파일 타입별)
  • 파일명, 크기, 업로드 시간
  • 처리 상태: "✓ 로빙이 학습완료"
  • 검색 가능 청크 수: "32개 섹션 분석됨"
  • 삭제/재처리 버튼

5.3 슬랙 인터페이스

사용자: [파일 업로드]
로빙: 📎 파일을 받았어요! 처리를 시작합니다...
      [스레드에서 진행 상황 업데이트]
      └─ 📄 텍스트 추출 완료
      └─ 🔍 32개 섹션으로 분석 중...
      └─ ✅ '사업계획서.pdf' 학습 완료!
         이제 이 문서에 대해 질문해주세요.

6. 데이터베이스 스키마

6.1 PostgreSQL (main_db)

CREATE TABLE user_documents (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID REFERENCES users(id),
  filename VARCHAR(255),
  file_hash VARCHAR(64),
  file_size BIGINT,
  mime_type VARCHAR(100),
  upload_path TEXT,
  chunk_count INTEGER,
  processing_status VARCHAR(50),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  processed_at TIMESTAMP
);

6.2 ChromaDB 컬렉션

  • 컬렉션명: user_{user_id}_documents
  • 메타데이터: document_id, chunk_index, source_file, page_number

7. 보안 고려사항

  • 파일 크기 제한: nginx client_max_body_size 1000M
  • 허용 확장자 화이트리스트
  • 바이러스 스캔 (ClamAV 연동 고려)
  • 경로 순회 공격 방지
  • 사용자별 용량 쿼터 관리

8. 향후 확장 방안

  • 버전 관리: 동일 파일의 업데이트 추적
  • 협업 기능: 팀 단위 문서 공유
  • 자동 요약: 업로드 시 문서 요약 생성
  • 검색 고도화: 의미 기반 + 키워드 하이브리드 검색