기존 Spring Boot를 사용할때는 Resopnse Entity를 따로 만들어서 사용했다.
class Response(status: ResponseStatus, data: Any? = "") : ResponseEntity<Any>(ResponseData(status.statusCode, "${status.name} - ${status.msg}", data), status.httpStatus) {
data class ResponseData(
val statusCode: Int,
val message: String,
val result: Any?
)
}
에러가 뜰 때도 정해진 형식으로 표시를 하니 좋은 방법이라고 생각하고 Ktor에도 적용하고자함
Ktor은 객체를 return하는 형식이 아닌 suspend 형식이고, ResponseEntity같은 것 또한 없었다..(내가 못찾은 것일 수도)
방법을 이것저것 시도해보다가 Applicationcall에 함수를 추가하는 것으로 해결했다.
data class와 suspend inline fun를 각각 하나씩 사용했으며 내용은 다음과 같다.
ResponseStatus는 HttpStatusCode와 함께 결과 값을 정의해 놓은 enum 클래스 이다.
data class Response(
val statusCode: Int,
val message: String,
val result: Any?
)
suspend inline fun ApplicationCall.response(
status: ResponseStatus,
msg: Any? = "",) {
response.status(status.httpStatus)
respond(Response(status.statusCode, "${status.name} - ${status.msg}", msg))
}
enum class ResponseStatus(val statusCode: Int, val msg: String, val httpStatus: HttpStatusCode) {
FAILED(100, "기타 오류", HttpStatusCode.InternalServerError),
OK(200, "정상 처리", HttpStatusCode.OK)
}
routing에서는 이와같이 사용하면 정상 동작한다.
fun Application.configureRouting() {
routing {
get("/") {
call.response(ResponseStatus.FAILED, "결과값")
}
}
}


프론트 개발자와 각 API의 처리를 원할하게 하기 위해서는 이런식으로 정해진 틀안에서 결과값이 나오는것이 중요하다고 생각하고 이러한 방법을 사용중이며, Ktor에 적용하는 방법 또한 알아봤다.
더 좋은 방법이나 다른 의견은 언제든지 환영합니다! 😊