피드로 돌아가기
Dealing with WebSocket in Dart
Dev.toDev.to
Backend

Dart shelf 기반 WebSocket Echo Server 설계 및 구현

Dealing with WebSocket in Dart

Mathieu K2026년 5월 20일9beginner

Context

HTTP Polling의 한계를 극복하기 위해 bidirectional communication을 지원하는 WebSocket 프로토콜 채택. Dart 생태계 내 다수의 프레임워크 간 파편화된 구현체 중 유지보수 안정성이 검증된 표준 라이브러리 기반의 최적 설계를 모색함.

Technical Solution

  • Dart Team이 유지관리하는 shelf 라이브러리를 채택하여 프레임워크 의존성을 최소화한 기반 구조 설계
  • shelf_web_socket 핸들러를 통한 WebSocketConnection lifecycle 관리 및 subprotocol 처리 로직 구현
  • WebSocketChannel의 Sink 객체를 활용한 클라이언트 방향 데이터 송신 및 Stream 객체를 통한 수신 이벤트 리스닝 구조 구축
  • shelf_router를 적용하여 모든 요청 경로를 단일 루트(/)로 리다이렉션하는 트래픽 제어 메커니즘 구현
  • 30초 주기의 pingInterval 설정을 통한 TCP 커넥션 유지 및 Dead Connection 방지 전략 적용

1. 프레임워크 선정 시 커뮤니티 인지도보다 메인테이너(Dart Team)의 유지보수 여부를 우선 검토

2. WebSocket 구현 시 Sink와 Stream의 비동기 처리 흐름을 분리하여 데이터 송수신 효율성 확보

3. 단순 Echo 서버를 넘어 Binary Data 기반의 커스텀 통신 프로토콜 설계 가능성 검토

4. production 환경 적용 전 Connection Lifecycle에 따른 자원 해제 로직 추가 필요

원문 읽기