청킹은 단순히 텍스트를 자르는 과정이 아니라, 검색의 정밀도(Precision)와 문맥의 일관성(Coherence) 사이의 최적 균형을 찾아 LLM에 전달할 정보의 밀도를 결정하는 RAG 파이프라인의 핵심 공정이다.[1-3]
🧠 핵심 개념 (Core concepts)
토큰 제한 및 컨텍스트 창 관리: LLM과 임베딩 모델의 입력 제한을 준수하면서 필요한 정보를 효율적으로 주입하기 위한 수단이다.[4-6]
의미론적 무결성(Semantic Integrity): 텍스트를 분할할 때 문장이나 문단의 논리적 흐름이 끊기지 않도록 '완전한 생각' 단위를 유지하는 것이다.[6-8]
검색 정밀도와 재현율의 트레이드오프: 청크가 작으면 검색 정밀도는 높아지나 문맥이 부족해지고, 크면 문맥은 풍부하나 관련 없는 노이즈가 포함될 가능성이 커진다.[5, 9-11]
메타데이터 및 구조 인지: 원본 문서의 헤더, 섹션, 계층 구조를 반영하여 분할함으로써 검색 후에도 데이터의 출처와 관계를 유지한다.[12-14]
🧩 추출된 패턴 (Extracted patterns)
계층적 분할 패턴(Small2Big): 검색은 작은 청크(자식)로 수행하여 정밀도를 높이고, 생성 모델에는 더 큰 부모 단락을 전달하여 문맥을 보강하는 설계 패턴이다.[11, 15, 16]
재귀적 구분자 우선순위: 텍스트를 나눌 때 단락(\n\n), 줄바꿈(\n), 공백() 순으로 우선순위를 두어 논리적 단위를 최대한 보존하려는 휴리스틱이다.[17-19]
슬라이딩 윈도우 오버랩: 인접한 청크 간에 일정한 비율(보통 10~20%)의 중복 구간을 두어 경계면에서 정보가 단절되는 것을 방지한다.[18, 20, 21]
데이터 맞춤형 전략(Adaptive Selection): 코드, 표, 마크다운, 대화 로그 등 원본 데이터의 형식에 따라 전용 분할기를 선택하는 전략이다.[22-24]
📖 세부 내용 (Details)
청킹은 RAG 시스템의 성능을 결정하는 가장 중요한 전처리 단계로 간주된다.[2] 소스 데이터에 따르면 다음과 같은 주요 전략들이 활용된다.
고정 크기 분할(Fixed-size Chunking): 캐릭터나 토큰 수를 기준으로 기계적으로 분할하는 가장 단순한 방식이다.[20, 25] 구현이 빠르지만 의미적 경계를 무시하고 문장 중간을 자를 위험이 크다.[11, 26]
재귀적 문자 분할(Recursive Character Splitting): 다양한 구분자 세트를 사용하여 논리적으로 의미 있는 가장 큰 단위를 유지하려 시도하는 방식이다.[18, 27] 범용 RAG 인프라의 표준 알고리즘으로 권장된다.[19]
구조 인식형 분할(Structure-aware Splitting): 마크다운 헤더, HTML 태그, JSON 깊이 등을 인지하여 분할한다.[12, 28] 기술 문서나 API 가이드처럼 서식이 명확한 데이터에 적합하다.[28]
의미론적 청킹(Semantic Chunking): 임베딩 유사도를 기반으로 인접 문장 간의 의미 이격이 발생하는 지점을 찾아 분할한다.[28, 29] 주제가 수시로 바뀌는 복잡한 문서에 유리하나 계산 비용이 높다.[11, 30, 31]
문장 창 검색(Sentence-window Retrieval): 개별 문장 단위로 인덱싱하되, 검색 시에는 해당 문장의 앞뒤 맥락을 포함한 '윈도우'를 함께 추출하여 LLM에 전달한다.[28, 32]
최적화 가이드라인:
일반적인 텍스트: 200512 토큰 크기, 1020% 오버랩이 권장된다.[21, 33]
코드 및 기술 문서: 100200 토큰의 작은 크기와 1525%의 높은 오버랩이 유리하다.[21]
서사적 콘텐츠: 문맥 유지를 위해 500~1000 토큰의 큰 청크가 적합할 수 있다.[21]
⚖️ 모순 및 업데이트 (Contradictions & updates)
컨텍스트 창 확대와 청킹의 필요성: 최신 LLM(예: Llama 4 Scout)이 수백만 토큰의 컨텍스트 창을 지원함에 따라 청킹이 불필요해질 것이라는 견해가 있으나, 소스는 여전히 검색 효율성, 비용 관리, 그리고 '중간 소실(Lost in the Middle)' 현상 방지를 위해 청킹이 필수적이라고 강조한다.[34-36]
청크 크기 편향: 너무 짧은 청크는 키워드 매칭 성능은 좋으나 실제 정보 가치가 낮을 수 있으며, 임베딩 모델의 특성에 따라 짧은 텍스트가 비정상적으로 높은 유사도 점수를 받는 '임베딩 편향'이 발생할 수 있다.[37, 38]
🛠️ 적용 사례 (Applied in summary)
NVIDIA:/NVIDIA/GenerativeAIExamples 리포지토리에서 512 토큰 제한을 가진 e5-large-v2 모델에 맞추기 위한 텍스트 분할 파이프라인을 구축했다.[39, 40]
Jina AI: 문서 전체를 인코딩한 후 분할하는 'Late Chunking' 기법을 연구하여 문맥 보존 성능을 개선했다.[15]
Anthropic: 'Contextual Retrieval' 기법을 통해 청크 앞에 50~100 토큰의 요약 컨텍스트를 추가하여 검색 실패율을 67% 감소시켰다.[15]
Microsoft Research: GraphRAG 방법론에서 Leiden 알고리즘을 사용해 문서를 계층적 커뮤니티(청크 단위)로 탐지하고 요약하는 방식을 적용했다.[41]
MongoDB: 파이썬 문서 처리에 있어 100토큰 크기와 15토큰 오버랩을 가진 재귀적 분할기가 최적의 성능을 보인다는 실증적 데이터를 제시했다.[42]
✅ 검증 상태 및 신뢰도
상태: draft
검증 단계: conceptual (실제 적용 사례가 소스 전반에서 다수 확인됨)
출처 신뢰도: B (NVIDIA, IBM, Databricks 등 공식 기술 블로그 및 연구 보고서 기반)