welclaiAI·TREND·DIGEST
튜토리얼

검색을 위한 문서 청킹 잘하기

검색은 청크만큼만 좋습니다. 올바른 구절이 온전하게, 맥락을 갖춘 채 돌아오도록 문서를 나누는 법을 소개합니다.

tutorials2026-04-29 19:38 KST·편집장·7

검색 시스템이 실패할 때, 원인은 모델이나 검색 알고리즘이 아니라 청크인 경우가 많습니다. 청크는 색인하고 검색하는 단위, 즉 쿼리와 매칭되어 맥락으로 모델에 건네지는 문서의 한 조각입니다. 청크가 잘못 잘려 있으면, 완벽한 검색이라도 쓰기엔 너무 작거나, 관련성을 갖기엔 너무 크거나, 답의 한가운데를 관통해 쪼개진 조각을 돌려줍니다. 청킹을 제대로 하는 일은 화려하지 않지만, 그 아래 모든 것이 얼마나 잘 작동하는지를 결정합니다.

왜 청크 크기가 이후 모든 것을 좌우하는가

보통 쿼리마다 문서 전체를 모델에 넣어줄 수는 없습니다. 낭비이고, 관련 구절을 무관한 텍스트 더미 속에 파묻으면 답이 좋아지기는커녕 나빠집니다. 그래서 문서를 청크로 나누고, 각각을 임베딩하고, 쿼리에 매칭되는 청크만 검색합니다. 따라서 청크는 검색의 단위이자 맥락의 단위입니다. 그 크기와 경계가 모델이 무엇을 보게 될지를 결정합니다.

이 이중 역할이 긴장을 만듭니다. 정확한 검색 매칭이 될 만큼 작은 청크는, 모델이 답하기에 충분한 맥락을 담기엔 너무 작을 수 있습니다. 자기완결적일 만큼 큰 청크는, 여러 주제를 섞어 신호를 희석하므로 특정 쿼리에 깔끔하게 매칭되기엔 너무 넓을 수 있습니다. 좋은 청킹은 이 긴장을 푸는 기술, 즉 정확히 검색될 만큼 구체적이면서 답할 수 있을 만큼 완전한 청크를 만드는 일입니다.

문서의 구조를 존중하라

가장 나쁜 청킹은 내용과 상관없이 N글자마다 자르는 것입니다. 그러면 경계가 문장 중간, 표 중간, 생각 중간에 떨어지는 것이 보장됩니다. 답을 두 청크에 걸쳐 쪼개, 어느 쪽도 온전히 담지 못하게 만드는 것입니다. 더 나은 기본값은 문서 자체의 구조를 따라 자르는 것입니다. 문단, 섹션, 제목, 목록 항목 말입니다. 이 경계들은 저자가 이미 관련된 생각을 묶어놓았기에 존재하며, 그것을 존중하는 청크는 의미의 일관된 단위가 되는 경향이 있습니다.

문서마다 자연스러운 이음매가 다릅니다. 산문은 문단과 섹션에서 깔끔하게 끊깁니다. 코드는 함수나 논리 블록에서 끊깁니다. FAQ는 각 질문-답변 쌍에서 끊깁니다. 표와 목록은 온전히 유지되기를 원합니다. 반쪽짜리 표는 대개 쓸모없기 때문입니다. 원리는 모두 같습니다. 문서가 관절이 어디 있는지 알려주게 하고, 임의의 위치가 아니라 관절에서 자르세요. 구조를 인식한 청크가 일관된 청크입니다.

청크 크기를 고정 수치가 아니라 질문에 맞춰라

보편적으로 올바른 청크 크기란 없습니다. 적절한 크기는 당신이 예상하는 질문의 종류에 달려 있기 때문입니다. 사용자가 좁은 사실 수준의 질문을 한다면, 작은 청크가 더 정확하게 검색됩니다. 매칭되는 구절이 주변 자료에 희석되지 않기 때문입니다. 사용자가 섹션 전체를 종합해야 하는 넓은 질문을 한다면, 청크는 그 폭을 담을 만큼 커야 합니다. 그러지 않으면 모델은 단편만 받고 요점을 놓칩니다.

실용적인 수는, 완전한 답이 무엇을 필요로 하는지 생각하고 그것을 담을 만큼 청크 크기를 잡는 것입니다. 청크는 이상적으로, 단독으로 읽어도 말이 되는 만큼의 주변 맥락을 담아야 합니다. 다른 청크에 있는 바로 앞 문장에 전적으로 기대는 구절은 검색도 잘 안 되고 답은 더 나쁩니다. 당신이 실제로 받는 질문에 대해 의미의 자족적 단위가 되는 청크를 목표로 하고, 둥근 숫자를 골라 잘되길 바라는 대신 그것이 크기를 이끌게 하세요.

답을 반토막 내지 않도록 겹침을 사용하라

구조를 인식한 경계라도, 답이 경계를 가로지르는 경우가 있습니다. 질문의 맥락은 한 청크의 끝에, 그 결론은 다음 청크의 시작에 있는 식이죠. 겹침(overlap)이 표준 해법입니다. 연속된 청크가 가장자리에서 약간의 텍스트를 공유하게 해, 경계 근처의 구절이 적어도 한 청크에는 온전히 나타나도록 하는 것입니다. 작은 겹침은 답을 한가운데서 쪼개는 일에 대한 값싼 보험입니다.

과하게는 하지 마세요. 무거운 겹침은 색인을 부풀리고, 같은 쿼리에 거의 중복된 청크를 돌려주며, 반복으로 맥락 예산을 낭비합니다. 목표는 경계를 가로지르는 답을 온전히 유지할 딱 그만큼의 공유 텍스트입니다. 큰 중복 구간이 아니라, 다음 청크로 넘어가는 적당한 꼬리 말입니다. 청크 크기와 마찬가지로, 적절한 양은 당신의 콘텐츠에 달려 있습니다. 원리는 답이 반토막 나는 것을 막는 가장 작은 겹침을 쓰는 것입니다.

청크가 말이 되게 할 맥락을 함께 담아라

문서에서 뜯겨 나온 청크는, 문서가 암묵적으로 제공하던 정보를 잃습니다. 어느 섹션에서 왔는지, 문서가 무엇에 관한 것인지, 세 문단 위의 "그것"이 무엇을 가리키는지 같은 것 말입니다. 그 청크가 단독으로 검색되면, 모델은 텍스트는 보지만 틀은 보지 못하고, 답이 나빠집니다. 각 청크에 그 틀을 조금 함께 실어주면, 즉 문서 제목, 섹션 제목, 청크가 무엇에 관한지에 대한 짧은 메모를 붙이면, 절단이 버린 맥락이 복원됩니다.

이것은 검색 정확도와 모호한 구절에서 가장 중요합니다. "한도가 이전 값의 두 배로 상향된다"고 적힌 청크는 어떤 한도이고 어떤 이전 값인지 모르면 거의 쓸모없습니다. 섹션 제목을 함께 실은 청크는 모델과 검색 색인에 의지할 무언가를 줍니다. 해법은 작습니다. 각 청크에 헤더 한 줄이나 맥락 한 문장을 붙이는 것 말입니다. 그리고 그것은 무엇이 검색되는지와 모델이 그것으로 무엇을 하는지를 일관되게 개선합니다.

실제 쿼리로 청킹을 평가하라

청크를 들여다본다고 청킹이 좋은지 알 수는 없습니다. 실제 쿼리를 돌려, 올바른 구절이 온전하고 쓸 만하게 돌아오는지 확인해야만 알 수 있습니다. 올바른 출처 구절을 당신이 아는 대표 질문 세트를 모아 검색을 돌리고, 무엇이 돌아오는지 살펴보세요. 관련 청크가 떠올랐는가? 온전했는가, 아니면 쪼개졌는가? 무관한 청크가 그것을 밀어냈는가?

청킹을 한 번 내리는 결정이 아니라 그 세트에 맞춰 조정하는 매개변수로 다루세요. 경계 전략, 목표 크기, 겹침을 바꾼 다음 같은 쿼리를 돌려, 어느 설정이 올바르고 완전한 구절을 더 자주 검색하는지 비교하세요. 당신의 말뭉치에 최적인 청킹 전략은 실증적 질문이며, 답은 문서 유형과 쿼리 스타일에 따라 다릅니다. 검색이 잘 작동하는 팀은 측정한 팀이지, 청크 크기를 어림짐작하고 넘어간 팀이 아닙니다.

정리

검색은 청크에 살고 죽습니다. 임의의 위치가 아니라 문서 자체의 구조를 따라 자르고, 실제로 받는 질문에 대해 완전한 답을 담을 만큼 청크 크기를 잡으며, 경계 근처의 답이 온전히 유지되도록 적당한 겹침을 쓰세요. 제목과 헤딩 같은 약간의 맥락을 각 청크와 함께 실어, 단독으로도 말이 되게 하세요. 그런 다음 답을 아는 실제 쿼리로 전체를 입증하고, 경계와 크기와 겹침을 실증적으로 조정하세요. 좋은 청킹은 작동할 때는 보이지 않고, 작동하지 않을 때는 근본 원인입니다. 여기에 노력을 쏟으면 나머지 파이프라인이 한결 수월해집니다.

#chunking#retrieval#rag#search