현재 가장 많이 사용하는 Camel 실행 방식은 Spring Boot입니다. Spring Boot의 자동 설정과 Camel의 강력한 통합 기능이 조합되면 최소한의 설정으로 프로덕션급 애플리케이션을 만들 수 있습니다.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot-bom</artifactId>
<version>4.3.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-activemq-starter</artifactId>
</dependency>
</dependencies> Spring Boot를 사용하면 RouteBuilder 빈을 만들기만 하면 자동으로 Camel 컨텍스트에 등록됩니다.
@Component
public class MyRoutes extends RouteBuilder {
@Override
public void configure() throws Exception {
from("timer:hello?period=5000")
.log("안녕하세요, ${date:now:HH:mm:ss}");
}
}
// 메인 클래스 - 별도 설정 없이 Camel이 자동 시작
@SpringBootApplication
public class CamelApp {
public static void main(String[] args) {
SpringApplication.run(CamelApp.class, args);
}
} # 멀티 스테이지 빌드로 이미지 크기 최소화
FROM eclipse-temurin:21-jdk-alpine AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package -DskipTests
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=builder /app/target/camel-app.jar app.jar
# 보안: 루트가 아닌 사용자로 실행
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"] Docker 컨테이너에서는 환경변수로 설정을 주입합니다.
# application.properties
spring.activemq.broker-url=${BROKER_URL:tcp://localhost:61616}
spring.datasource.url=${DB_URL:jdbc:h2:mem:testdb}
camel.springboot.main-run-controller=true
# docker run 시 환경변수 전달
docker run -e BROKER_URL=tcp://mq.prod.com:61616 -e DB_URL=jdbc:postgresql://db.prod.com/enterprise my-camel-app:latest # application.properties
# Spring Boot Actuator 헬스체크 활성화
management.endpoints.web.exposure.include=health,info,camel
management.endpoint.health.show-details=always
# Graceful Shutdown 설정
server.shutdown=graceful
spring.lifecycle.timeout-per-shutdown-phase=30s Graceful Shutdown을 설정하면 종료 신호를 받았을 때 현재 처리 중인 메시지를 완료한 후 종료합니다. Kubernetes의 롤링 업데이트 시 메시지 유실을 방지합니다.
2025년 Apache Camel의 최신 트렌드를 분석합니다. AI/LLM 통합 컴포넌트, 서버리스 배포, Camel K 진화, WebAssembly…
Camel in Action을 완독한 후 Apache Camel의 전체 그림을 다시 정리합니다. 핵심 철학, 학습 경로,…
Apache Camel 2.x에서 3.x, 4.x로 마이그레이션하는 단계별 가이드입니다. 주요 API 변경사항, 제거된 컴포넌트, 자동화 도구…
Apache Camel 라우트에서 발생하는 문제를 디버깅하고 해결하는 실전 기법을 설명합니다. 로그 분석, breakpoint 디버깅, Tracer,…
Apache Camel을 프로젝트에 도입하기 전 알아야 할 핵심 사항을 정리합니다. 학습 곡선, 도입 비용, 적합한…
엔터프라이즈 통합 패턴(EIP) 20가지를 Apache Camel 코드와 함께 한 번에 정리합니다. 메시징 채널, 메시지 라우팅,…