
Spring ViewComponent는 타입 안전하며 재사용 가능하고 캡슐화된 서버 렌더링 UI 컴포넌트를 생성할 수 있게 해줍니다.
##### 목차
ViewComponent란 무엇인가?
ViewComponent는 템플릿에 필요한 로직을 하나의 클래스로 통합하여, 이해하기 쉬운 응집력 있는 객체를 만듭니다. (출처: ViewComponent for Rails)
Spring ViewComponent는 템플릿의 컨텍스트를 정의하는 Spring Bean입니다:
Java
@ViewComponent
public class SimpleViewComponent { public record SimpleView(String helloWorld) implements ViewContext {
}
public SimpleView render() {
return new SimpleView("Hello World");
}
}
우리는 ViewContext 인터페이스를 구현하는 레코드를 생성하여 컨텍스트를 정의합니다
다음으로, 클래스에 @ViewComponent 어노테이션을 추가하고 SimpleView 레코드를 반환하는 메서드를 정의합니다
Kotlin
// SimpleViewComponent.kt
@ViewComponent
class SimpleViewComponent {
fun render() = SimpleView("Hello World") data class SimpleView(val helloWorld: String) : ViewContext
}
ViewComponent에는 항상 해당하는 HTML 템플릿이 필요합니다. 템플릿은 SimpleViewComponent.[html/jte/kte]에 정의하며, ViewComponent 클래스와 같은 패키지에 위치합니다.
Thymeleaf를 사용할 수 있습니다.
```html
// SimpleViewComponent.html
또는 JTE
html
// SimpleViewComponent.jte
@param de.tschuehly.example.jte.web.simple.SimpleViewComponent.SimpleView simpleView
또는 KTEhtml
@param simpleView: de.tschuehly.kteviewcomponentexample.web.simple.SimpleViewComponent.SimpleView
This is the SimpleViewComponent
뷰 컴포넌트 렌더링하기
컨트롤러에서 render 메서드를 호출하여 템플릿을 렌더링할 수 있습니다.
Java
java@Controller public class SimpleController {
private final SimpleViewComponent simpleViewComponent;
public TestController(SimpleViewComponent simpleViewComponent) { this.simpleViewComponent = simpleViewComponent; }
@GetMapping("/") ViewContext simple() { return simpleViewComponent.render(); } }
Kotlin
kotlin
// Router.kt
@Controller
class SimpleController(
private val simpleViewComponent: SimpleViewComponent,
) {@GetMapping("/") fun simpleComponent() = simpleViewComponent.render() }
예제
바로 시작하고 싶다면 모든 가능한 언어 조합에 대한 예제를 여기에서 찾을 수 있습니다:
예제
ViewComponents 중첩:
ViewContext를 레코드의 속성으로 전달하여 컴포넌트를 중첩할 수 있으며,
렌더 메서드의 매개변수로도 가지고 있다면 쉽게 레이아웃을 만들 수 있습니다:
Java
java@ViewComponent public class LayoutViewComponent {
private record LayoutView(ViewContext nestedViewComponent) implements ViewContext {
}
public ViewContext render(ViewContext nestedViewComponent) { return new LayoutView(nestedViewComponent); } }
코틀린
kotlin
@ViewComponent
class LayoutViewComponent {
data class LayoutView(val nestedViewComponent: ViewContext) : ViewContextfun render(nestedViewComponent: ViewContext) = LayoutView(nestedViewComponent)
}
타임리프
타임리프에서는 전달된 ViewComponent를 view:component="${viewContext}" 속성으로 렌더링합니다.
html
JTE / KTE
JTE/KTE에서는 표현식에서 LayoutView 레코드를 직접 호출할 수 있습니다:
html
@param layoutView: de.tschuehly.kteviewcomponentexample.web.layout.LayoutViewComponent.LayoutView
${layoutView.nestedViewComponent}
로컬 개발 구성
개발 중에 템플릿의 핫 리로딩을 활성화하려면 Spring Boot DevTools를 의존성으로 포함해야 합니다.
properties
spring.view-component.local-development=true
설치
타임리프:
Maven Central의 LATEST_VERSION
Gradle
kotlin
implementation("de.tschuehly:spring-view-component-thymeleaf:0.9.1")
sourceSets {
main {
resources {
srcDir("src/main/java")
exclude("/*.java")
}
}}
Maven
xml
JTE
Gradle
kotlin
plugins {
id("gg.jte.gradle") version("3.2.1")
}implementation("de.tschuehly:spring-view-component-jte:0.9.1")
jte{ generate() sourceDirectory.set(kotlin.io.path.Path("src/main/java")) }
Maven
xml
KTE
Gradle
kotlinplugins { id("gg.jte.gradle") version ("3.1.12") }
dependencies { implementation("de.tschuehly:spring-view-component-kte:0.9.1") }
jte { generate() sourceDirectory.set(kotlin.io.path.Path("src/main/kotlin")) } ```
기술 구현
Spring ViewComponent는 AspectJ Aspect를 사용하여 Spring MVC 컨테이너를 래핑하고 템플릿을 자동으로 해결하며 ViewContext를 ModelAndViewContainer에 넣습니다
--- Tranlated By Open Ai Tx | Last indexed: 2026-03-26 ---