본문 바로가기

Web

[Ktor] Ktor 소소하게 알아보기 - Server 방식

개요

저희가 Ktor Application을 구동시키기 위해서는 Netty와 같은 서버 엔진을 구동시켜야 하고 이후에 저희의 application을 해당 엔진에 올려야 합니다. 모든 프로젝트의 시작이 될 이 부분을 Ktor에서는 어떤 방식으로 처리하고 있을까요?

Ktor server application을 동작시키기 위한 서버 생성 방식

  1. EmbeddedServer
  2. EngineMain

EmbeddedServer

embeddedServer() 메서드를 이용하는 방법이 서버를 구동시키기 가장 쉬운 방법입니다. 

아래의 예시는 Netty 엔진을 8080 포트로 띄우는 코드입니다.

 

fun main() {
    embeddedServer(Netty, port = 8080) {
    	routing {
            get("/") {
            	call.respondText("Hello World!")
            }
        }
    }.start(wait = true)
}

 

  • start(wait = true) : 서버 엔진을 시작시킵니다.
    • (wait = true) - application이 종료될 때까지 기다렸다가 서버를 종료시킵니다.
    • (wait = false) - 종료 신호를 받으면 application이 종료되기 전에 서버가 종료될 수 있습니다.
  • routing {} : Routing은 Ktor 플러그인 중에 하나입니다. Server Application에서 인입되는 request를 핸들링하는 용도로 사용됩니다. Spring에서는 Controller와 같은 역할입니다. 위에서는 간단하게 routing 함수를 이용해서 예시를 작성했습니다.

EngineMain

engineMain을 사용하면 설정에 대한 정의를 application.conf이라는 메인 설정 파일에 따로 정의하여 사용할 수 있습니다. 따라서 나중에 설정을 동일하게 사용해야 할 경우 좀 더 쉽게 옮길 수 있을 것 같습니다. 

application.conf는 Spring의 application.properties와 비슷하다고 볼 수 있고 resource 폴더 내에 존재해야합니다.

 

// main/kotlin/com/example/TestMain.kt

import io.ktor.server.application.*
import io.ktor.server.netty.*
import io.ktor.server.response.*
import io.ktor.server.routing.*

fun main(args: Array<String>): Unit = EngineMain.main(args)

fun Application.test() {
    routing {
        get("/") {
            call.respondText("Hello World!")
        }
    }
}
// main/resources/application.conf

ktor {
    deployment {
        port = 8080
    }
    application {
        modules = [ com.example.TestMainKt.test ]
    }
}

 

  • fun Application.test
    • 메서드 명칭은 임의로 설정했습니다. Ktor에서 제공하는 Application 클래스를 이용해서 메서드를 등록해서 사용하여 routing을 포함하도록 설정했습니다.
  • application.conf > modules = [ com.example.TestMainKt.test ]
    • 진입점(Entry Point)으로 사용할 모듈이자 메소드를 지정하는 부분입니다.
    • 모듈의 지정 방식에서 .kt 파일은 [파일명Kt] 이러한 방식으로 표현합니다. (추정)
  • 즉, TestMain.kt 파일의 test 메서드를 진입점으로 사용하도록 설정
  • application.conf 파일은 HOCON (Human-Optimized Config Object Notation) 표기법 또는 프로퍼티 표기법으로 작성합니다.
반응형

'Web' 카테고리의 다른 글

[Web] 성능테스트에 대하여(with K6)  (1) 2024.11.29
[Web] gRPC 사용해보기  (0) 2024.08.14
TDD와 BDD  (0) 2020.11.30