[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
  }
]

Leave a Comment