AI

Claude API RAG 실험: 한국어 문서에서 청크 사이즈 512 vs 1024 검색 정확도 비교

Claude API RAG 실험: 한국어 문서에서 청크 사이즈 512 vs 1024 검색 정확도 비교

RAG 파이프라인 세팅하다가 한 번쯤 멈추는 순간이 있어요. 청크 사이즈를 뭘로 할지. 기본값 512로 그냥 가야 할까, 아니면 1024로 올려야 할까. 이 숫자 하나가 검색 정확도를 얼마나 바꾸는지 직접 확인해봤어요.

핵심 요약

  • 한국어 문서에서는 영문 기준으로 설계된 512 토큰 청크가 불리하게 작동하는 경우가 많아요. 한국어 형태소 분리 방식 때문에 같은 의미 단위가 청크 경계에서 잘리는 일이 잦거든요.
  • Claude API 기반 RAG 실험에서 1024 토큰 청크는 복잡한 개념이 포함된 기술 문서에서 512 대비 Top-3 검색 정확도를 약 15-20%p 높이는 경향이 관찰됐어요.
  • 반대로 FAQ나 단문 정책 문서처럼 내용이 짧고 독립적인 경우엔 512가 더 나은 정밀도를 보여줬어요.
  • 청크 사이즈 선택은 “크면 클수록 좋다"가 아니라 문서 유형 × 쿼리 패턴의 조합으로 결정해야 해요.

2026년에 이 실험이 다시 의미 있는 이유

사실 RAG는 2023년부터 계속 쓰던 기술이에요. 그런데 지금 다시 청크 사이즈 논의가 활발해진 데는 이유가 있어요.

Claude 3.5 시리즈가 컨텍스트 윈도우를 200K 토큰으로 늘리면서, “어차피 짧게 잘라서 넣어야 한다"는 제약이 많이 사라졌어요. 그런데도 RAG 검색의 정확도 문제는 여전해요. 긴 컨텍스트를 다 집어넣는다고 모델이 정답을 잘 찾는 건 아니거든요. 검색 단계에서 얼마나 관련 있는 덩어리를 뽑아오느냐가 여전히 핵심이에요.

특히 한국어 문서는 조건이 더 까다로워요. 영어 기준으로 설계된 토크나이저에서 한국어 한 글자는 보통 2-3 토큰으로 분리돼요. Claude의 BPE 토크나이저 기준으로 “인공지능"이라는 4글자 단어가 3-5개 토큰으로 분리되는 경우도 있어요. 그러면 512 토큰짜리 청크에 담기는 한국어 글자 수는 170-250자 수준이에요. 문단 하나도 온전히 담기기 어렵죠.

kt cloud 기술 블로그(2025)에서도 지적했듯이, 청킹 전략의 핵심은 단순히 토큰 수가 아니라 의미 단위의 보존이에요. 청크 경계에서 문장이나 개념이 잘려버리면 벡터 유사도 검색 자체가 왜곡돼요. 쿼리와 의미적으로 연관된 텍스트가 두 청크에 걸쳐 있을 경우 어느 쪽도 높은 점수를 못 받는 상황이 생기거든요.


실험 설계: 어떻게 비교했나요?

이번 실험은 Claude API(claude-3-5-sonnet-20241022)와 Voyage AI의 voyage-3 임베딩 모델을 조합했어요. 검색 DB는 pgvector를 썼고요.

테스트 문서 유형은 세 가지였어요:

  1. 기술 API 문서 (긴 문단, 중첩 개념 포함)
  2. 내부 운영 정책 문서 (단락 구조 명확, 항목 중심)
  3. 법령 해설서 (복잡한 조건문, 긴 문장)

각 문서 유형에 대해 30개씩 쿼리를 만들었고, 정답 청크를 수동으로 레이블링했어요. 평가 지표는 Top-1 Precision, Top-3 Recall을 각각 측정했어요.

결과 #1: 기술 문서에서 1024가 우위

평가 항목청크 512청크 1024
Top-1 Precision61.3%72.4%
Top-3 Recall74.2%89.1%
평균 검색 지연 (ms)38ms47ms
청크 경계 절단 발생률31%14%

기술 문서에서 1024 청크의 Top-3 Recall이 약 15%p 높게 나왔어요. 들여다보니 “A 함수는 B 조건에서만 동작하며, 이때 C 파라미터를 반드시 지정해야 한다"는 식의 연쇄 조건 서술이 512에서는 두 청크에 걸쳐 잘리는 케이스가 많았어요. 1024 쪽은 이런 연결 고리를 하나의 청크 안에 담아냈고요.

결과 #2: 정책/FAQ 문서에서는 512가 더 깔끔

같은 실험을 운영 정책 문서에 적용하니 결과가 뒤집혔어요.

평가 항목청크 512청크 1024
Top-1 Precision78.9%69.3%
Top-3 Recall83.1%81.4%
노이즈 포함 비율9%24%

1024 청크에서 Top-1 정밀도가 오히려 9.6%p 낮아졌어요. 이유는 단순해요. 정책 문서는 항목마다 독립된 내용을 담고 있는데, 1024로 묶으면 서로 다른 규정이 하나의 청크에 들어가 버려요. 쿼리와 관련 없는 내용이 섞이면서 벡터 거리가 흐려지는 거죠.

결과 #3: 법령 해설서는 오버랩 설정이 더 중요

법령 문서는 청크 사이즈보다 오버랩 비율이 더 큰 영향을 줬어요. 청크 사이즈 1024 + 오버랩 10% 조합이 Top-3 Recall 기준으로 512 단독 대비 18%p 높게 나왔어요. 조건문이 문장을 넘어 이어지는 구조 때문에, 앞 청크의 뒷부분을 다음 청크가 조금씩 물고 가는 방식이 효과적이었어요.


512 vs 1024: 결국 어떤 기준으로 골라야 하나요?

청크 512 토큰:

  • 장점: 독립 항목 문서(FAQ, 약관, 정책)에서 정밀도 높음 / 검색 지연이 짧아 실시간 응답 서비스에 유리 / 노이즈 혼입 가능성이 낮아 Claude 답변 품질이 더 일관적
  • 단점: 한국어에서 의미 단위 절단 발생률이 1024 대비 두 배 이상 / 복잡한 기술 개념이 두 청크에 걸치면 검색 실패
  • 가장 잘 맞는 상황: 짧고 독립된 항목 중심 문서, 모바일 앱 내 챗봇

청크 1024 토큰:

  • 장점: 기술 문서, 논문, 해설서처럼 연속적 맥락이 필요한 문서에서 강함 / 한국어 의미 단위 보존율이 높아 임베딩 품질 향상 / 오버랩과 결합 시 법령·계약서 유형에서 특히 효과적
  • 단점: 다양한 주제가 섞인 문서에서 노이즈 비율 증가 / 임베딩 비용이 약 1.3-1.5배 높아짐
  • 가장 잘 맞는 상황: 개발자 문서, 기술 스펙, 내부 지식베이스

결국 “512가 답이다” “1024가 답이다"가 아니에요. 문서 구조를 먼저 파악하고, 그다음에 청크 사이즈를 정하는 순서가 맞아요.


실제 파이프라인에 적용할 때 체크리스트

가장 많이 하는 실수는 “문서가 다 같겠지"라고 생각하고 전체에 동일한 청크 사이즈를 적용하는 거예요.

시나리오 1 — 혼합 문서 DB를 운영 중이라면: 문서 유형별로 청크 사이즈를 달리 설정하고, 메타데이터에 doc_type 필드를 추가해서 검색 시 필터링에 쓰는 게 실용적이에요. 단일 사이즈로 통일하면 어느 쪽도 잘 안 맞는 중간값에 수렴하게 돼요.

시나리오 2 — 한국어 전용 서비스라면: 토크나이저 기준이 아닌 문자 수 기준으로 청크 사이즈를 먼저 계산해보세요. 512 토큰이 실제로 한국어 몇 글자인지 직접 확인하고, 그게 쿼리 평균 길이의 2-4배 범위 안에 있는지 체크하는 게 먼저예요.

시나리오 3 — Claude API 비용을 줄이고 싶다면: 검색 단계에서 정확도를 높이면 Claude에 전달하는 컨텍스트 길이를 줄일 수 있어요. Top-3 청크만 넘기더라도 관련성이 높아지면 답변 품질이 올라가고, 토큰 소모가 줄어요. 청크 사이즈 세팅이 사실상 비용 최적화 레버인 셈이에요.

지금 당장 확인할 것:

  • 내 문서 유형이 “연속 맥락형"인지 “독립 항목형"인지 분류
  • 현재 청크의 경계 절단 발생률을 샘플 50개 기준으로 수동 확인
  • 오버랩 비율이 0%라면 10-15% 추가 후 Recall 변화 측정

청크 사이즈보다 ‘왜 이 크기인지’가 더 중요해요

이번 실험에서 가장 명확하게 나온 메시지는 이거예요.

  • 기술·연속 맥락 문서: 1024 토큰 + 오버랩 10-15% 조합
  • FAQ·정책·약관 문서: 512 토큰 + 오버랩 없거나 최소화
  • 법령·계약서: 사이즈보다 오버랩 비율이 더 중요 (10-20%)
  • 한국어 전용 파이프라인: 토큰 수보다 의미 단위 절단율 먼저 측정

2026년 하반기엔 Anthropic이 claude-3-7 계열의 임베딩 연동 API를 공개할 가능성이 거론되고 있어요. 그렇게 되면 청크 사이즈 문제 일부는 모델 레벨에서 흡수될 수도 있어요. 그 전까지는, 지금 당장 내 문서 50개를 꺼내서 현재 청크가 어디서 잘리는지 눈으로 확인해보는 게 가장 빠른 개선 방법이에요.

숫자 하나가 검색 정확도를 15%p 이상 바꾸는 세계예요. 기본값을 그냥 두기엔 아까운 여지가 충분히 있어요.


이 실험에서 쓴 청크 분리 로직이나 평가 쿼리 샘플이 궁금하다면 댓글로 알려주세요. 후속 편에서 실제 코드와 함께 다뤄볼게요.

참고자료

  1. [Tech Series] kt cloud AI 검색 증강 생성(RAG) #3 : 청킹(Chunking) 전략과 최적화

Photo by Levart_Photographer on Unsplash