[kotlin] Ktor Locations와 세션 관리
Kotlin 기반의 웹 애플리케이션을 개발하다 보면 사용자의 요청을 처리하는 과정에서 URL 경로의 파라미터 값을 추출하거나 세션을 관리해야할 때가 있습니다. Ktor는 이러한 기능을 위해 Locations
와 Sessions
모듈을 제공합니다.
Ktor Locations
Locations 모듈을 사용하면 URL 경로에서 파라미터 값을 추출하거나 RESTful API의 경로를 정의할 수 있습니다. 예를 들어, /users/{id}
와 같은 경로에서 id
값을 추출하거나, /items/{itemId}/comments/{commentId}
와 같은 복잡한 경로를 정의할 수 있습니다.
import io.ktor.locations.*
import io.ktor.application.*
import io.ktor.response.*
import io.ktor.routing.*
@Location("/users/{id}")
data class UserLocation(val id: Int)
fun Application.main() {
install(Locations)
routing {
get<UserLocation> { location ->
call.respondText("User ID: ${location.id}")
}
}
}
@Location
어노테이션을 사용하여 Location 클래스를 정의하고, 해당 클래스를 라우팅 설정에서 사용하여 해당 경로에 대한 처리를 정의할 수 있습니다.
Ktor 세션 관리
Ktor는 기본적으로 세션을 관리하기 위한 Sessions
모듈을 제공합니다. 이를 사용하면 클라이언트의 세션을 추적하고 상태를 유지할 수 있습니다.
import io.ktor.sessions.*
import io.ktor.application.*
import io.ktor.response.*
import io.ktor.request.*
import io.ktor.routing.*
import io.ktor.http.*
data class Session(val username: String)
fun Application.main() {
install(Sessions) {
cookie<Session>("SESSION") {
cookie.path = "/"
}
}
routing {
get("/login") {
call.sessions.set(Session("user123"))
call.respondText("Logged in")
}
get("/user") {
val session = call.sessions.get<Session>()
if (session != null) {
call.respondText("Logged in as ${session.username}")
} else {
call.respondText("Not logged in", status=HttpStatusCode.Unauthorized)
}
}
}
}
위의 예제에서는 Sessions
모듈을 설치하고, Session
클래스를 정의하여 사용자의 세션 정보를 저장합니다. 로그인 요청(/login
)에서 세션을 설정하고, 사용자 정보 요청(/user
)에서 해당 세션을 가져와 사용자를 인증하는 예제를 보여줍니다.
Ktor Locations와 Sessions 모듈을 사용하여 Kotlin 기반의 웹 애플리케이션을 보다 효율적으로 개발할 수 있습니다.
참고 자료
- Ktor Locations: https://ktor.io/docs/locations.html
- Ktor Sessions: https://ktor.io/docs/sessions.html