Kosmos Spring 0.2.0 — Spring Boot에서 Kosmos DSL로 페이지 만들기
UNeedSoft “유니드소프트-모두를 위한 소프트웨어” 비전 아래 공개 배포되는 kosmos-spring-0.2.0.jar로 RenderContext 자동 주입 기반의 첫 페이지를 실행하는 방법을 안내합니다.
이 가이드를 끝까지 따라하면
kosmos-dsl-0.2.0.jar+kosmos-spring-0.2.0.jar을 프로젝트에 추가하고- RenderContext를 컨트롤러 파라미터로 자동 주입받아
http://localhost:8080/에서 “Kosmos + Spring Boot” 첫 화면을 확인할 수 있습니다.
중요(초보자 오류 방지)
kosmos-spring의
RenderContextResolver는 내부에서 CsrfToken을 참조합니다. 따라서 초보자 가이드 기준으로는 Spring Security 의존성이 반드시 필요합니다. (의존성이 없으면 NoClassDefFoundError: CsrfToken가 발생할 수 있습니다.)0) 준비물(필수)
- Java 17 설치(권장)
- Spring Boot 3.x 기반 웹 프로젝트(아래 단계에서 생성)
- 첨부 파일 2개:
kosmos-dsl-0.2.0.jarkosmos-spring-0.2.0.jar
1) 프로젝트 생성 (IntelliJ Community 또는 VS Code)
A. IntelliJ IDEA Community
- File > New > Project
- Generators > Spring Boot 선택
- Name:
kosmos-spring-lec01 - Language: Java
- Type: Gradle-Groovy (Gradle-Kotlin도 가능)
- Group/Artifact: 예)
com.example/kosmos-spring-lec01 - Java: 17
- Packaging: Jar (추천)
- Name:
- Dependencies(의존성): Spring Web 선택
- 생성 후 실행 버튼(▶)으로 기본 앱이 실행되는지 먼저 확인
B. VS Code
- 확장 설치: Extension Pack for Java, Spring Boot Extension Pack
Ctrl+Shift+P→ Spring Initializr: Create a Gradle Project- Java 17 / Boot 3.x / Dependencies: Spring Web 선택
- 폴더 생성 후 열기
2) JAR 추가 (가장 쉬운 방식: libs/ 폴더)
(권장) Gradle 프로젝트 기준. 프로젝트 루트에 libs/ 폴더를 만들고 JAR을 복사한 뒤 의존성을 추가합니다.
- 프로젝트 루트에 폴더 생성:
libs/ libs/안에 첨부 파일 복사:libs/kosmos-dsl-0.2.0.jarlibs/kosmos-spring-0.2.0.jar
- Gradle 의존성 추가 (아래 코드 중 하나 선택)
build.gradle (Groovy)
dependencies {
implementation files("libs/kosmos-dsl-0.2.0.jar")
implementation files("libs/kosmos-spring-0.2.0.jar")
implementation "org.springframework.boot:spring-boot-starter-web"
implementation "org.springframework.boot:spring-boot-starter-security" // 필수(초보자 오류 방지)
}
build.gradle.kts (Kotlin)
dependencies {
implementation(files("libs/kosmos-dsl-0.2.0.jar"))
implementation(files("libs/kosmos-spring-0.2.0.jar"))
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-security") // 필수(초보자 오류 방지)
}
Gradle Sync(동기화)를 실행합니다.
3) KosmosWebMvcConfig 작성 (Resolver 빈 생성 + 자동 주입 등록)
이 단계는 두 가지를 한 번에 처리합니다. (1) RenderContextResolver 빈 생성(@Bean), (2) 컨트롤러 파라미터 자동 주입을 위해 ArgumentResolver 등록(WebMvcConfigurer).
파일 생성:
src/main/java/.../config/KosmosWebMvcConfig.javapackage com.example.demo.config;
import net.uneedsoft.kosmos.spring.web.config.RenderContextResolver;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@Configuration
public class KosmosWebMvcConfig implements WebMvcConfigurer {
private final RenderContextResolver resolver;
public KosmosWebMvcConfig(RenderContextResolver resolver) {
this.resolver = resolver;
}
// RenderContextResolver는 kosmos-spring 라이브러리에 포함되어 있으므로 "작성"하지 않습니다.
// 여기서는 프로젝트에서 Bean으로 생성만 해줍니다.
@Bean
public RenderContextResolver renderContextResolver(@Lazy MessageSource messageSource) {
return new RenderContextResolver(messageSource);
}
// 컨트롤러 파라미터(RenderContext) 자동 주입을 위해 ArgumentResolver 등록
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(resolver);
}
}
4) SecurityConfig 작성 (초보자용: permitAll)
spring-boot-starter-security를 추가하면 기본 보안 정책 때문에 로그인 화면/차단이 발생할 수 있습니다. 초보자 단계에서는 아래처럼 전체 요청 허용으로 시작하는 것이 가장 안전합니다.
파일 생성:
src/main/java/.../config/SecurityConfig.javapackage com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(auth -> auth.anyRequest().permitAll())
// 초보자 단계에서는 GET 위주로 먼저 확인하므로 기본 CSRF를 유지해도 됩니다.
// 폼/POST까지 진행하면서 막히면 그때 csrf.disable()을 안내하는 방식이 깔끔합니다.
.build();
}
}
5) Kosmos DSL 페이지 작성 (HomePage)
이제 실제로 Kosmos DSL로 HTML을 렌더링하는 페이지 클래스를 만들어 봅니다.
파일 생성:
src/main/java/.../pages/HomePage.javapackage com.example.demo.pages;
import net.uneedsoft.kosmos.dsl.core.base.HtmlComponent;
import net.uneedsoft.kosmos.dsl.core.context.RenderContext;
import net.uneedsoft.kosmos.dsl.factory.El;
public class HomePage implements HtmlComponent {
@Override
public String render(RenderContext ctx) {
return El.div().css("container py-5")
.children(
El.h1().text("Kosmos + Spring Boot"),
El.p().text("kosmos-spring 0.2.0 설정이 완료되었습니다."),
El.p().css("text-muted mb-0")
.text("RenderContext가 컨트롤러 파라미터로 자동 주입됩니다.")
)
.render(ctx);
}
}
6) 컨트롤러에서 RenderContext 자동 주입 사용
핵심 포인트는 컨트롤러 메서드 파라미터에 RenderContext ctx를 선언하는 것입니다. 이제부터는 매번 RenderContext.builder(...)를 직접 만들지 않아도 됩니다.
파일 생성:
src/main/java/.../HomeController.javapackage com.example.demo;
import com.example.demo.pages.HomePage;
import net.uneedsoft.kosmos.dsl.core.context.RenderContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@GetMapping("/")
public String home(RenderContext ctx) { // 자동 주입
return new HomePage().render(ctx);
}
}
7) 실행 후 브라우저 접속
- 앱 실행(▶) 또는 Gradle 실행 후
http://localhost:8080/접속- “Kosmos + Spring Boot” 화면이 보이면 성공
8) 초보자 체크 포인트
- 메시지(i18n)를 쓰고 싶다 →
ctx.getMessage("key", "fallback") - 로그인/권한 분기 →
ctx.isAuthenticated(),ctx.hasRole("ROLE_ADMIN") - CSRF 토큰 →
ctx.getOrDefault("_csrf.token","") - request 객체 →
ctx.get("request")
9) 다음 확장(선택)
- 레이아웃(헤더/푸터) 컴포넌트화
- Section 토큰(
uns-section--lg) 기반 페이지 표준화 - 정적 리소스(css/js) 구성 및 JSON 기반 콘텐츠 구조화
UNeedSoft는 “모두를 위한 소프트웨어” 비전 아래, 누구나 Kosmos 기반 웹 개발을 시작할 수 있도록 지속적으로 가이드를 공개합니다.