Categories: Camel프레임워크

[Camel in Action] 17-1. Camel Quarkus로 네이티브 컴파일 – 초고속 시작과 저메모리

Camel Quarkus란?

Quarkus는 Kubernetes-native Java 프레임워크입니다. GraalVM 네이티브 이미지 컴파일을 통해 JVM 없이 실행 가능한 바이너리를 만들 수 있습니다. Camel Quarkus는 Apache Camel을 Quarkus 위에서 실행하도록 최적화한 프로젝트입니다.

기존 Spring Boot Camel vs Camel Quarkus

  • Spring Boot Camel: 시작 시간 3-10초, 메모리 200-500MB, JVM 필요
  • Camel Quarkus 네이티브: 시작 시간 0.05초, 메모리 30-80MB, JVM 불필요

서버리스 환경이나 대규모 마이크로서비스에서 콜드 스타트 시간과 메모리 비용이 크게 줄어듭니다.

Camel Quarkus 프로젝트 시작

# Maven으로 Camel Quarkus 프로젝트 생성
mvn io.quarkus.platform:quarkus-maven-plugin:create   -DprojectGroupId=com.example   -DprojectArtifactId=camel-quarkus-demo   -Dextensions="camel-quarkus-core,camel-quarkus-http,camel-quarkus-jackson"

# pom.xml 의존성
<dependency>
  <groupId>org.apache.camel.quarkus</groupId>
  <artifactId>camel-quarkus-core</artifactId>
</dependency>

라우트 작성 – Spring Boot와 거의 동일

@ApplicationScoped
public class MyRoutes extends RouteBuilder {
  @Override
  public void configure() throws Exception {
    from("timer:hello?period=5000")
      .setBody(simple("현재 시간: ${date:now:HH:mm:ss}"))
      .to("log:output");

    rest("/api")
      .get("/status")
        .produces("application/json")
      .to("direct:getStatus");

    from("direct:getStatus")
      .setBody(constant("{"status": "running"}"));
  }
}

네이티브 이미지 빌드

# JVM 모드로 실행 (개발 중)
./mvnw quarkus:dev

# 네이티브 이미지 빌드 (GraalVM 필요)
./mvnw package -Pnative

# 또는 Docker 컨테이너 빌드 (로컬에 GraalVM 없어도 됨)
./mvnw package -Pnative -Dquarkus.native.container-build=true

# 결과: target/camel-quarkus-demo-runner (실행 가능 바이너리)
./target/camel-quarkus-demo-runner

주의사항 – 네이티브 컴파일 제약

GraalVM 네이티브 이미지는 Java 리플렉션을 제한적으로 지원합니다. Camel Quarkus 익스텐션이 각 컴포넌트에 필요한 리플렉션 설정을 자동으로 처리해 줍니다. 하지만 커스텀 코드에서 리플렉션을 사용한다면 별도 설정이 필요합니다.

// resources/reflect-config.json
[
  {
    "name": "com.example.MyCustomClass",
    "allDeclaredMethods": true,
    "allDeclaredFields": true
  }
]

zerg96

Recent Posts

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

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

11시간 ago

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

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

11시간 ago

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

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

11시간 ago

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

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

11시간 ago

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

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

11시간 ago

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

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

11시간 ago