문서를 쪼개는 기술 - '청킹(Chunking)'
1. 문서 나누기의 중요성 RAG(Retrieval Augmented Generation, 검색 증강 생성)에서 문서를 ‘어떻게 나누느냐’는 질문, 단순한 것 같지만 AI 시스템의 성패를 좌우하는 핵심입니다 RAG 시스템의 핵심 구조는 다음 네 단계로 요약할 수 있습니다. 첫째, 사용자가 자연어로 질문을 입력합니다. 둘째, 질문과 관련된 정보를 벡터 데이터베이스에서 검색합니다. 셋째, 질문과 검색 결과를 언어 모델에게 함께 전달합니다. 넷째, 언어 모델이 이를 바탕으로 답변을 생성합니다. 이때 2단계에서 이루어지는 문서 검색의 정밀도를 좌우하는 요소가 바로 ‘문서 청킹’입니다. 문서를 너무 작게 쪼개면 문맥이 끊겨 오답이 발생하고, 반대로 너무 크게 쪼개면 언어 모델이 토큰 한계를 넘기 때문에 정보를 잘라내게 됩니다. 결국 중요한 건 “어디서, 어떻게 자를 것인가”의 문제입니다. 2. ETL 구조에서 본 청킹의 위치, ‘T’ – 트랜스폼 데이터 처리 과정에서 흔히 쓰이는 ETL(Extract, Transform, Load) 구조에서 청킹은 ‘T’, 즉 트랜스폼 단계에 해당합니다. AI가 문서를 이해할 수 있도록 정제하고 변환하는 과정이 바로 청킹입니다. 3. 가장 기본적인 캐릭터 기반 청킹 – CharacterTextSplitter 문자를 일정 단위로 잘라내는 가장 단순한 방식이 바로 캐릭터 기반 청킹입니다. 예를 들어 문자 500개 단위로 자르고, 앞뒤 청크가 200자씩 겹치도록(overlap) 설정하면 맥락이 어느 정도 유지됩니다. 하지만 줄바꿈(\n)을 기준으로 자르도록 설정했을 경우, 줄바꿈 없이 이어지는 문장은 너무 길어져 청크 크기를 지키지 못하는 상황도 생깁니다. 단순하지만 한계가 분명한 방법입니다. 4. 실무에서 가장 많이 쓰이는 리커시브 청킹 – RecursiveCharacterTextSplitter 리커시브 방식은 여러 개의 구분자(줄바꿈, 마침표, 쉼표 등)를 순차적으로 적용해 문서를 최대...