Categories: Camel프레임워크

[Camel in Action] 17-2. Camel DSL 확장 – YAML DSL과 Groovy DSL 활용

다양한 DSL이 필요한 이유

Java DSL은 강력하지만 개발자가 아닌 사람이 이해하기 어렵습니다. YAML DSL은 비개발자도 읽을 수 있는 선언적 형식으로 라우트를 정의합니다. Groovy DSL은 스크립트 언어의 유연성을 활용해 동적 라우트를 간편하게 만들 수 있습니다.

YAML DSL – 선언적 라우트 정의

Camel 3.14부터 YAML DSL이 공식 지원됩니다. Java 코드 없이 YAML 파일만으로 완전한 라우트를 정의할 수 있습니다.

# routes.yaml
- route:
    id: hello-route
    from:
      uri: timer:hello
      parameters:
        period: 5000
    steps:
      - setBody:
          simple: "안녕하세요, ${date:now:HH:mm:ss}"
      - log:
          message: "${body}"

- route:
    id: http-route
    from:
      uri: rest:get:api/users
    steps:
      - to:
          uri: sql:SELECT * FROM users
      - marshal:
          json:
            library: Jackson

Camel K에서 YAML DSL 사용

Camel K 환경에서는 YAML 파일을 직접 Kubernetes에 배포합니다.

# kamel CLI로 YAML 라우트 배포
kamel run routes.yaml

# 실시간 수정 및 반영
kamel run routes.yaml --dev

Groovy DSL – 동적 라우트

Groovy는 간결한 문법과 동적 타입으로 복잡한 변환 로직을 짧게 표현할 수 있습니다.

// Groovy 스크립트로 변환 처리
from("direct:transform")
  .process { exchange ->
    def body = exchange.in.body
    def result = body.split(",").collect { it.trim().toUpperCase() }.join("|")
    exchange.in.body = result
  }
  .to("log:result");

동적 라우트 생성 – 런타임 라우트 추가

설정 데이터베이스에서 라우트 정의를 읽어 런타임에 동적으로 라우트를 추가하는 패턴입니다.

// DB에서 라우트 설정 읽어 동적 생성
List<RouteConfig> configs = routeConfigRepository.findAll();
for (RouteConfig config : configs) {
  context.addRoutes(new RouteBuilder() {
    @Override
    public void configure() throws Exception {
      from(config.getFrom())
        .routeId(config.getId())
        .to(config.getTo());
    }
  });
}

Mustache와 Freemarker 템플릿 DSL

메시지 내용을 동적으로 생성할 때 템플릿 언어를 DSL처럼 사용합니다.

// Freemarker 템플릿으로 이메일 본문 생성
from("direct:sendEmail")
  .to("freemarker:email-template.ftl")
  .to("smtp://mail.example.com?to=${header.emailTo}");
# email-template.ftl
안녕하세요, ${body.name}님!

주문 번호 ${body.orderId}가 접수되었습니다.
총 금액: ${body.amount}원

감사합니다.

zerg96

Share
Published by
zerg96

Recent Posts

[Apache Camel] 2025년 최신 트렌드 – AI 통합과 서버리스 Camel의 미래

2025년 Apache Camel의 최신 트렌드를 분석합니다. AI/LLM 통합 컴포넌트, 서버리스 배포, Camel K 진화, WebAssembly…

9시간 ago

[Camel in Action] 완결편 – Apache Camel 전체 여정 회고와 다음 단계

Camel in Action을 완독한 후 Apache Camel의 전체 그림을 다시 정리합니다. 핵심 철학, 학습 경로,…

9시간 ago

[Camel in Action] 실전편 – Camel 마이그레이션 가이드 2.x에서 4.x까지

Apache Camel 2.x에서 3.x, 4.x로 마이그레이션하는 단계별 가이드입니다. 주요 API 변경사항, 제거된 컴포넌트, 자동화 도구…

9시간 ago

[Camel in Action] 실전편 – Camel 라우트 디버깅 기법과 문제 해결 가이드

Apache Camel 라우트에서 발생하는 문제를 디버깅하고 해결하는 실전 기법을 설명합니다. 로그 분석, breakpoint 디버깅, Tracer,…

9시간 ago

[Camel in Action] 실전편 – Camel 도입 전 반드시 알아야 할 것들

Apache Camel을 프로젝트에 도입하기 전 알아야 할 핵심 사항을 정리합니다. 학습 곡선, 도입 비용, 적합한…

9시간 ago

[Camel in Action] 실전편 – Enterprise Integration Patterns 20가지 핵심 정리

엔터프라이즈 통합 패턴(EIP) 20가지를 Apache Camel 코드와 함께 한 번에 정리합니다. 메시징 채널, 메시지 라우팅,…

9시간 ago