본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 15. 15:29

당신의 RAG 시스템이 망가진 이유: 바로 청크(Chunks) 때문입니다

요약

RAG 시스템 실패의 주요 원인인 잘못된 청킹(Chunking) 전략을 분석합니다. 고정 크기 분할의 한계를 지적하며, 검색 성능을 높이기 위한 콘텐츠 인식 청킹의 중요성을 강조합니다.

핵심 포인트

  • RAG 실패의 80%는 LLM이 아닌 인제스션 및 청킹 레이어에서 발생함
  • 청크가 너무 크면 임베딩이 희석되고, 너무 작으면 컨텍스트가 부족해짐
  • 고정 크기 청킹보다 콘텐츠 인식 청킹이 훨씬 뛰어난 성능을 보임
  • 적절한 청크 경계 설정이 검색 시스템의 원자 단위로서 핵심 역할을 함

RAG 실패의 80%는 첫 번째 벡터가 저장되기도 전에 내려진 하나의 결정으로 거슬러 올라갑니다. 대부분의 팀은 이를 전혀 살펴보지 않습니다.

잘못된 해결 방법
당신의 RAG 시스템이 잘못된 답변을 내놓고 있습니다. 당신은 더 큰 LLM (Large Language Model)으로 교체합니다. 여전히 결과는 좋지 않습니다. 프롬프트 (Prompt)를 다시 작성합니다. 아주 미세하게 나아집니다. 임베딩 모델 (Embedding models)을 바꿉니다. 거의 변화가 없습니다.
그동안, 아무도 문서가 어떻게 청킹 (Chunking) 되었는지는 살펴보지 않았습니다.
이것은 2026년 프로덕션 RAG 시스템에서 가장 흔한 실패 패턴이며, 개발 단계에서는 거의 눈에 보이지 않습니다. 시스템은 답변을 생성합니다. 테스트 시에는 답변이 합리적으로 보입니다. 그러다 사용자들이 실제 질문을 던지면 무언가 조용하고 지속적으로 잘못됩니다.
RAG 실패의 80%는 LLM이 아니라 인제스션 (Ingestion) 및 청킹 (Chunking) 레이어에서 비롯됩니다. 대부분의 팀은 프롬프트를 튜닝하고 모델을 교체하며 몇 주를 보낸 후에야, 검색 (Retrieval) 과정에서 세 번 중 한 번꼴로 조용히 잘못된 컨텍스트 (Context)를 반환하고 있다는 사실을 깨닫게 됩니다.

청킹이란 무엇이며 왜 그렇게 중요한가
RAG 시스템을 구축할 때, 전체 문서 라이브러리를 한꺼번에 벡터 데이터베이스 (Vector database)에 넣을 수는 없습니다. 문서를 청크 (Chunks) — 개별적으로 임베딩되어 저장되는 더 작은 조각들 — 로 나눕니다. 쿼리 (Query)가 들어오면, 시스템은 가장 관련 있는 문서가 아니라 가장 관련 있는 청크를 검색합니다.
이는 청크가 당신의 검색 시스템의 원자 단위 (Atomic unit)임을 의미합니다. 모든 것은 적절한 쿼리에 대해 적절한 청크가 나타나는지에 달려 있습니다.
만약 청크가 너무 크면, 여러 주제를 포함하게 되어 임베딩 (Embedding)이 희석됩니다. 즉, 벡터가 단일한 일관된 아이디어가 아닌 개념들의 혼합을 나타내게 됩니다. 무엇도 깔끔하게 일치하지 않기 때문에 검색 성능이 저하됩니다.
만약 청크가 너무 작으면, 의미를 부여하는 주변 컨텍스트 (Context)가 부족해집니다. 청크는 올바르게 나타나지만, 중요한 컨텍스트가 검색되지 않은 인접한 청크에 있었기 때문에 LLM은 그로부터 유용한 답변을 생성할 수 없습니다.

만약 청크가 잘못된 경계에서 잘린다면 — 예를 들어 표를 중간에 나누거나, 문장 중간에서 문단을 끊거나, 질문과 답변을 분리한다면 — 검색된 콘텐츠는 기술적으로는 존재하지만 실질적으로는 쓸모가 없게 됩니다.

현재까지 진행된 청킹 전략(chunking strategies)에 대한 가장 큰 규모의 통제된 비교 연구에서는 36가지 방법, 6개 도메인, 5개 임베딩 모델(embedding models), 그리고 총 1,080개의 구성을 테스트했습니다 (Shaukat et al., arXiv:2603.06976, 2026년 3월). 이 연구는 콘텐츠 인식 청킹(content-aware chunking)이 단순한 고정 길이 분할(naive fixed-length splitting)보다 훨씬 뛰어난 성능을 보이며, 그 격차가 결코 미미하지 않음을 확인했습니다.

기본 설정은 잘못되었습니다
대부분의 팀은 고정 크기 청킹(fixed-size chunking)으로 시작합니다. 토큰 수(예: 512 토큰)를 정하면, 모든 문서는 오버랩(overlap) 여부와 상관없이 정확히 그 크기로 조각납니다. 이는 구현하기 쉽고 대부분의 프레임워크에서 기본값으로 설정되어 있지만, 결과적으로는 일관되게 평범한 수준의 검색 성능만을 만들어냅니다.

Weaviate의 2025년 9월 가이드는 이 격차를 수치로 보여줍니다. 잘못된 청킹 접근 방식은 동일한 코퍼스(corpus)와 동일한 리트리버(retriever)를 사용할 때, 최선의 방법과 최악의 방법 사이에서 재현율(recall) 차이를 최대 9%까지 벌릴 수 있습니다.

9%의 재현율 차이는 작게 들릴 수 있습니다. 하지만 하루에 10,000개의 쿼리(query)에 답변하는 시스템에서 9%의 재현율 격차는, LLM이 마땅히 알고 있어야 할 정보를 놓치는 쿼리가 하루에 900개나 발생함을 의미합니다. 이 중 일부는 눈에 띄게 틀린 답변을 생성할 것입니다. 대부분은 미묘하게 불완전한 답변을 생성할 것입니다. 즉, 대충 훑어볼 때는 통과할 만큼 충분히 비슷해 보이지만, 누군가 그 답변을 바탕으로 행동할 때는 문제가 될 정도로 틀린 답변 말입니다.

2026년 1월 arXiv에 발표된 체계적 분석은 기존의 통념을 뒤집는 결과를 내놓았습니다. 컨텍스트(context)를 보존하기 위해 인접한 청크 사이에 10%에서 20%의 오버랩을 추가하는 거의 보편적인 기본 방식인 '청크 오버랩(chunk overlap)'은 검색 품질 측면에서 측정 가능한 이점을 제공하지 않는다는 것입니다. 팀들은 지금까지의 가장 엄격한 분석 결과에 따르면 도움이 되지 않는 기술을 위해 청킹 파이프라인에 복잡성과 저장 비용을 추가하고 있는 셈입니다.

실제로 작동하는 계층 구조 (The Hierarchy That Actually Works)

2026년 현재 가장 강력한 근거를 가진 청킹 (Chunking) 접근 방식은 계층적 청킹 (Hierarchical Chunking)이며, 때로는 부모-자식 청킹 (Parent-child chunking)이라고도 불립니다.

그 개념은 간단합니다. 문서는 두 가지 수준으로 인덱싱 (Indexing)됩니다. 큰 부모 청크 (Parent chunks) — 즉, 전체 섹션이나 전체 단락 — 는 문맥 (Context)을 포착합니다. 작은 자식 청크 (Child chunks) 는 구체적인 주장, 사실 또는 데이터 포인트를 포착합니다. 쿼리 (Query)가 들어오면, 시스템은 (더 정밀하게 일치하는) 작은 자식 청크를 기반으로 검색을 수행하지만, (LLM이 유용하게 답변하는 데 필요한 문맥을 제공하는) 주변의 부모 청크를 반환합니다.

대학 발표 자료를 대상으로 한 NVIDIA의 내부 테스트 결과에 따르면, 계층적 청킹은 고정 크기 청크 (Fixed-size chunks)를 사용할 때의 61%였던 답변 정확도를 89%까지 향상시켰습니다. 이는 동일한 모델, 동일한 임베딩 (Embedding), 동일한 벡터 데이터베이스 (Vector database)를 사용했음에도 불구하고, 오직 청킹 결정만으로 28%포인트의 개선을 이뤄낸 것입니다.

28%포인트의 정확도 향상은 팀들이 청킹 레이어 (Chunking layer)에서 기대하는 수준이 아닙니다. 그것은 그들이 마침내 제대로 들여다보았을 때 발견하게 되는 결과입니다.

리랭킹 (Re-Ranking): 아무도 사용하지 않는 두 번째 해결책

훌륭한 청킹 (Chunking)을 수행하더라도, 근사 최근접 이웃 (Approximate Nearest-Neighbor, ANN) 검색은 노이즈를 유발합니다. 검색 (Retrieval) 단계는 속도에 최적화되어 있기 때문에, 실제 쿼리 (Query)와 관련이 없는 의미론적으로 인접한 청크들을 포함하게 됩니다. 이는 벡터 유사도 검색 (Vector similarity search)의 특성입니다. 즉, 확정적으로 정답인 것을 찾는 것이 아니라 개념적으로 가까운 것을 찾는 것입니다.

리랭킹 (Re-ranking)이 이 문제를 해결합니다. 크로스 인코더 (Cross-encoder) 리랭커는 검색된 청크들을 가져와 실제 쿼리에 대해 더 세밀하게 다시 점수를 매깁니다. 이는 검색 (Retrieval)과 생성 (Generation) 사이에서 품질 필터 역할을 합니다.

여러 운영 환경 평가에 따르면, 크로스 인코더 리랭킹은 리랭킹을 사용하지 않는 검색과 비교했을 때 정밀도 (Precision)를 18%에서 42%까지 높여줍니다. 리랭커는 50~200ms의 지연 시간 (Latency)과 연산 비용을 추가하지만, 더 적고 더 관련성 높은 청크를 전달함으로써 LLM 토큰 소비를 줄여줍니다. 대규모 운영 시에는 LLM 비용 절감액이 리랭커 비용보다 큰 경우가 많습니다.

2024년과 2025년 초에 배포된 대부분의 RAG 시스템에는 리랭킹 단계가 없습니다. 리랭킹은 핵심 구성 요소라기보다는 선택적인 최적화 사항으로 간주되었습니다. 하지만 2026년까지 리랭킹은 프로덕션급 RAG 파이프라인에서 선택 사항이 아닌 필수 사항으로 자리 잡았습니다. 리랭킹 없이 시스템을 운영하는 팀은 상당한 정확도를 포기하고 있는 셈입니다.

조용한 쇠퇴 문제 (The Silent Decay Problem)

청킹 (Chunking) 문제에는 거의 논의되지 않는 또 다른 차원이 있습니다. 바로 RAG 시스템은 아무런 변경 없이도 시간이 지남에 따라 성능이 저하된다는 점입니다.

출시 당시 90점을 기록했던 v1 RAG 시스템은 코드 한 줄 바꾸지 않고도 1년 뒤에는 쉽게 60점으로 떨어질 수 있습니다. 세상은 변하지만, 시스템은 변하지 않기 때문입니다.

임베딩 모델 (Embedding models)은 계속 발전합니다. 출시 시점에 선택한 모델은 12개월 후에는 아마도 최선의 선택지가 아닐 가능성이 높습니다. 임베딩 모델을 업그레이드하려면 모든 것을 다시 청킹 (Re-chunking)하고 다시 인덱싱 (Re-indexing)해야 합니다. 대부분의 팀이 이를 계획은 하지만, 실제로 일정에 맞춰 실행에 옮기는 팀은 거의 없습니다.

소스 문서 (Source documents)도 변합니다. 만약 여러분의 지식 베이스 (Knowledge base)가 업데이트되는 문서들 — 정책 문서, 제품 문서, 규제 신고서 등 — 를 기반으로 구축되어 있는데, 인덱스 (Index)가 동일한 주기로 갱신되지 않는다면, 여러분은 오래된 컨텍스트 (Stale context)를 바탕으로 질문에 답하게 됩니다. 시스템은 작동하는 것처럼 보이지만, 사실은 구식 정보를 바탕으로 작동하고 있는 것입니다.

평가 커버리지 (Evaluation coverage)가 표류합니다. 평가 세트 (Evaluation set)를 설계할 때 고려했던 질문들이 출시 6개월 후 실제 사용자들이 던지는 질문과 반드시 일치하는 것은 아닙니다. 원래의 테스트 질문에 최적화되었지만 진화된 사용자 의도 (User intent)를 놓치는 시스템은, 내부 벤치마크 (Internal benchmarks)에서는 좋은 수치를 보여주지만 실제 운영 환경 (Production)에서는 나쁜 결과를 나타낼 것입니다.

훌륭한 검색 인프라가 가능하게 하는 것

청킹 (Chunking) 결정, 재순위화 (Re-ranking) 레이어, 인덱스 갱신 주기 (Index refresh cadence) — 이 모든 것들이 중요하지만, 이들은 모두 동일한 토대 위에 놓여 있습니다. 바로 귀하의 시스템이 실제로 도달하는 규모에서 정확하고 효율적으로 검색을 수행하는 벡터 데이터베이스 (Vector database)입니다.

재현율 (Recall)이 낮은 데이터베이스에서 수행하는 훌륭한 청킹은 여전히 결과를 놓칩니다. 최고의 재순위화 레이어도 애초에 올바른 정보를 포함하지 않은 검색된 청크 (Retrieved chunks)로부터는 결과를 회복할 수 없습니다. 아키텍처 레이어들은 서로 의존하며, 검색 인프라는 다른 모든 것들이 그 위에 놓이는 레이어입니다.

이것이 바로 검색 데이터베이스가 단순한 범용 제품 (Commodity) 선택 사항이 아닌 이유입니다. 높은 재현율은 있으면 좋은 기능 (Nice-to-have)이 아닙니다. 그것은 파이프라인의 다른 모든 요소가 설계된 대로 작동하게 만드는 기본 요구 사항 (Baseline requirement)입니다.

이 부분을 제대로 수행하는 팀은 시간이 지남에 따라 개선되는 시스템을 구축합니다. 더 나은 청킹, 더 나은 재순위화, 더 나은 평가를 통해 모두 측정 가능한 수준으로 더 나은 답변을 생성합니다. 반면, 이를 잘못 수행하는 팀은 실제 문제가 청킹 설정 (Chunking configuration)에 조용히 자리 잡고 있는 동안, 모델을 계속 교체하고 프롬프트 (Prompt)를 다시 작성하는 데 머물러 있습니다.

Endee는 독립적으로 벤치마크된 데이터베이스 중 가장 높은 재현율을 제공하는 오픈 소스 벡터 데이터베이스 (Apache 2.0)입니다. 이는 귀하의 RAG 파이프라인의 다른 모든 요소가 올바르게 작동하도록 만드는 검색 토대입니다. endee.io에서 무료로 시작하세요.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0