Kosmos Overview

Kosmos는 Java 기반 서버사이드 HTML DSL입니다. 타입 안정성과 높은 성능, 일관된 디자인 철학으로 웹 애플리케이션을 빠르고 견고하게 만듭니다.

핵심 가치

정확성

타입 안정 DSL과 컴포넌트화로 리팩터링 안전성 확보

El.a().css("btn btn-primary")
   .attr("href","/docs/kosmos/getting-started")
   .text("시작하기");

성능

내부 StringBuilder 최적화 → 메모리/CPU 사용량 최소화

참고: 템플릿 기반 대비 렌더링 오버헤드가 낮아 대량 리스트에서도 안정적입니다.

일관성

Atomic Design 기반 계층 구조: Template → Organism → Molecule → Atom

레벨 예시
Template DocsPageTemplate
Organism FragDocsNodeTree + FragDocsContent
Molecule CompSaveForm, UnsTable
Atom CompInputText, CompButton

서버 일원화

Spring MVC와 자연스럽게 결합하여 Controller → Service → Repository → DSL 흐름을 단일화

주의: 뷰 렌더 로직은 RenderContext로만 데이터·세션을 전달해 보안/일관성을 유지하세요.

코드 심화 예시

아래는 Kosmos DSL로 카드 리스트(기사 목록)를 렌더링하는 심화 예시입니다.

// Articles 리스트 렌더링
El.div().css("row").children(
  articles.stream().map(article ->
    El.div().css("col-md-4 mb-3").child(
      El.div().css("card h-100 shadow-sm").children(
        El.div().css("card-body").children(
          El.h3().css("h6").text(article.getTitle()),
          El.p().css("small text-muted").text(article.getSummary()),
          El.a().css("btn btn-sm btn-outline-primary")
               .href("/articles/" + article.getId())
               .text("더보기")
        )
      )
    )
  ).toList()
);

베스트 프랙티스

주제 권장 지양
컴포넌트화 반복되는 카드/폼/테이블을 Comp*로 추출 페이지마다 유사 HTML을 복붙
성능 StringBuilder 기반 렌더, 불필요 객체 생성 억제 빈번한 문자열 결합(+)로 GC 압박
접근성 의미 있는 태그, 라벨/aria 속성, 키보드 포커스 흐름 모양만 맞춘 <div> 남용
국제화(i18n) 문자열은 메시지 번들/리소스 키 사용 하드코딩 텍스트
보안 사용자 입력은 적절히 이스케이프/검증 raw HTML을 무검증으로 삽입

아키텍처 도식

Controller Service Repository Kosmos DSL El.*, Comp*, Frag* HTML SSR

Controller → Service → Repository → Kosmos DSL → SSR HTML

주의사항

성능: 대용량 렌더링은 가급적 for-loop 사용. 스트림/람다는 과도한 람다 캡처로 오버헤드가 생길 수 있습니다.
보안: 사용자 입력을 포함하는 텍스트는 반드시 이스케이프하거나 화이트리스트 기반으로 정제하세요.
구조: 재사용 가능한 블록은 Comp*, 페이지 용도 조합은 Frag*, 레이아웃은 Template로 분리하세요.
국제화: 하드코딩 텍스트 대신 메시지 번들을 사용하면 다국어 확장이 쉬워집니다.

다음으로