[kotlin] 코틀린 웹 소켓 서버 개발 방법

웹 소켓은 실시간 양방향 통신을 위한 프로토콜로, 코틀린을 사용하여 웹 소켓 서버를 개발하는 방법에 대해 알아보겠습니다.

1. 의존성 추가하기

먼저, 코틀린에서 웹 소켓 서버를 개발하기 위해 필요한 의존성을 추가해야 합니다. build.gradle 파일에 다음 의존성을 추가합니다.

dependencies {
    implementation "io.ktor:ktor-websockets:$ktor_version"
}

ktor_version의 값을 사용하고자 하는 Ktor 버전으로 변경해야 합니다.

2. 웹 소켓 서버 구현하기

import io.ktor.application.*
import io.ktor.features.ContentNegotiation
import io.ktor.http.cio.websocket.*
import io.ktor.jackson.jackson
import io.ktor.request.receive
import io.ktor.routing.Routing
import io.ktor.routing.route
import io.ktor.routing.websocket
import io.ktor.server.engine.embeddedServer
import io.ktor.server.netty.Netty

fun main() {
    embeddedServer(Netty, port = 8080, module = Application::module).start(wait = true)
}

fun Application.module() {
    install(ContentNegotiation) {
        jackson {
            // configure Jackson if needed
        }
    }

    install(Routing) {
        route("/ws") {
            websocket("/chat") {
                // 웹 소켓 연결이 이루어졌을 때 실행되는 코드
                val session = call.webSocketSession

                // 클라이언트로부터 메시지를 수신하는 코드
                for (frame in incoming) {
                    if (frame is Frame.Text) {
                        val receivedText = frame.readText()

                        // 수신된 메시지를 처리하는 코드
                        handleMessage(receivedText)
                    }
                }
            }
        }
    }
}

suspend fun DefaultWebSocketSession.handleMessage(message: String) {
    // 메시지 처리 로직을 구현합니다.
    // 예: 메시지를 로그에 출력하거나 클라이언트로부터 메시지를 받아 다른 클라이언트에게 전송하는 등의 동작을 수행합니다.
}

위의 코드는 Ktor를 사용하여 코틀린에서 웹 소켓 서버를 개발하는 예제입니다.

  1. 서버 실행 및 테스트하기

위 코드에서 main() 함수를 실행하면 웹 소켓 서버가 로컬에서 8080 포트에서 실행됩니다. 테스트를 위해 브라우저에서 다음과 같은 JavaScript 코드를 사용하여 웹 소켓 클라이언트를 작성할 수 있습니다.

const socket = new WebSocket('ws://localhost:8080/ws/chat');

socket.onopen = () => {
    console.log('WebSocket connection established.');
    socket.send('Hello server!');
};

socket.onmessage = (event) => {
    console.log('Received message from server:', event.data);
};

socket.onclose = () => {
    console.log('WebSocket connection closed.');
};

이제 웹 소켓 클라이언트가 서버와 연결되고, 서버로부터 메시지를 수신받을 수 있게 되었습니다.

코틀린을 사용하여 웹 소켓 서버를 개발하는 방법에 대해 알아보았습니다. 이를 활용하여 다양한 실시간 애플리케이션을 개발할 수 있습니다.

참고 자료