Intelligence Architect's Log

10초 동안 빈 화면만 보라고요? AI 에이전트 체감 속도 0.2초로 만드는 SSE 스트리밍

딥 스카이블루 테일러드 블레이저를 입은 몬이쌤이 AI 에이전트의 답변 대기 시간을 단축하고 SSE 기반 토큰 단위 스트리밍 파이프라인으로 체감 속도를 높이는 방법을 소개하는 썸네일 이미지

"실전 업무 자동화를 위해 AI 에이전트 시스템을 구축했는데, 외부 웹 검색이나 DB 조회가 실행될 때마다 프로그램 전체가 멈춘 듯 먹통이 되었다가 한참 뒤에야 답변이 한꺼번에 쏟아져 나오는 지루한 대기 현상 때문에 골머리를 썩었습니다."

안녕하세요, 몬이쌤입니다! AI 에이전트가 외부 웹을 검색하거나 대용량 지식 샌드박스에서 답변을 생성하도록 시스템을 구축하다 보면 독자나 사용자가 가장 먼저 체감하는 답답함이 있습니다. 바로 '답변이 나올 때까지 머뭇거리는 긴 대기 시간(Latency)' 문제입니다.

에이전트가 내부 추론과 도구 실행을 완전히 마칠 때까지 화면에는 아무런 변화도 없이 커서만 깜빡이고 있으니, 사용하는 사람 입장에서는 '시스템이 다운된 건가?' 싶어 창을 닫아버리기 일쑤지요. 오늘은 제가 직접 경험했던 '먹통 반응속도로 인한 사용자 이탈 잔혹사'와 이를 깔끔하게 해결해 낸 'SSE(Server-Sent Events) & 토큰 단위 스트리밍 파이프라인' 구축기를 이야기해 볼게요.

1. "10초 동안 빈 화면만 보라고요?" - 동기식 블로킹의 답답함

전문 지식을 수집하고 정리하여 실시간 답변을 제공하는 챗봇형 에이전트를 처음 웹 화면에 배포했을 때였습니다. 에이전트가 완벽한 문장을 가공하여 한꺼번에 JSON 형태로 응답(Response)을 던져주도록 설계했었지요.

단순한 인사말은 1초 만에 출력되었지만, RAG(검색 증강 생성)나 외부 도구를 거쳐야 하는 복잡한 질문이 들어오면 문제가 터졌습니다. 에이전트가 정보를 수집하고 생각하는 8~12초 동안 사용자 화면은 완전히 백지로 멈춰있었던 것입니다. 테스트에 참여했던 사람들은 불과 5초를 참지 못하고 "버그 났는데요?"라며 새로고침을 누르거나 창을 닫아버렸습니다.

실제 응답을 완성하는 데 걸리는 전체 시간보다, '사용자가 첫 번째 글자를 마주하기까지 걸리는 시간(TTFT: Time To First Token)'이 사용자 경험(UX)을 결정짓는 핵심 지표라는 사실을 뼈저리게 느낀 순간이었습니다.

2. 시행착오: 무작정 양방향 웹소켓(WebSocket)을 붙였더니...

실시간성을 확보하겠다는 생각에 가장 먼저 떠올린 것은 웹소켓(WebSocket)이었습니다. 클라이언트와 서버 간 양방향 통신 채널을 뚫어 데이터를 실시간으로 주고받으려 했지요.

하지만 단방향으로 에이전트의 글자만 계속 받아보면 되는 일반적인 텍스트 스트리밍 환경에서 웹소켓은 '너무 과도한 엔지니어링 공수와 서버 커넥션 관리 부담'을 가져왔습니다. 방화벽(CORS) 설정 문제나 로드밸런서 연결 유지(Keep-Alive) 문제로 세션이 계속 끊어지는 부작용이 속출했지요. 에이전트 글자 몇 개 실시간으로 뿌려주려다 웹 서버 전체의 통신 인프라가 꼬여버린 것입니다.

💡 몬이쌤의 생각: 아이들에게 먼 길을 흘러온 정답을 받아 적게 할 때, 답안지 전체가 다 작성될 때까지 10분 동안 조용히 기다리라고 하면 아이들은 이내 지루해하며 딴짓을 시작합니다. 선생님이 풀어나가는 과정을 "자, 첫 번째는 이거야, 두 번째는..." 하고 한 마디씩 입으로 읊어줄 때 아이들의 집중력이 끊기지 않고 끝까지 유지되는 것과 똑같습니다.

3. 해결책: 'SSE(Server-Sent Events) 단방향 스트리밍 & 상태 노드 관제' 3단계 프로토콜

복잡한 양방향 통신 대신, 표준 HTTP 연결 위에서 서버가 클라이언트로 데이터를 한 방향으로 흘려보내주는 '3단계 SSE 스트리밍 아키텍처'를 도입했습니다.

1단계 [경량 SSE(Server-Sent Events) 프로토콜 채택]: 별도의 복잡한 웹소켓 핸드셰이크 없이, 일반 HTTP 요청에서 `text/event-stream` 헤더를 통해 서버가 단방향으로 토큰 단위를 지속해서 흘려보내도록 설정했습니다. 방화벽이나 CORS 문제없이 깔끔하게 연동되었죠.

2단계 [에이전트 도구 실행 상태 실시간 이벤트 분사(State Event Dispatch)]: 글자가 생성되기 전, 에이전트가 "DB를 조회 중입니다...", "웹 검색 결과를 분석 중입니다..."와 같은 중간 생각 과정(Tool Call State)을 즉시 JSON 이벤트 메시지로 사용자 화면에 0.1초 만에 쏘아주었습니다.

3단계 [LLM 토큰 단위 스트리밍 커넥터(Chunk Generator)]: LLM에서 생성되는 텍스트 청크(Chunk)를 모아두지 않고, 생성되는 즉시 비동기 제너레이터(Async Generator)를 통해 클라이언트 브라우저로 쏴주어 타이핑 치듯 자연스럽게 글자가 그려지도록 만들었습니다.

4. 결과: 체감 대기 시간 0.2초 달성 & 사용자 이탈률 90% 감소!

SSE 기반 스트리밍 파이프라인을 적용한 이후, 질문 버튼을 누르자마자 0.2초 만에 "에이전트가 답변을 준비 중입니다"라는 실시간 안내가 뜨고 곧이어 글자가 타자기 치듯 또박또박 나타나기 시작했습니다!

전체 문장이 완성되는 최종 시간은 이전과 비슷했지만, 체감 대기 시간이 사실상 제로(Zero) 수준으로 줄어들면서 사용자가 느끼는 피로감과 이탈률이 90% 이상 급감했지요.

AI 에이전트 자동화 시스템을 완성도 높게 만든다는 것은 단순히 추론 능력을 극대화하는 것에 그치지 않습니다. '에이전트가 어떤 생각을 하고 있는지, 어디까지 작업을 진행했는지를 사용자에게 0.1초 만에 직관적으로 보여주는 스트리밍 통화 채널을 뚫어주는 것'이 바로 뛰어난 사용자 경험의 비밀입니다.

여러분의 AI 에이전트도 답답하게 멍하니 멈춰있다가 한꺼번에 글자를 쏟아낸다면, 무작정 서버 스펙만 높이지 말고 SSE 기반 스트리밍 파이프라인을 붙여보세요. 독자들이 눈을 떼지 못하는 매끄럽고 생동감 넘치는 시스템을 얻게 되실 겁니다. 

같이 보면 좋은 글

PREV REPORT 이전 리포트 읽기