[kotlin] Ktor HTML 라이브러리 웹 소켓 통신

코틀린으로 백앤드를 개발할 때 Ktor는 매우 강력한 도구입니다. Ktor의 HTML 라이브러리를 사용하면 간단하게 HTML 페이지를 생성하고, 이를 통해 웹 소켓 통신도 가능합니다. 이번 포스팅에서는 Ktor의 HTML 라이브러리를 활용하여 웹 소켓 통신을 구현하는 방법에 대해 살펴보겠습니다.

1. Ktor 프로젝트 설정

먼저, 프로젝트에 Ktor를 설정합니다. build.gradle.kts 파일에 아래와 같이 ktor-htmlktor-websockets 의존성을 추가합니다.

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

2. HTML 페이지 생성

다음으로, Ktor의 HTML 라이브러리를 사용하여 HTML 페이지를 생성합니다. 아래는 간단한 예제입니다.

import io.ktor.html.*
import kotlinx.html.*

fun HTML.index() {
    head {
        title("WebSocket Example")
    }
    body {
        h1 { +"WebSocket Example" }
        p { +"This is a simple WebSocket example using Ktor HTML library." }
        div {
            id = "chat"
        }
        script(src = "/static/main.js") {}
    }
}

위의 코드에서 index() 함수는 HTML 페이지의 구조를 정의합니다. 이 예제에서는 WebSocket Example이라는 제목과 간단한 설명, 그리고 chat이라는 id를 갖는 div 요소와 main.js 파일을 참조하는 script 태그를 포함하고 있습니다.

3. 웹 소켓 통신 구현

이제, 웹 소켓 통신을 구현합니다. Ktor의 webSocket 함수를 사용하여 간단히 구현할 수 있습니다. 아래는 간단한 예제입니다.

import io.ktor.http.cio.websocket.*
import io.ktor.routing.*
import io.ktor.websocket.*
import java.util.*

fun Route.webSocketExample() {
  webSocket("/chat") { 
      for (frame in incoming) {
          if (frame is Frame.Text) {
              val receivedText = frame.readText()
              // Handle received text
          }
      }
  }
}

위의 코드에서 webSocket 함수는 /chat 엔드포인트로 웹 소켓 연결을 처리합니다. 클라이언트로부터 메시지를 수신할 때마다 해당 내용을 처리하는 코드가 구현되어야 합니다.

4. 클라이언트-서버 통신

마지막으로, 클라이언트와 실제로 연결하고 메시지를 주고받는 부분을 구현해야 합니다. 이 부분은 클라이언트 측의 JavaScript 코드로 처리하게 됩니다.

이것은 추가적인 클라이언트 측 코드와 서버 측 라우팅 및 핸들링이 필요하므로, 상세한 예제는 너무 길어질 수 있습니다. 하지만, 이러한 클라이언트-서버 통신 부분에 대한 예제 코드는 Ktor 공식 문서에서 찾을 수 있습니다.

마치며

Ktor의 HTML 라이브러리를 사용하여 웹 소켓 통신을 구현하는 방법에 대해 간략하게 살펴보았습니다. Ktor는 강력한 도구이며, HTML 생성과 웹 소켓 통신을 함께 사용할 수 있다는 점은 개발자들에게 많은 유용함을 제공합니다. 더 많은 정보는 Ktor 공식 문서를 참고하시기 바랍니다.