inflearn logo
강의

Course

Instructor

Spring AI in Practice: Implementing Chatbots, RAG, and MCP in Spring Services

[Practice] Implementing RAG ETL Pipeline - Transform

무한루프 발생 조건에서 설정 오류 라는 게 어떤 케이스일까요?

Resolved

12

jyee

1 asked

1

안녕하세요

이번 수업에서 질문이 있어서 문의 드려요!

 

LengthTextSplitter 구현 시 텍스트를 끝까지 반복해서 자르는 반복문에서
남은 텍스트가 너무 짧거나 설정 오류로 인해 다음 시작점이 제자리에 머물거나 뒤로 밀리면 무한 루프에 빠질 수 있으므로 break 조건을 걸어주셨는데,

// 남은 텍스트가 너무 짧거나 설정 오류로 인해 다음 시작점이 제자리에서 머물거나 뒤로 밀리면 무한 루프에 빠짐
if (nextStart <= chunkStart) {
  break;
}

여기서 설정 오류라는 건 어떤 경우를 생각해볼 수 있을까요?

초기에 생성자로 생성 시에 chunkSize보다 chunkOverlap를 더 크게 설정해주거나 음수로 설정해준 경우이거나 하는 경우를 말씀하시는 걸까요?

 

재밌게 듣고 있습니다 감사합니다^^

Answer 1

0

synee

안녕하세요! jyee님~ JSCODE  시니 입니다~

우선 강의를 흥미롭게 들으시면서 코드의 디테일한 부분까지 깊게 고민하고 질문해 주셔서 감사합니다!ㅎㅎ

말씀하신 LengthTextSplitter의 무한 루프 방지 로직은 텍스트 파싱 및 청크 분할 알고리즘을 설계할 때 매우 중요한 예외 처리 구간입니다.


​질문하신 대로 chunkSize보다 chunkOverlap이 더 크게 설정되거나 음수가 들어오는 경우가 '설정 오류'의 대표적인 케이스입니다!

​조금 더 구체적으로 어떤 원리로 인해 인덱스가 제자리에 머물거나 뒤로 밀려 무한 루프가 발생하는지 몇 가지 케이스로 나누어 설명해 드리자면,

​1. chunkOverlap이 chunkSize보다 크거나 같은 경우 (가장 흔한 설정 오류 입니다!)
​우리가 슬라이딩 윈도우 방식으로 텍스트를 잘라낼 때, 다음 청크의 시작점(nextStart)은 보통 현재 시작점(chunkStart)에서 chunkSize를 더한 뒤 chunkOverlap만큼 빼서 결정됩니다.

수식 표현: nextStart = chunkStart + chunkSize - chunkOverlap

​우리는 현재 chunkSize와 chunkOverlap을 직접 주입해주고 있는데요~ 만약 설정을 잘못하여 chunkSize = 100, chunkOverlap = 120으로 지정했다고 가정을 해보겠습니다..!

• ​nextStart = chunkStart + 100 - 120이 되므로, nextStart = chunkStart - 20이 됩니다.

• ​즉, 다음 시작점이 앞으로 전진하지 못하고 오히려 뒤로 밀리는 현상이 발생합니다.

• ​조건문(if (nextStart <= chunkStart))이 없다면 코드는 이미 읽은 부분을 다시 읽고 또 읽으면서 영원히 루프를 돌게 됩니다.

​2. 말씀하신 chunkOverlap 또는 chunkSize가 음수인 경우

​생성자나 빌더에서 음수 진입을 막는 검증(Validation) 로직이 누락되었다면, 계산식 내에서 음수 연산으로 인해 인덱스가 꼬이게 됩니다..!

• ​예를 들어 chunkOverlap에 -50 같은 음수가 들어가면 마이너스 마이너스가 되어 오버랩이 아니라 오히려 공백이 생기거나, 반대로 인덱스 역전 현상을 유발하는 엣지 케이스가 생길 수 있습니다.

​말씀하신 "생성자 설정 시 크기 역전(overlap > size)이나 음수 지정" 케이스가 맞습니다!ㅎㅎ

​이런 방어적 코드(if (nextStart <= chunkStart { break; })를 작성해 두는 이유는, 오픈소스나 라이브러리를 만들 때 사용자가 어떤 잘못된 값을 주입할지 100% 예측하기 어렵고, 외부 도구(토크나이저 등)의 오동작으로 인한 시스템 다운(OOM이나 CPU 100% 점유)을 완벽하게 차단하기 위해 안전하게 적은 코드라고 이해해주시면 좋을 것 같습니다!ㅎㅎ

​정확한 개념을 짚고 계시니 앞으로의 구현 실습도 아주 수월하게 진행하실 수 있을 것 같습니다~!!

완강까지 계속 응원하겠습니다. 추가로 궁금한 점이 생기면 언제든 질문 남겨주세요!

강의 수강 후 포트폴리오 준비 방향에 대해 조언 부탁드립니다.

2

52

1

프론트엔드 이력서 관련 질문

1

46

2

강의가 재생되지 않습니다.

1

33

1

매일 사용시 토큰사용량

1

57

2