[{"data":1,"prerenderedAt":366},["ShallowReactive",2],{"post-document:\u002Fdeeplearning\u002Frag\u002F2026\u002F08\u002F18\u002FChunking\u002F":3},{"id":4,"title":5,"body":6,"categories":351,"date":354,"description":22,"extension":355,"image":356,"key_concepts":356,"last_modified_at":356,"legacyPath":357,"meta":358,"navigation":360,"part":356,"path":361,"published":360,"robots":356,"seo":362,"series":356,"stem":363,"strengths":356,"summary":356,"tags":364,"tradeoffs":356,"__hash__":365},"posts\u002Fposts\u002FDeep_Learning\u002FRAG\u002FChunking.md","Chunking?",{"type":7,"value":8,"toc":342},"minimark",[9,13,20,23,26,30,33,39,42,45,48,51,54,57,60,63,66,80,83,86,89,95,98,101,104,107,110,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,160,163,166,169,172,175,178,181,184,187,190,193,197,200,205,208,213,216,221,224,229,236,240,245,248,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,308,311,315,318,321,324,327,330,333,336,339],[10,11,5],"h1",{"id":12},"chunking",[14,15,16],"blockquote",{},[17,18,19],"p",{},"Chunking = 긴 문서를 \"검색 가능한 의미 단위\"로 잘라놓는 작업",[17,21,22],{},"RAG 강의듣다가 궁금한게 생겼다. RAG가 문서를 벡터로 변환된어 있는 잘린 데이터를 찾아서 데이터 검색을 한다는데, 그렇다면 도대체 어떻게 자르는 것일까..? 하고 궁금해졌다.",[17,24,25],{},"그래서 좀 공부해기로 했다.",[10,27,29],{"id":28},"chunking이란","Chunking이란?",[17,31,32],{},"일단 예시 문서를 좀 살펴보자",[17,34,35],{},[36,37,38],"span",{},"Spring Boot 문서",[17,40,41],{},"Spring Boot는 Java 기반 웹 애플리케이션 프레임워크이다.",[17,43,44],{},"Dependency Injection은 객체가 필요한 의존성을\nSpring Container가 외부에서 주입하는 방식이다.\n생성자 주입, Setter 주입 등이 있다.",[17,46,47],{},"JPA는 Java 객체와 관계형 데이터베이스를\n연결하기 위한 ORM 표준이다.\n@Entity를 사용해서 테이블과 객체를 매핑한다.",[17,49,50],{},"이걸 문서 전체 하나로 임베딩하지 않고 자르면 된다.",[17,52,53],{},"-> 왜? 임베딩 벡터 사이즈가 너무 커져서 그런건가?",[17,55,56],{},"Chunk 1\nSpring Boot는 Java 기반 웹 애플리케이션 프레임워크이다.",[17,58,59],{},"Chunk 2\nDependency Injection은 객체가 필요한 의존성을\nSpring Container가 외부에서 주입하는 방식이다.\n생성자 주입, Setter 주입 등이 있다.",[17,61,62],{},"Chunk 3\nJPA는 Java 객체와 관계형 데이터베이스를\n연결하기 위한 ORM 표준이다.\n@Entity를 사용해서 테이블과 객체를 매핑한다.",[17,64,65],{},"그리고 각각을 임베딩한다.",[17,67,68,69,72,73,76,77],{},"Chunk 1 → ",[36,70,71],{},"0.12, 0.82, 0.41, ...","\nChunk 2 → ",[36,74,75],{},"0.73, 0.11, 0.92, ...","\nChunk 3 → ",[36,78,79],{},"0.54, 0.77, 0.13, ...",[17,81,82],{},"다시 사용자로 돌아가보자",[17,84,85],{},"이제 뭐 사용자가 채팅으로",[17,87,88],{},"\"Spring에서 의존성 주입이 뭐야?\" 이라고 질문을 하면 질문도 임베딩한다.",[17,90,91,92],{},"질문\n↓\nEmbedding\n↓\n",[36,93,94],{},"0.71, 0.14, 0.89, ...",[17,96,97],{},"이렇게 변경한다. 그리고서는 Vector DB에서 가장 가까운 Chunk를 찾게 된다.",[17,99,100],{},"질문\n↓\nChunk 1    유사도 0.42\nChunk 2    유사도 0.91  ← 선택\nChunk 3    유사도 0.38",[17,102,103],{},"이런 방식으로 말이다.",[17,105,106],{},"이렇듯이 chunk를 기반으로 자르므로, 문서를 어떻게 잘라내는지가 성능에 큰 영향을 준다.",[17,108,109],{},"그러면 Chunk가 어떤 영향을 주는 지 좀 살펴보자!",[10,111,113],{"id":112},"_1-chunk가-너무-크면-어떻게-될까","1. Chunk가 너무 크면.. 어떻게 될까?",[17,115,116],{},"예를 들어 책 한 페이지 전체를 Chunk 하나로 만든다고 해보자.",[17,118,119],{},"Chunk",[17,121,122],{},"Spring Boot 설명\nDI 설명\nJPA 설명\nSecurity 설명\nDocker 설명\nRedis 설명\nKafka 설명\n...",[17,124,125],{},"사용자가\nDI가 뭐냐?",[17,127,128],{},"라고 질문하면 AI가 잘못 찾을 것이다.",[17,130,131],{},"왜나하면 Chunk에도 DI 말고도, 수많은 주제가 섞여있기 때문이다.\n아무튼 Chunk가 너무 큰 경우에는 Embedding이 나타내는 의미가 희석된다.",[17,133,134],{},"DI\nJPA\nSecurity\nDocker\nKafka\nRedis",[17,136,137],{},"를 전부 평균적으로 표현하는 벡터가 만들어지는 문제가 생긴다.",[17,139,140],{},"그래서",[17,142,143],{},"질문 : DI가 뭐냐..?",[17,145,146],{},"-> Embedding",[17,148,149],{},"DI만 있는 Chunk\n유사도 0.92",[17,151,152],{},"DI + Docker + Kafka + Redis + JPA\n유사도 0.65",[17,154,155],{},"처럼 될 수가 있다.",[10,157,159],{"id":158},"_2-반대로-chunk가-너무-작은-경우에는-어떻게-될까","2. 반대로 Chunk가 너무 작은 경우에는 어떻게 될까?",[17,161,162],{},"아까는 Chunk가 너무 컸으니까.... 너무 작게 잘라보자",[17,164,165],{},"이렇게 자른다고 하자",[17,167,168],{},"Chunk 1\nDependency Injection은",[17,170,171],{},"Chunk 2\n객체가 필요한 의존성을",[17,173,174],{},"Chunk 3\nSpring Container가",[17,176,177],{},"Chunk 4\n외부에서 주입하는 방식이다.",[17,179,180],{},"근데 이것도 문제가 있다...",[17,182,183],{},"사용자는 Dependency Injection이 뭐야?",[17,185,186],{},"라고 질문했는데..",[17,188,189],{},"검색 결과가 \"객체가 필요한 의존성을\" 하나만 나오면 의미가 없지 않겠는가?",[17,191,192],{},"그런 것이다.",[10,194,196],{"id":195},"그러면-어떻게-해야함","그러면 어떻게 해야함?",[17,198,199],{},"Chunk는 아래와 같이 설계되어야 한다.",[14,201,202],{},[17,203,204],{},"Chunk 하나만 읽어도 어느 정도 의미가 완성되어 있어야 한다.",[17,206,207],{},"이게 핵심",[209,210,212],"h2",{"id":211},"_3좋은-chunking의-핵심","3.좋은 Chunking의 핵심",[17,214,215],{},"내가 Chunking을 한 문장으로 정의하면",[14,217,218],{},[17,219,220],{},"검색될 만한 하나의 개념이 최대한 온전히 들어가도록 문서를 자르는 것",[17,222,223],{},"내가 AI 없이 봐도 이해가 되게 잘라야 한다.",[225,226,228],"h3",{"id":227},"나쁜-chunk","나쁜 Chunk",[230,231,232],"ul",{},[233,234,235],"li",{},"Java에서 클래스는 객체를 생성하기 위한",[225,237,239],{"id":238},"좋은-chunk","좋은 Chunk",[230,241,242],{},[233,243,244],{},"Java에서 클래스는 객체를 생성하기 위한 설계도이다.\n클래스에는 필드와 메서드를 정의할 수 있으며,\nnew 키워드를 통해 인스턴스를 생성할 수 있다.",[17,246,247],{},"검색되었을 때 자체로 의미가 있게 설계해야 한다.",[10,249,251],{"id":250},"_4실제-chunking은-어떻게-하냐","4.실제 Chunking은 어떻게 하냐?",[17,253,254],{},"가장 단순한 거",[17,256,257],{},"문서\n↓\n500 token\n↓\nChunk 1",[17,259,260],{},"다음 500 token\n↓\nChunk 2",[17,262,263],{},"다음 500 token\n↓\nChunk 3",[17,265,266],{},"Python으로 생각하면",[17,268,269],{},"chunks = split_text(\ndocument,\nchunk_size=500\n)",[17,271,272],{},"뭐 이런 느낌이다.",[17,274,275],{},"그런데 이러면 자르면 안되는 부분에서 잘려버리는 문제가 생긴다....",[17,277,278],{},"뭐 예시를 들어보자면",[17,280,281],{},"원문이 아래와 같고",[17,283,284],{},"Spring의 Dependency Injection은\n객체가 직접 의존성을 생성하지 않고,\nSpring Container가 객체를 생성하여\n주입하는 설계 방식",[17,286,287],{},"정확히 500 token에서 잘라버리면",[17,289,290],{},"Chunk 1\nSpring의 Dependency Injection은\n객체가 직접 의존성을 생성하지 않고\nSpring Container가",[17,292,293],{},"Chunk 2\n객체를 생성하여\n주입하는 설계 방식이다.",[17,295,296],{},"이런 식으로 되버려서 문맥이 끊기는 문제가 있다.",[17,298,299],{},"하지만 세상에는 문제를 해결하는 좋은 방법이 많은 법...",[14,301,302],{},[17,303,304],{},[305,306,307],"strong",{},"Overlap",[17,309,310],{},"이라는 좋은 방법으로 문제를 해결한다.",[10,312,314],{"id":313},"_5-chunk-overlap","5. Chunk Overlap",[17,316,317],{},"예를 들어",[17,319,320],{},"Chunk Size = 500\nOverlap = 100",[17,322,323],{},"이라고 하면",[17,325,326],{},"원본",[17,328,329],{},"1 2 3 4 5 6 7 8 9 10 을",[17,331,332],{},"Chunk 1",[17,334,335],{},"1 2 3 4 5",[17,337,338],{},"다음 Chuck",[17,340,341],{},"다음 Chunk에서는 뒤의 일부를 다시 포함",{"title":343,"searchDepth":344,"depth":344,"links":345},"",2,[346],{"id":211,"depth":344,"text":212,"children":347},[348,350],{"id":227,"depth":349,"text":228},3,{"id":238,"depth":349,"text":239},[352,353],"DeepLearning","RAG","2026-08-18 19:28:21 +0900","md",null,"\u002Fdeeplearning\u002Frag\u002F2026\u002F08\u002F18\u002FChunking\u002F",{"layout":359},"post",true,"\u002Fposts\u002Fdeep_learning\u002Frag\u002Fchunking",{"title":5,"description":22},"posts\u002FDeep_Learning\u002FRAG\u002FChunking",[],"NRlONmPZTe-9MswI5zOjCchd_ZBXwZQ8FxZkz5XyTt0",1788744789062]