Server Sent Events(SSE)의 이해

ChatGPT를 사용한다고 상상해 보세요. 질문을 던졌을 때, 단어가 하나씩 나타나는 대신 전체 답변이 한꺼번에 나타날 때까지 5초를 기다려야 한다면 어떨까요?

이 지연 시간은 느리게 느껴지고 답답함을 줍니다.

이를 해결하기 위해 개발자들은 스트리밍 응답(streaming responses)을 사용합니다. 이는 사용자 경험을 빠르게 만들어 줍니다.

Server Sent Events(SSE)가 이를 가능하게 합니다.

SSE란 무엇인가요? SSE는 HTTP를 통해 서버에서 클라이언트로 데이터를 스트리밍하기 위한 표준입니다. 서버가 실시간으로 업데이트를 푸시할 수 있도록 해줍니다.

작동 방식: 서버는 작은 텍스트 블록을 보냅니다. 이 블록들은 data, event, id, retry와 같은 필드를 사용합니다. 각 블록은 빈 줄로 구분됩니다.

예시: data: {"name": "Portal Gun", "price": 999.99}

SSE의 주요 용도:

  • AI 채팅 스트리밍
  • 실시간 알림
  • 실시간 로그
  • 시스템 관측성(observability)

SSE가 등장하기 전, 개발자들은 업데이트를 받기 위해 주로 두 가지 방법을 사용했습니다:

1. Short polling 클라이언트가 서버에 데이터를 요청합니다. 데이터가 준비되지 않았다면 서버는 대기 메시지를 보냅니다. 클라이언트는 기다렸다가 다시 요청합니다. 작업이 완료될 때까지 이 과정이 반복됩니다.

2. Long polling 클라이언트가 서버에 데이터를 요청합니다. 서버는 데이터가 준비되거나 타임아웃이 발생할 때까지 요청을 열어둔 상태로 유지합니다. 클라이언트는 응답을 받은 직후 즉시 요청을 다시 시작해야 합니다.

이벤트 스트림은 연속적인 프로세스를 처리합니다. 이러한 프로세스는 특정 순서를 따릅니다. 여기에는 PDF 생성과 같은 간단한 작업부터 은행 거래와 같은 복잡한 작업까지 포함됩니다.

서버는 클라이언트와 통신 채널을 엽니다. 그리고 프로세스가 완료될 때까지 이 채널을 열어둔 상태로 유지합니다.

출처: https://dev.to/rishini_dharan_t/understanding-server-sent-events-3mkd