Categories: Camel프레임워크

[Camel in Action] 1-3. Camel 메시지 모델: Message와 Exchange 완전 이해

Camel의 데이터 흐름 모델

Apache Camel에서 모든 데이터는 Exchange 라는 컨테이너 안에 담겨 라우트를 통해 흐릅니다. Exchange를 이해하는 것은 Camel 개발의 핵심입니다.

Message – 실제 데이터 단위

Message는 Camel에서 실제로 전달되는 데이터 단위입니다. 세 가지 요소로 구성됩니다.

  • Body (본문): 실제 페이로드. String, byte[], InputStream, Java 객체 등 어떤 타입이든 가능합니다.
  • Headers (헤더): 메타데이터를 담는 Map<String, Object>. HTTP 헤더, JMS 속성 등이 여기에 담깁니다.
  • Attachments (첨부): MIME 멀티파트 첨부 파일 (이메일 등에서 사용)
// 메시지 조작 예시
.process(exchange -> {
    Message msg = exchange.getIn();
    String body = msg.getBody(String.class);
    msg.setHeader("processed", true);
    msg.setBody("처리된 데이터: " + body);
})

Exchange – 메시지를 담는 컨테이너

Exchange는 하나의 처리 단위로, 요청(In 메시지)과 응답(Out 메시지)을 함께 담습니다.

  • In Message: 입력 메시지. 라우트 전체에서 기본으로 접근하는 메시지입니다.
  • Out Message: 출력 메시지. Request-Reply 패턴에서 응답을 담습니다.
  • Exchange ID: 각 Exchange의 고유 식별자
  • Properties: Exchange 전체에 공유되는 Map. 라우트 실행 중 상태를 저장하는 데 사용됩니다.
  • Exception: 처리 중 발생한 예외가 저장됩니다.

Exchange Pattern (MEP)

Exchange는 두 가지 패턴을 지원합니다.

  • InOnly: 단방향 메시지. 응답이 필요 없는 이벤트 기반 통신. (예: JMS 큐에 메시지 전송)
  • InOut: 요청-응답 패턴. 응답이 필요한 경우. (예: HTTP REST 호출)
// Exchange Pattern 확인
.process(exchange -> {
    ExchangePattern pattern = exchange.getPattern();
    System.out.println("MEP: " + pattern); // InOnly 또는 InOut
})

Properties vs Headers – 언제 무엇을 쓰나?

헷갈리기 쉬운 Headers와 Properties의 차이점입니다.

  • Headers: 메시지와 함께 외부로 전달될 수 있는 메타데이터. 컴포넌트가 읽고 사용합니다.
  • Properties: Exchange 내부에서만 사용하는 데이터. 라우트의 상태나 컨텍스트 정보를 담습니다.
// Properties 활용 예시
.setProperty("startTime", simple("${date:now:yyyy-MM-dd HH:mm:ss}"))
.delay(1000)
.log("시작 시각: ${exchangeProperty.startTime}")

Body 타입 변환

Camel은 자동 타입 변환을 지원합니다. getBody(String.class)처럼 원하는 타입을 지정하면 자동으로 변환해줍니다.

// 자동 타입 변환
String text = exchange.getIn().getBody(String.class);
byte[] bytes = exchange.getIn().getBody(byte[].class);
InputStream is = exchange.getIn().getBody(InputStream.class);

다음 글에서는 Camel의 전체 아키텍처를 더 넓은 시각에서 살펴봅니다.

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 라우트에서 발생하는 문제를 디버깅하고 해결하는 실전 기법을 설명합니다. 로그 분석, 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