Categories: Camel프레임워크

[Camel in Action] 14-1. Camel 운영 배포 – Spring Boot와 Docker 컨테이너화

Camel Spring Boot 프로젝트 시작하기

현재 가장 많이 사용하는 Camel 실행 방식은 Spring Boot입니다. Spring Boot의 자동 설정과 Camel의 강력한 통합 기능이 조합되면 최소한의 설정으로 프로덕션급 애플리케이션을 만들 수 있습니다.

Maven 의존성 설정

<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 자동 설정 활용

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);
  }
}

Dockerfile 작성

# 멀티 스테이지 빌드로 이미지 크기 최소화
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

헬스체크와 Graceful Shutdown

# 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의 롤링 업데이트 시 메시지 유실을 방지합니다.

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