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