생성형 AI 기반 RAG 개발자 과정
Session 21 · 문서 삭제 기능 (Delete)
생성형 AI 기반 RAG 개발자 과정

문서 삭제
기능 (Delete)

Session 21 / 33 — Day 3

파일 삭제 시 관련 chunk 전부 제거

박수현 · (사)한국정보공학기술사회 · 2026

LLM 이론 · LangChain · ChromaDB CRUD · Agent — 4일 핸즈온
생성형 AI 기반 RAG 개발자 과정·Session 21 · 문서 삭제 기능 (Delete)출처: Day 3문서 삭제(D)

이번 시간을 마치면

🗑️ 삭제 구현

  • source 기준 일괄 삭제
  • DELETE /files/<source>
  • where 필터로 대상 지정

♻️ 함께 처리할 항목

  • 원본 파일 동시 삭제
  • 재인덱싱이 필요한 경우
  • 멱등성(idempotent) 처리

🎯 목표: 파일 1개 삭제 시 관련 chunk 전부와 원본 파일까지 일괄 정리한다.

생성형 AI 기반 RAG 개발자 과정·Session 21 · 문서 삭제 기능 (Delete)출처: Day 3문서 삭제(D)

분산된 chunk의 일괄 삭제

flowchart LR REQ["DELETE /files/faq.pdf"] --> W["where source=faq.pdf"] W --> DB[("ChromaDB")] DB --> X["faq.pdf chunk 42개 삭제"] REQ --> FS["uploads/faq.pdf 삭제"] style W fill:#a29bfe22,stroke:#a29bfe style X fill:#ff767622,stroke:#ff7676 style FS fill:#fdcb6e22,stroke:#fdcb6e

💡 색인 시 부여한 source 메타데이터가 삭제 기준이다. 메타데이터가 없으면 삭제 자체가 불가능하다.

생성형 AI 기반 RAG 개발자 과정·Session 21 · 문서 삭제 기능 (Delete)출처: Day 3문서 삭제(D)

where 필터로 일괄 삭제 (스니펫)

def delete_document(source: str) -> bool:
    store._collection.delete(             # source 일치 chunk 전부
        where={"source": source}
    )
    # 원본 파일도 제거
    path = os.path.join("uploads", source)
    if os.path.exists(path):
        os.remove(path)
    return True
  • _collection.delete(where=...) — 조건에 맞는 chunk 일괄 삭제
  • 벡터(chroma_db) + 원본(uploads) 양쪽 정리 → 파일↔벡터 동기화
  • 한쪽만 삭제하면 고아 벡터(원본 없는 chunk) 또는 유령 파일 발생

📁 참고: vectorstore.pydelete_document

생성형 AI 기반 RAG 개발자 과정·Session 21 · 문서 삭제 기능 (Delete)출처: Day 3문서 삭제(D)

리소스 삭제 (스니펫)

@app.delete("/files/<path:source>")
def remove_file(source):
    ok = delete_document(source)
    if not ok:
        return jsonify({"error": "삭제 실패"}), 404
    return jsonify({"deleted": source})
  • <path:source> — 파일명에 /·.가 포함돼도 안전하게 수신
  • 성공 시 삭제된 source 반환, 대상이 없으면 404

🔑 REST 원칙대로 리소스 경로 + DELETE 메서드. 동일 API를 curl로도 호출 가능.

생성형 AI 기반 RAG 개발자 과정·Session 21 · 문서 삭제 기능 (Delete)출처: Day 3문서 삭제(D)

재인덱싱 판단 기준

단순 삭제로 충분

  • 문서 1개 제거는 where 삭제로 완료
  • 나머지 chunk는 그대로 유지

재인덱싱이 필요

  • 임베딩 모델 교체
  • chunk 전략 변경
  • → 전체 컬렉션 비우고 다시 색인
  • 문서 수정: where 삭제 → 다시 add (일관성 유지)

멱등성 (idempotent)

  • 동일 파일 재업로드 시 중복 색인 방지
  • 결정적 ID 또는 기존 source 삭제 후 추가
  • 동일 요청을 반복해도 결과 동일

🔑 삭제 후 재추가 패턴이 부분 수정의 기본 방식.

생성형 AI 기반 RAG 개발자 과정·Session 21 · 문서 삭제 기능 (Delete)출처: Day 3문서 삭제(D)

핵심 5가지

  1. ✅ 한 파일 = 여러 chunksource 로 일괄 삭제
  2. _collection.delete(where={"source": ...})
  3. ✅ 벡터 + 원본 파일 둘 다 정리
  4. DELETE /files/<source> — REST 리소스 삭제
  5. ✅ 모델·청크 변경 시 재인덱싱, 중복은 멱등 처리
1 / 7

목차 — Session 21

키보드 단축키 (뷰어)

네비게이션

다음 슬라이드 Space
이전 슬라이드 PgUp
처음 / 끝Home End
목차M

화면

전체화면F
테마 전환D
글자 크게 / 작게+ -
원래 크기 (100%)=
도움말 (열기/닫기)H ?
닫기 (모든 오버레이)Esc
강의 종료 (메인으로)Q

키보드 단축키 (강사)

네비게이션

다음 슬라이드 Space
이전 슬라이드 PgUp
처음 / 끝Home End
목차 (Menu)M
전체화면F

화면

테마 전환D
도움말 (열기/닫기)H ?
닫기 (모든 오버레이)Esc
툴바 펼치기 / 접기[ ]
강의 종료 (메인으로)Q

화면 확대

글자 크게 / 작게+ -
원래 크기 (100%)=
돋보기 (마우스 따라 2× 확대)V

발표자 도구 (PPT 호환)

화이트 화면W ,
블랙 화면B .
레이저 포인터L
펜 모드 ON/OFFP
펜 색상1 2 3 4
펜 자국 지우기 (현재 슬라이드)E
펜 — 마지막 스트로크 취소 (Undo)Z
펜 — 다시 (Redo)R
⏰ 쉬는시간 타이머T
📱 노트뷰 QR (휴대폰 동기화)N

PDF / 종료

PDF 저장 (슬라이드)Ctrl+P
강의 종료 (메인으로)Q X