Categories: Camel프레임워크

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

Camel 라우트 디버깅의 어려움

Camel 라우트는 여러 컴포넌트와 외부 시스템을 넘나들어 실행됩니다. 일반적인 Java 디버거로는 메시지가 어느 단계에서 어떻게 변형됐는지 추적하기 어렵습니다. Camel이 제공하는 전용 디버깅 도구를 사용하면 훨씬 효과적입니다.

로그 컴포넌트로 단계별 추적

가장 단순하고 효과적인 방법은 각 처리 단계 사이에 log를 추가하는 것입니다.

from("direct:order")
  .log("1단계 수신: ${body}")
  .to("bean:validator")
  .log("2단계 검증 후: body=${body}, headers=${headers}")
  .process(exchange -> orderMapper.convert(exchange))
  .log(LoggingLevel.DEBUG, "com.example.OrderRoute", "3단계 변환 후: ${body}")
  .to("activemq:queue:orders");

로거 이름을 지정하면 application.properties에서 특정 라우트만 DEBUG 레벨로 설정할 수 있습니다.

Camel Tracer – 모든 단계 자동 기록

Tracer를 활성화하면 라우트의 모든 단계에서 Exchange 상태를 자동으로 기록합니다. 개발 환경에서 유용합니다.

// application.properties
camel.springboot.tracing=true
logging.level.org.apache.camel=TRACE

// 또는 코드에서
context.setTracing(true);

BacklogDebugger – IDE 연동 디버깅

Camel의 BacklogDebugger를 사용하면 IntelliJ나 Eclipse에서 라우트에 브레이크포인트를 걸 수 있습니다.

// BacklogDebugger 활성화
BacklogDebugger debugger = context.getCamelContextExtension()
  .getContextPlugin(BacklogDebugger.class);
debugger.enableDebugger();

// 특정 노드 ID에 브레이크포인트
debugger.addBreakpoint("myRoute-to1");

// 일시 정지된 Exchange 정보 조회
BacklogTracerEventMessage msg = debugger.dumpAsJaxb("myRoute-to1");

메시지 이력 추적 – Message History

// Message History 활성화
context.setMessageHistory(true);

// 처리 후 이력 확인
List<MessageHistory> history = exchange.getProperty(
  Exchange.MESSAGE_HISTORY, List.class);
for (MessageHistory h : history) {
  System.out.printf("%s -> %s (%dms)%n",
    h.getNode().getId(), h.getLabel(), h.getElapsed());
}

운영 환경 문제 진단 체크리스트

  • 라우트가 메시지를 처리하지 않을 때: JMX로 Consumer가 active인지 확인
  • 처리 속도가 느릴 때: MeanProcessingTime 메트릭 확인, 어느 단계가 느린지 파악
  • 메모리가 계속 증가할 때: Aggregator 완료 조건 확인, 스트리밍 처리 여부 확인
  • 메시지가 유실될 때: 트랜잭션 설정 확인, Dead Letter Queue 확인
  • 간헐적 오류가 발생할 때: 재시도 정책 확인, 외부 시스템 타임아웃 설정 확인

Camel CLI로 운영 중 진단

# Camel JBang으로 실행 중인 Camel 애플리케이션 진단
jbang camel@apache/camel ps        # 실행 중인 Camel 목록
jbang camel@apache/camel get route # 라우트 상태
jbang camel@apache/camel log       # 실시간 로그 스트리밍

zerg96

Share
Published by
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을 프로젝트에 도입하기 전 알아야 할 핵심 사항을 정리합니다. 학습 곡선, 도입 비용, 적합한…

11시간 ago

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

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

11시간 ago

[Camel in Action] 실전편 – Camel Saga와 분산 트랜잭션 패턴 총정리

Apache Camel의 Saga EIP로 분산 트랜잭션을 구현하는 완전한 가이드입니다. 보상 트랜잭션, 타임아웃 처리, Saga 상태…

11시간 ago