Top

아파치 Camel 따라잡기 [다재다능한 EIP기반 오픈소스 통합 프레임워크]

  • 원서명Apache Camel Developer's Cookbook (ISBN 9781782170303)
  • 지은이스콧 크랜튼(Scott Cranton), 야쿱 코랍(Jakub Korab)
  • 옮긴이전재홍
  • ISBN : 9788960776739
  • 40,000원
  • 2015년 04월 20일 펴냄
  • 페이퍼백 | 500쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 오픈소스 프로그래밍

책 소개

요약

아파치 카멜은 기업 통합 패턴(Enterprise Integration Patterns)을 자바로 구현하게 하는 훌륭한 도구다. 카멜을 통해 일반적인 통합 작업을 쉽게 가능하게 하며, 상황이 요구 할 때에는 개발자가 프레임워크를 커스터마이징하는 수단을 제공한다. 이 책은 아파치 카멜을 이미 조금은 알고 있고 실제적이고 증명된 팁을 빨리 찾길 원하는 개발자들을 위해 예제 형식으로 구성되었다. 각 예제에는 카멜의 더 깊은 기능을 이해하기 위한 참조 링크와 문서도 포함했다.

이 책에서 다루는 내용

■ 카멜 프로젝트를 구성하는 방법
■ 공통적인 엔터프라이즈 통합 패턴 사용 이해
■ 사용자 메시지 전환
■ 카멜 내장 테스트 프레임워크 사용
■ 기존 코드와 더 잘 동작하도록 카멜 확장
■ 에러 처리 정책 학습
■ 카멜의 병렬 처리와 스레딩 기능 사용
■ 카멜 통합 루트 보안
■ 카멜에서 ACID 트랜잭션 처리 이해

이 책의 대상 독자

이 책은 아파치 카멜에 조금 익숙하고 공통적인 작업들을 수행하는 방법에 대해 실제적이고 증명된 팁들을 빨리 찾아보기를 원하는 개발자들을 위해 쓰여졌다.

이 책의 구성

1장, ‘루트 구성’에서는 카멜 구성의 기본적인 사항을 소개한다. 자바와 스프링 애플리케이션에서 실행되는 프레임워크를 만들고, 카멜 컴포넌트를 사용하고, 라우팅 로직을 분리하고 재사용한다.

2장, ‘메시지 라우팅’에서는 카멜에서 메시지를 라우트하기 위해 사용되는 주요 EIP 사용법을 설명한다. if-else 스타일 내용 기반 라우팅부터 좀 더 복잡하고 동적인 옵션까지 모두 살펴본다.

3장, ‘사용자 코드로 라우팅’에서는 직접 작성한 자바 코드에서부터 카멜 런타임과 어떻게 상호작용하는지와 카멜 루트 내에서 자바 코드가 어떻게 사용되는지 설명한다.

4장, ‘전환’은 자바 객체, XML, JSON, CSV 같은 일반적인 메시지 형식을 다루고, 그 형식 간 변환을 위해 바로 사용 가능한 정책을 제시한다.

5장, ‘분리하기와 합치기’에서는 관련된 Splitter와 Aggregator 패턴을 깊이 있게 살펴본다.

6장, ‘병렬 처리’에서는 스레드풀, 프로파일, 비동기 프로세서를 사용해 처리를 확장하기 위해 카멜이 지원하는 것을 개략적으로 살펴본다.

7장, ‘에러 처리와 보상’에서는 이미 완료된 비트랜잭션 작업을 위한 보상 라우팅 단계를 시작하는 기능을 포함해, 오류를 다루기 위해 카멜 DSL이 제공하는 메커니즘을 설명한다.

8장, ‘트랜잭션과 멱등성’은 트랜잭션 리소스(JDBC와 JMS)를 다루기 위한 몇 가지 방법을 보여준다. 메시지 재실행(replay) 또는 복제 이벤트 시 오직 한 번만 불리게 되는 방법으로 비트랜잭션(웹 서비스 같은) 리소스를 다루는 내용도 설명한다.

9장, ‘테스팅’은 백엔드 시스템을 필요로 하지 않으면서 사용자 루트의 행위를 검증하기 위해 카멜의 테스트 지원을 설명한다. 또한 런타임 시 사용되는 코드를 수정하지 않고, 테스팅 목적으로 부가적인 단계를 거쳐 루트를 변경하는 법을 보여준다.

10장, ‘모니터링과 디버깅’은 로깅, 추적, 디버깅에 대한 카멜의 지원을 설명한다. 개발자가 직접 속성과 동작을 정의할 수 있는 기능을 포함하는 카멜의 JMX 지원으로 모니터링을 시험한다.

11장, ‘보안’은 시스템 간 암호화 통신, 민감한 설정 정보 숨기기, 인증서를 사용한 부인 방지, 루트에 인증과 권한부여를 적용하는 것을 다룬다.

12장, ‘웹 서비스’에서는 카멜을 사용해 백엔드와 프록시 SOAP처럼 행동하는 웹 서비스를 호출하는 방법을 살펴본다.

저자/역자 소개

저자 서문

아파치 카멜은 시스템 통합(system integrations)을 위한 자바 프레임워크다.

왜 이런 프레임워크가 필요한가라고 질문할 수 있겠다. 시스템 통합은 많은 부분이 해결된 주제다. 우리는 다양한 프론트엔드를 오래전부터 웹 서비스, 메시지 브로커, 데이터베이스에 어떻게든 연동해왔다. 확실히 시스템 통합은 추상화를 필요로 하지 않는, 잘 알려진 영역이다. 하지만 꼭 그렇지도 않다.

스프링 프레임워크가 2003년 이후 자바 EE 시장의 판도를 뒤바꿔 놓았던 것처럼, 아파치 카멜은 2007년에 출시된 이후로 시스템 통합 시장의 균형을 흔들어왔다. 카멜은 훨씬 간결하고 쉬운 코드를 생산하는 시스템 통합을 생각하고 행하는 새로운 길을 가능케 하고, 더 적은 노력으로 오류를 줄이고 유지보수를 손쉽게 만들었다. 활발히 움직이는 대규모 아파치 카멜 커뮤니티와 카멜에 기반한 상용 통합 제품의 수가 얼마나 늘었는지, 그리고 미들웨어 개발자 컨퍼런스에서 회자되는 카멜에 대한 논의가 얼마나 많아졌는지 등이 카멜에 대한 호평을 입증할 수 있는 근거가 될 것이다. 이 책은 카멜을 이미 좀 알고 있고, 통합에 관한 복잡한 문제를 풀기 위해 카멜이 어떻게 더 도움이 될지 팁을 찾는 독자들을 대상으로 한다. 이 책은 일반적인 통합 작업을 해결하기 위해 카멜을 사용하는 단계별 설명이 포함된 100개가 넘는 예제가 담겨 있다. 각 예제에서는 카멜이 내부적으로 어떤 작업을 수행하는지를 간단히 설명하고, 심도 있는 학습을 원하는 사람들을 위한 추가 정보 등을 알려줄 것이다.

이 책은 카멜을 처음 시작하는 사람에게는 적합하지 않을 수도 있다. 하지만 다른 통합 기술에 벌써 익숙해 있고, 사용하면서 배우길 원한다면 이 책의 예제들에서 도움을 받을 수 있을 것이다. 따라서 여기서는 카멜의 개념에 대해서 깊은 설명을 하지는 않을 것이다.

많은 예제 코드와 함께 카멜의 개념적인 내용을 더 원하는 독자는, 클라우스 입센(Claus Ibsen)과 조나단 앤스티(Jonathan Anstey)가 저술한 매닝(Manning) 출판사의 『Camel in Action』을 읽어보길 권한다. 한 권 더 소개하자면, 팩트 출판사에서 발간된 빌긴 이브라이엄(Bilgin Ibryam)의 『Instant Apache Camel Message Routing』(2013)을 보라. 카멜 공식 웹사이트(http://camel.apache.org)도 카멜을 사용하는 데 있어서 도움이 되는 글과 문서 리스트를 많이 다룬다.

저자 소개

스콧 크랜튼(Scott Cranton)

오픈소스 소프트웨어 컨트리뷰터이자 에반젤리스트다. 거의 5년 전 1.5 버전부터 아파치 카멜로 작업을 해왔으며 그리고 미들웨어 개발자, 아키텍트, 컨설턴트로 20년이 넘게 활동해왔다. 퓨즈소스(FuseSource)에서, 그리고 지금 레드햇에 있는 동안 아파치 카멜, ActiveMQ, ServieMix, Karaf, CXF의 핵심 커미터들과 가깝게 일해왔다. 또한 카멜을 비롯한 오픈소스 프로젝트를 사용해 많은 회사가 대용량의 복잡한 통합과 메시징 시스템을 성공적으로 만들고 적용하는 것을 도왔다. 코드를 파고들고, 카멜과 오픈소스에 관한 웨비나(webinar)에서 발표를 하고, 통합 문제들을 해결하기 위해 카멜을 사용하는 법을 가르치는 데 시간을 보낸다.

야쿱 코랍(Jakub Korab)

통합과 메시징을 전공한 컨설팅 소프트웨어 엔지니어다. 소프트웨어 공학과 분산 시스템 분야 경력이 있으며 14년 동안 텔레콤, 금융 서비스, 뱅킹 산업의 소프트웨어 분야에서 일해왔다. 웹 개발 일을 하다가 자연스레 시스템 통합으로 옮겼다. 아파치 카멜을 처음 알게 됐을 때, 직접 통합 코드를 작성하는 것과 비교해 얼마나 많은 시간과 노력을 절약할 수 있는지에 대한 확신이 들었다. 그러고 나서는 아파치 카멜에만 매진해 왔다. 지난 몇 년간 컨설턴트로서 많은 클라이언트를 도와서 확장 가능하고 오류로 정지하지 않으면서도 성능이 높은 시스템 통합에 관한 일을 진행해왔다. 현재는 자신의 전문 컨설턴트 사인 아멜리언트(Ameliant)를 운영하며 아파치의 통합 제품들을 가지고 시스템통합과 메시징을 하는 일에 집중하고 있으며 카멜은 그 주춧돌 역할을 한다.

옮긴이의 말

2003년에 그레거 호프와 바비 울프의 공동 저작으로 『기업 통합 패턴(Enterprise Integration Patterns)』이 출간되었다(최근 에이콘출판사에서 번역본이 나왔다.) 에디슨웨슬리 출판사의 마틴 파울러 시리즈의 하나인 이 책은 기업용 애플리케이션의 통합과 메시지 기반 미들웨어를 사용하는 다수의 설계 패턴에 대해 설명한다.

아파치 카멜은 이런 기업 통합 패턴의 구현체다. 동일한 목적으로 스프링 인티그레이션(Spring Integration)이나 뮬 ESB(Mule ESB) 같은 프레임워크가 있으나 카멜이 사실상 표준이라고 할 수 있을 정도로 많이 사용되고 있고 이미 성숙도가 높다.

기업용 애플리케이션 통합을 위해서 기업 통합 패턴, 즉 카멜을 사용한다는 것은 비동기 메시지 기반 아키텍처를 도입한다는 것을 뜻한다. 이것은 고성능의 대용량 분산시스템 구축과 통합을 위한 최선의 방법이며, 최근에는 일반 웹 어플리케이션에서도 성능과 확장성을 위해 비동기 메시징을 사용하는 경우가 많다.

카멜을 사용하면 많은 문제에 대해서는 이미 만들어져있는 컴포넌트 등을 조합해 XML 설정이나 간단한 코드로도 원하는 통합이 가능하고, 새로운 문제에 대해서는 직접 컴포넌트를 제작할 수 있다. 그리고 많이들 사용하고 있는 스프링 프레임워크와의 통합도 아주 쉽기 때문에 어렵지 않게 접근할 수 있다.

이 책은 카멜이나 기업 통합 패턴을 설명하기보다는 같이 실행해보면서 배우는 책이다. 카멜에 대해서 들어는 봤지만 실제로 아직 실행해보지 않았거나, 사용하고 있지만 다른 패턴들을 배우거나 참고하고자 하는 개발자들에게 많은 도움이 될 것이다.

이 책은 각 패턴의 개념을 깊게 설명하지 않는다. 요리책같이 실무에서 마주칠 수 있는 문제에 대해 여러 해결 방법 중 하나의 예제를 제시할 뿐이다. 각 예제에는 문제가 있고 그 문제와 해결 방법에 대해 설명하고 있지만, 그것만으로는 부족할 수 있다. 예제 코드를 다운로드하여 실행해보고 조금씩 고쳐서 다시 실행하는 것을 반복한다면 책이 전달하고자 하는 지식을 자기 자신의 것으로 만들 수 있을 것이다.

옮긴이 소개

전재홍

한화S&C R&D팀에서 모바일 플랫폼을 개발하고 있다. 빅데이터, 인메모리 기반 처리, 소프트웨어 아키텍처 등에 관심이 많으며, 한국 JBoss User Group 커뮤니티에서 활동하고 있다.

목차

목차
  • 1장 루트 구성
    • 소개
    • 자바 애플리케이션에서 카멜 사용하기
    • 스프링 애플리케이션에 카멜 내장하기
    • 카멜 컴포넌트 사용하기
    • 루트를 연결해 라우팅 로직 재사용하기
    • 비동기적으로 루트 연결하기
    • 단일 자바 프로세스에서 복수의 카멜 컨텍스트 사용하기
    • 카멜 루트에서 외부 속성 사용하기
    • 엔드포인트 재사용하기
    • 루트 템플릿으로 라우팅 로직 재사용하기
    • 루트 시작과 종료 제어하기

  • 2장 메시지 라우팅
    • 소개
    • 내용 기반 라우팅
    • 원치않는 메시지 제외하기
    • 와이어탭: 메시지 복제본을 다른 곳으로 보내기
    • 멀티캐스트: 동일한 메시지를 여러 엔드포인트로 라우팅하기
    • 수신자 목록: 메시지를 여러 개의 엔드포인트로 라우팅하기
    • 조절기: 엔드포인트로 흐르는 메시지 개수 제한하기
    • 단방향 메시지를 보내는 요청-응답 루트
    • 요청-응답 엔드포인트를 기다리는 단방향 루트
    • 동적 라우팅: 실행 중에 라우팅 결정하기
    • 여러 엔드포인트로 부하 분산하기
    • 라우팅 슬립: 메시지를 고정된 여러 개의 엔드포인트로 라우팅하기

  • 3장 사용자 코드로 라우팅
    • 소개
    • 메시지를 직접 자바 메소드로 라우팅하기
    • 메시지를 직접 카멜 엔드포인트로 라우팅하기
    • 조건서술로 자바 메소드 사용하기
    • 커스텀 카멜 프로세서 작성하기
    • 메시지를 메소드 파라미터에 매핑하기
    • 커스텀 데이터 마샬러 작성하기
    • 커스텀 데이터 타입 변환기 작성하기

  • 4장 전환
    • 소개
    • 단순 표현식을 사용해 전환하기
    • 인라인에서 XQuery를 이용해 전환하기
    • XSLT를 이용해 전환하기
    • JAXB를 이용해 자바에서 XML로 전환하기
    • 자바에서 JSON으로 전환하기
    • XML에서 JSON으로 전환하기
    • 콤마로 구분된 값(CSV) 분석하기
    • 다른 엔드포인트의 도움을 받아 내용 전환하기
    • 공통 XML 형식으로 메시지 표준화하기

  • 5장 분리하기와 합치기
    • 소개
    • 메시지를 조각으로 분리하기
    • XML 메시지 분리하기
    • 분리된 메시지를 병렬로 처리하기
    • 관련 메시지 합치기
    • 타임아웃을 이용해 합치기
    • 일정 간격으로 합치기
    • 합친 메시지를 병렬로 처리하기
    • 메시지를 분리, 처리하고 응답 합치기
    • 메시지를 분리하고 다른 기준으로 다시 합치기

  • 6장 병렬 처리
    • 소개
    • 여러 개의 엔드포인트 컨슈머로 메시지 소비 향상하기
    • 스레드를 사용해 루트에서 부하 분산하기
    • 요청을 비동기적으로 라우팅하기
    • 커스텀 스레드 풀 사용하기
    • 스레드 풀 프로파일 사용하기
    • 비동기 API 사용해 작업하기

  • 7장 에러 처리와 보상
    • 소개
    • 에러 로깅하기
    • 발송 불가 채널: 추후에 에러 처리하기
    • 동작 재시도 하기
    • 조건적 재시도하기
    • 각각의 재배달 시도를 커스터마이징하기
    • 예외 잡기
    • 예외 처리 상태로 표시하기
    • doTry...doCatch를 사용해 에러를 세밀하게 처리하기
    • 액션 완료 정의하기
    • 액션 완료를 동적으로 정의하기

  • 8장 트랜잭션과 멱등성
    • 소개
    • 라우팅 로직의 중복 실행 방지하기
    • 트랜잭션을 사용한 파일 소비
    • 데이터베이스에 트랜잭션 사용하기
    • 트랜잭션 범위 제한하기
    • 트랜잭션 롤백하기
    • 메시징에 트랜잭션 사용하기
    • 트랜잭션 내의 멱등성
    • 복수 트랙잭션 자원에 XA 트랜잭션 설정하기

  • 9장 테스팅
    • 소개
    • 자바로 정의한 루트 테스트하기
    • 라우팅 로직 검증을 위한 목 엔드포인트 사용하기
    • 목 엔드포인트로부터 응답하기
    • 스프링에 정의한 루트 테스트하기
    • OSGi 블루프린트에서 정의한 루트 테스트하기
    • 엔드포인트 자동 모형화하기
    • 부하 시 루트 행위 유효성 검사하기
    • 단위 테스트 프로세서와 빈(bean) 바인딩
    • AOP를 사용해 고정된 엔드포인트로 루트 테스트하기
    • 조건 이벤트를 사용 고정된 엔드포인트로 루트 테스트하기

  • 10장 모니터링과 디버깅
    • 소개
    • 루트 내에서 단계별로 로깅하기
    • 로그를 사용해 디버깅하기
    • 사용량 로깅
    • 코드에서 단계별 추적 가능하게 하기
    • JMX 비활성화하기
    • JMX 설정하기
    • 루트를 모니터링하기 쉽게 이름짓기
    • JXM 속성과 동작 추가하기
    • 카멜 JMX 컴포넌트를 사용해 다른 시스템 모니터링하기
    • 루트 내에 브레이크포인트 지정하기

  • 11장 보안
    • 소개
    • 설정 속성 암호화하기
    • 디지털 사인하기와 메시지 검증하기
    • 메시지 암복호화하기
    • XML 메시지 전부 혹은 부분 암호화하기
    • 스프링 시큐리티를 사용한 인증과 권한부여하기

  • 12장 웹 서비스
    • 소개
    • WSDL로 서비스 스텁 생성하기
    • 카멜에서 원격 웹 서비스 호출하기
    • 카멜 루트로 웹 서비스 구현하기
    • 단일 루트 내에서 여러 개의 웹 서비스 동작 제공하기
    • 웹 서비스 오류 다루기

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안