AI 기능을 서비스에 붙이면 꼭 듣는 말이 있어요. "답은 좋은데 너무 오래 걸려요." 긴 답일수록 모델이 마지막 글자까지 다 만든 뒤에야 화면에 나타나니, 사용자는 그동안 빈 화면만 보게 돼요.
이 글은 답이 만들어지는 대로 조금씩 화면에 보여 주는 방법, 스트리밍 응답을 Anthropic과 OpenAI의 공식 문서 기준으로 정리했어요. 데모에서 출시까지 · API 비용 · 구조화 출력에 이어지는 AI 기능 개발 시리즈 4편이에요.
스트리밍은 무엇이 달라지나
일반 요청은 답이 다 만들어진 다음 한 번에 돌아와요. 요청할 때 stream 옵션을 켜면, 서버가 답을 작은 조각으로 나눠 계속 보내 줘요. 이때 쓰는 방식이 SSE(Server-Sent Events, 서버가 연결을 열어 둔 채 데이터를 이어서 보내는 웹 표준)예요.
답이 끝나는 시간은 비슷해도, 첫 글자가 화면에 나오는 시점이 앞당겨져요. 사용자는 AI가 일하고 있다는 걸 바로 보고, 앞부분을 읽으면서 기다릴 수 있어요.
| 구분 | 일반 응답 | 스트리밍 응답 |
|---|---|---|
| 화면에 보이는 시점 | 답이 다 만들어진 뒤 | 첫 조각이 오자마자 |
| 긴 답 | 요청 시간 초과 위험 | 연결을 유지하며 받음 |
| 개발 난이도 | 쉬움 | 이벤트 처리 필요 |
Anthropic 문서는 출력 길이(max_tokens)를 크게 잡은 요청에는 SDK가 HTTP 시간 초과를 피하려고 스트리밍을 요구한다고 안내해요. 긴 보고서나 문서를 만드는 기능이라면 처음부터 스트리밍으로 설계하는 게 좋아요.
받는 쪽은 '이벤트'를 순서대로 처리해요
스트리밍 답은 글자만 오는 게 아니라, 종류 이름이 붙은 이벤트로 와요.
- Anthropic: message_start → content_block_start → content_block_delta(글자 조각, 여러 번) → content_block_stop → message_delta → message_stop
- OpenAI(Responses API): response.created → response.output_text.delta(글자 조각, 여러 번) → response.completed
화면 코드는 글자 조각(delta)을 이어 붙여 보여 주고, 끝 이벤트가 오면 저장하거나 다음 단계로 넘어가면 돼요. Anthropic 문서는 중간에 ping 이벤트가 섞일 수 있고 앞으로 새 이벤트 종류가 추가될 수 있으니, 모르는 이벤트는 오류 없이 넘기라고 안내해요.
우리 회사 자료로 직접 확인해 보고 싶다면AI 도입 진단 · 자료를 보고 적용 후보와 순서를 정리해 드려요상담 신청중간에 끊길 때를 미리 정해요
스트리밍은 연결이 길게 열려 있는 만큼, 도중에 문제가 생길 수 있어요. Anthropic 문서는 사용량이 몰릴 때 스트림 도중에 overloaded_error 이벤트가 올 수 있다고 적어 두었고, OpenAI도 스트림 중 error 이벤트를 따로 둬요.
- 이미 받은 글은 지우지 않기: 끊긴 지점까지는 화면에 남기고 "이어 받기" 버튼을 보여 줘요
- 이어 받기 방법 정하기: Anthropic 문서는 받은 부분을 다음 요청에 넣어 이어 쓰게 하는 복구 방법을 모델 버전별로 안내해요
- 끝 이벤트를 받았을 때만 저장: 중간 조각을 저장하면 반쪽짜리 답이 남아요
- 멈춤 버튼 두기: 원하는 답이 아니면 사용자가 바로 끊을 수 있게 해요
구조화 출력 · 검수와 같이 쓸 때
지난 글에서 다룬 구조화 출력(JSON)과 함께 쓸 때는 주의할 점이 있어요. 조각으로 오는 JSON은 끝나기 전까지 완성된 데이터가 아니에요. Anthropic 문서도 도구 입력은 부분 JSON 문자열로 오니, 모아 두었다가 블록이 끝난 뒤 해석하라고 안내해요.
또 OpenAI 문서는 스트리밍 중간 결과는 내용 검수(모더레이션)가 더 어렵다고 짚어요. 고객에게 바로 보이는 화면이라면 조각 단위로 최소한의 검사를 두거나, 검수가 끝난 뒤 공개하는 화면과 나눠서 설계하세요.
붙이는 순서 정리
- 답이 길어지는 기능부터 stream 옵션을 켜요
- 글자 조각 이벤트만 이어 붙여 화면에 보여 줘요
- 끝 이벤트에서 저장하고, 오류 이벤트에서는 이어 받기를 보여 줘요
- JSON · 검수가 필요한 결과는 다 받은 뒤에 처리해요
기다림이 줄면 같은 AI 기능도 훨씬 빠르게 느껴져요. 답이 가장 긴 화면 하나에서 먼저 시험해 보고 넓혀 가세요.
참고
- Anthropic, Streaming Messages: https://platform.claude.com/docs/en/build-with-claude/streaming
- OpenAI, Streaming API responses: https://developers.openai.com/api/docs/guides/streaming-responses