본문으로 건너뛰기

[Open WebUI] JSON.parse(JSON.stringify())를 structuredClone으로 교체

PR 링크: open-webui/open-webui#22104 상태: Merged | 변경: +2 / -8

들어가며

JavaScript에서 객체의 딥 복사를 위해 JSON.parse(JSON.stringify(obj)) 패턴이 흔히 사용됩니다. 하지만 이 방식은 문자열 직렬화와 파싱이라는 두 번의 비용이 발생합니다. 모던 브라우저는 structuredClone API를 제공하며, 이는 직렬화 과정 없이 내부적으로 효율적인 복사를 수행합니다. 또한 이 PR에서는 이미 새로 생성된 리터럴 객체에 대한 불필요한 JSON 라운드트립도 함께 제거합니다.

핵심 코드 분석

도구 실행 결과 복사

Before:

if (cb) {
    cb(JSON.parse(JSON.stringify(res)));
}

After:

if (cb) {
    cb(structuredClone(res));
}

불필요한 복사 제거

Before:

if (cb) {
    cb(
        JSON.parse(
            JSON.stringify({
                error: 'Tool Server Not Found'
            })
        )
    );
}

After:

if (cb) {
    cb({ error: 'Tool Server Not Found' });
}

왜 이게 좋은가

  • 성능 향상: structuredClone은 JSON 문자열화/파싱 없이 내부적으로 복사하므로 더 빠릅니다.
  • 타입 보존: JSON.stringifyundefined, Date, RegExp 등을 제대로 처리하지 못하지만, structuredClone은 이들을 올바르게 복사합니다.
  • 불필요한 복사 제거: 리터럴 객체 { error: 'Tool Server Not Found' }는 이미 새 객체이므로 복사할 이유가 없습니다.
  • 코드 가독성 개선: 의도가 명확해집니다. "이 객체를 깊은 복사한다"라는 의미를 직접적으로 전달합니다.

참고 자료

댓글

관련 포스트

PR Analysis 의 다른글