책 소개
요약
아파치 카멜은 기업 통합 패턴(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처럼 행동하는 웹 서비스를 호출하는 방법을 살펴본다.
목차
목차
- 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로 서비스 스텁 생성하기
- 카멜에서 원격 웹 서비스 호출하기
- 카멜 루트로 웹 서비스 구현하기
- 단일 루트 내에서 여러 개의 웹 서비스 동작 제공하기
- 웹 서비스 오류 다루기