Server Plugin
FreeMarker
필수 의존성: io.ktor:ktor-server-freemarker
코드 예제: freemarker
네이티브 서버 지원: ✖️ Ktor는 Kotlin/Native를 지원하며 추가 런타임이나 가상 머신 없이 서버를 실행할 수 있게 해줍니다.
Ktor에서는 FreeMarker 플러그인을 설치하여 애플리케이션 내에서 FreeMarker 템플릿을 뷰(view)로 사용할 수 있습니다.
의존성 추가
FreeMarker을 사용하려면 빌드 스크립트에 ktor-server-freemarker 아티팩트를 포함해야 합니다:
Kotlin
Groovy
XML
FreeMarker 설치
애플리케이션에 FreeMarker 플러그인을 설치하려면, 지정된
모듈
의 모듈을 사용하면 라우트를 그룹화하여 애플리케이션을 구조화할 수 있습니다.
install 함수에 해당 플러그인을 전달하세요. 아래 코드 스니펫은 FreeMarker을 설치하는 방법을 보여줍니다... - ...
embeddedServer함수 호출 내부에서 설치하는 방법. - ...
Application클래스의 확장 함수인 명시적으로 정의된module내부에서 설치하는 방법.
kotlin
kotlin
install 블록 내부에서 FreeMarker 템플릿을 로드하기 위한 원하는 TemplateLoader를 구성할 수 있습니다.
FreeMarker 구성
템플릿 로딩 구성
템플릿을 로드하려면 templateLoader 속성에 원하는 TemplateLoader 유형을 할당해야 합니다. 예를 들어, 아래의 코드 스니펫은 Ktor가 현재 클래스패스(classpath)를 기준으로 templates 패키지에서 템플릿을 찾을 수 있도록 설정합니다:
kotlin
import freemarker.cache.*
import io.ktor.server.application.*
import io.ktor.server.freemarker.*
fun Application.module() {
install(FreeMarker) {
templateLoader = ClassTemplateLoader(this::class.java.classLoader, "templates")
}
}응답으로 템플릿 보내기
resources/templates 경로에 index.ftl 템플릿이 있다고 가정해 보겠습니다:
html
<html>
<body>
<h1>Hello, ${user.name}!</h1>
</body>
</html>사용자를 위한 데이터 모델은 다음과 같습니다:
kotlin
data class User(val id: Int, val name: String)지정된 라우트(route)에 템플릿을 사용하려면 다음과 같이 call.respond 메서드에 FreeMarkerContent를 전달하세요:
kotlin
get("/index") {
val sampleUser = User(1, "John")
call.respond(FreeMarkerContent("index.ftl", mapOf("user" to sampleUser)))
}