[kotlin] Ktor Locations 데이터 검증

Ktor는 경로를 파싱하고 경로 요청에 대한 작업을 실행하는데 사용되는 경로 기반 라우팅을 편리하게 지원합니다. Ktor Locations를 사용하면 경로의 일부 또는 전체를 라우팅할 수 있고, 쿼리 매개변수나 경로 변수를 쉽게 추출할 수 있습니다.

때때로, 추출된 데이터의 유효성을 검사해야 할 필요가 있습니다. 예를 들어, 정수 ID가 필요한 경우 ID가 유효한지 확인해야 합니다. Ktor Locations에서는 이런 데이터 검증을 수행하는 방법을 제공하고 있습니다.

데이터 유효성 검사하기

Ktor Locations의 validator 함수를 사용하여 추출된 데이터의 유효성을 검사할 수 있습니다. 먼저, 데이터 클래스를 만들고 validate 메서드를 추가하여 데이터를 검증합니다.

data class UserId(val id: Int) {
    init {
        require(id > 0) { "ID는 양수여야 합니다" }
    }
}

fun userIdRoute() = route("/user") {
    get<UserRoute> { user ->
        // user는 검증된 데이터입니다.
        call.respondText("User ID: ${user.id}")
    }
}

val UserRoute = location(routePath("/{id}", ::UserId))

fun Route.routePath(path: String, validator: PathValidator::UserId): PathValidation<UserRoute, PathValidator> {
    return createRouteFromPath(path, validator).apply {
        intercept(ApplicationCallPipeline.Features) {
            val userId = call.parameters[UserId::id]
            val user = UserId(userId!!.toInt())
            val validation = user.validate()
            if (validation.failed) {
                val errorMessage = validation.failures.joinToString { it.message }
                call.respond(HttpStatusCode.BadRequest, errorMessage)
                finish()
            }

            proceed()
        }
    }
}

위 코드에서 UserId 클래스는 ID의 유효성을 확인하는 validate 메서드를 포함하고 있습니다. 그런 다음, UserRoute location을 만들고, validate 함수를 사용하여 데이터를 검증합니다. 만약 유효성 검사가 실패하면 HTTP 상태 코드 400과 함께 에러 메시지를 반환합니다.

위 예시를 참조하여, Ktor Locations를 사용하여 데이터 유효성을 검사하는 방법을 배웠습니다.

참고 자료