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

Camel 버전별 주요 변경사항 요약

Apache Camel은 활발하게 발전하고 있습니다. 2.x에서 3.x, 4.x로의 마이그레이션은 상당한 변경이 있지만 자동화 도구가 많은 작업을 해결해 줍니다.

Camel 2.x → 3.x 주요 변경

  • Java 8 기준선: 람다와 스트림 API 적극 활용
  • 모듈화: 하나의 거대한 JAR에서 컴포넌트별 개별 모듈로 분리
  • Spring Boot 2.x 지원: 자동 설정 대폭 개선
  • Reactive Camel: reactive streams 지원 추가
  • 제거된 컴포넌트: 사용률 낮은 컴포넌트 정리 (일부는 camel-extra로 이동)
// Camel 2.x
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() { ... });
context.start();

// Camel 3.x - Spring Boot 자동 설정 활용
@SpringBootApplication
public class App {} // CamelContext 자동 생성됨

Camel 3.x → 4.x 주요 변경

  • Java 17 기준선: Record, sealed class, text block 활용
  • jakarta.* 패키지: javax.* → jakarta.* (가장 큰 변화)
  • Spring Boot 3.x 지원
  • camel-main 개선: standalone 실행 강화
  • 성능 개선: 내부 데이터 구조 최적화

자동화 마이그레이션 도구 – OpenRewrite

# pom.xml에 OpenRewrite 플러그인 추가
<plugin>
  <groupId>org.openrewrite.maven</groupId>
  <artifactId>rewrite-maven-plugin</artifactId>
  <version>5.x.x</version>
  <configuration>
    <activeRecipes>
      <recipe>org.apache.camel.upgrade.camel40.CamelMigrationRecipe</recipe>
    </activeRecipes>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-upgrade-recipes</artifactId>
      <version>LATEST</version>
    </dependency>
  </dependencies>
</plugin>

# 실행
mvn rewrite:run

마이그레이션 단계별 전략

  1. 테스트 커버리지 확보: 마이그레이션 전 라우트 테스트를 최대한 작성
  2. 의존성 업데이트: BOM을 사용해 일괄 업데이트
  3. 컴파일 오류 수정: 제거된 API와 변경된 시그니처 수정
  4. 테스트 실행: 모든 camel-test 기반 테스트 통과 확인
  5. 통합 테스트: 실제 외부 시스템과 연동 확인
  6. 성능 비교: 마이그레이션 전후 처리량 측정

점진적 마이그레이션 전략

큰 시스템은 한 번에 마이그레이션하기 어렵습니다. 라우트 단위로 점진적으로 이전하는 전략을 사용합니다.

// 새 버전 Camel을 별도 모듈에서 실행
// 트래픽을 점진적으로 새 버전으로 이전
from("activemq:queue:orders")
  .choice()
    .when(header("X-Camel-Version").isEqualTo("4"))
      .to("http4://camel4-service/process") // 새 버전으로
    .otherwise()
      .to("bean:legacyCamelService")         // 기존 버전으로
  .end();

Leave a Comment