[10분 테코톡] 다이스의 Server-Sent Events for Android
- 팀 보따리 편집 화면과 같은 실시간 데이터 동기화 요구사항을 해결하기 위해 Short Polling, Long Polling, WebSocket의 한계를 분석했습니다. 🔄
- 양방향 통신이 불필요하고 불필요한 요청 및 리소스 낭비를 최소화하기 위해 Server-Sent Events(SSE)를 최적의 솔루션으로 선택했습니다. ✅
- SSE는 HTTP 기반의 단방향 실시간 스트리밍 기술로, 한 번 연결되면 서버에서 변경사항 발생 시 클라이언트로 이벤트를 지속적으로 전송합니다. 📡
- SSE 이벤트는
text/event-stream 포맷을 사용하며, id, event, data와 같은 접두사를 가진 단순한 구조로 파싱이 용이합니다. 📝
- 안드로이드에서 SSE를 구현하는 두 가지 방법 중 첫 번째는 OkHttp를 직접 활용하는 방식입니다. 🛠️
- OkHttp 직접 구현 시,
ReadTimeout을 길게 설정하여 무제한 대기하도록 하고, 연결 끊김 감지를 위해 서버에서 주기적으로 의미 없는 이벤트를 보내는 Heartbeat 방식이 필요합니다. ❤️🩹
- 직접 구현은
callbackFlow를 통해 비동기적으로 이벤트를 처리하고, BufferedSource의 readUtf8Line() 메서드를 사용하여 스트리밍 응답을 줄 단위로 파싱합니다. 🧑💻
- 두 번째 방법은 OkHttp-SSE API를 사용하는 것으로, 이는 아직 실험적 단계이지만 SSE 규약을 준수하는 서버와 통신 시 개발 리소스를 절약할 수 있습니다. 🧪
- 서버가 SSE 규약을 엄격히 준수한다면 OkHttp-SSE API가 효율적이며,
id, event, data 외의 커스텀 접두사가 필요한 경우 직접 구현 방식이 유연성을 제공합니다. ⚖️
데브허브 | DEVHUB | [10분 테코톡] 다이스의 Server-Sent Events for Android