WebSocket 정리

Bluewave·2025년 6월 19일

안드로이드

목록 보기
7/14
post-thumbnail

WebSocket이란?

WebSocket은 양방향 통신이 가능한 실시간 네트워크 프로토콜입니다.
기존 HTTP는 클라이언트가 요청을 보내야 서버가 응답하는 단방향 구조지만,
WebSocket은 서버와 클라이언트가 항상 연결된 상태로 데이터를 주고받을 수 있는 구조입니다.

즉, "요청 → 응답"이 아닌, "연결 → 자유로운 송수신" 구조!


언제 WebSocket을 쓰는가?

  • 실시간 채팅
  • 실시간 게임
  • AI 음성/텍스트 인터랙션
  • 주식/센서 데이터 등 실시간 스트리밍 정보

안드로이드에서 WebSocket 사용하기

Android에서는 보통 다음과 같은 라이브러리를 사용해 WebSocket을 다룬다:

라이브러리특징
OkHttp가장 많이 쓰이는 WebSocket 구현체 (Square 제공)
Ktor Client코루틴 기반 비동기 WebSocket 처리
Java-WebSocket순수 자바 기반 라이브러리 (웹서버 테스트용으로도 사용 가능)

OkHttp 기반 WebSocket 예시 (간단)

val client = OkHttpClient()
val request = Request.Builder()
    .url("wss://example.com/socket")
    .build()

val listener = object : WebSocketListener() {
    override fun onOpen(webSocket: WebSocket, response: Response) {
        webSocket.send("Hello from Android!")
    }

    override fun onMessage(webSocket: WebSocket, text: String) {
        println("서버 메시지: $text")
    }

    override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
        println("에러 발생: ${t.message}")
    }
}

val webSocket = client.newWebSocket(request, listener)

wss://는 보안 WebSocket 프로토콜입니다 (https의 WebSocket 버전)


WebSocket vs HTTP 차이

항목HTTPWebSocket
구조요청 → 응답연결 후 양방향 통신
속도상대적으로 느림빠름 (연결 유지)
실시간성낮음높음
예시뉴스 앱 API채팅, 실시간 음성 통화 등

안드로이드에서 쓸 때 주의할 점

  • Lifecycle 관리: 앱 종료/포그라운드 상태 변화에 따라 연결 관리 필요
  • Reconnect 전략: 끊겼을 때 자동 재연결 로직 구현 필요
  • 스레드 처리: 코루틴이나 별도 스레드에서 사용 권장
profile
Developer's Logbook

0개의 댓글