AI Briefing

SK플래닛, Chat DIC 프런트엔드 성능 개선기: SSE 스트리밍과 가상화 기법 적용

·2025.11.01 09:00

핵심 내용

SK플래닛이 Chat DIC에 SSE 스트리밍, Buffer 처리, Windowing 기법을 적용해 대화형 LLM 서비스의 프런트엔드 성능을 개선했다.

1 / 4

자세히 보기

SK플래닛 Data Infrastructure팀이 개발한 SQL Assistant 및 Table 메타 검색 시스템 Chat DIC의 프런트엔드 성능 개선 사례를 공개했다. React와 Vite 기반의 이 서비스는 실시간 대화형 LLM 특성에 맞춰 SSE(Server-Sent Events), Buffer, Virtualization 기술을 도입해 사용자 경험을 최적화했다.

SSE 채택 및 스트리밍 처리 LLM 응답은 서버에서 클라이언트로의 단방향 통신이므로, 복잡한 양방향 통신인 WebSocket 대신 SSE를 채택했다. SSE는 브라우저가 자동 재연결을 처리하고 HTTP/2와 호환성이 높아 구현 난이도가 낮다. axios는 ReadableStream을 반환하지 않아 스트리밍에 부적합하므로, JavaScript 기본 ReadableStream API를 사용해 text/event-stream 형식의 데이터를 파싱했다.

Buffer 적용으로 렌더링 지연 해소 탭 비활성화 시 브라우저의 리소스 제한(Throttling)으로 인해 서버 응답 렌더링이 지연되는 문제를 해결했다. 탭이 비활성화된 동안 들어오는 스트리밍 데이터를 bufferRef에 임시 저장하고, 탭이 다시 활성화되면(visibilitychange 이벤트) 내용을 일괄 출력하는 방식을 적용했다. 이를 통해 탭 복귀 시에도 끊김 없이 자연스럽게 대화가 이어지는 경험을 제공한다.

Virtualization으로 DOM 노드 최적화 대화가 길어질수록 DOM 노드 수 증가로 인한 렌더링 속도 저하를 방지하기 위해 react-window 라이브러리를 활용한 Windowing 기법을 적용했다. 화면에 보이는 UI 요소만 실제로 렌더링하고 나머지는 제거하며, useDynamicRowHeight Hook과 defaultRowHeight: 50 설정으로 메시지 길이에 따라 행 높이를 동적으로 조정했다. 결과적으로 DOM 노드 수가 일정 수준으로 유지되어 자원 사용량이 대폭 감소하고 스크롤 성능이 향상되었다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.