2013년 11월 6일 수요일

기업 통합 패턴 목록


필자가 올리는 기업 통합 패턴(Enterprise Integration Patterns) 관련 글을 읽는 독자들이 기업 통합 패턴의 목록이라도 알 수 있도록, 기업 통합 패턴의 전체 패턴 목록을 정리해 보았다. 기업 통합 패턴은 기업 통합을 위한 메시징 기반의 패턴으로 다음과 같은 상황(context)에 대한 방법론을 패턴으로 제공한다. 이 패턴들에 대한 상세한 방법론에 대해 좀더 관심이 있는 독자라면 원서를 읽어보거나, 출판될 필자의 번역서를 참조할 수 있을 것이다.



기업 통합 패턴 개요




메시징 엔드포인트(Messaging Endpoints)


메시지 엔드포인트(Message Endpoint)
메시징 시스템을 통해 메시지를 수신하고 발신하려면 애플리케이션은 어떻게 해야 할까?
메시징 게이트웨이(Messaging Gateway)
애플리케이션의 나머지 부분으로부터 메시징 시스템에 대한 액세스를 캡슐화하려면 어떻게 해야 할까?
메시징 매퍼(Messaging Mapper)
도메인 객체와 메시징 인프라의 독립성은 유지하면서, 이들 사이에 데이터를 이동시키려면 어떻게 해야 할까?
트랜잭션 클라이언트(Transactional Client)
클라이언트는 메시징 시스템과 함께 어떻게 트랜잭션을 제어할 수 있을까?
폴링 소비자(Polling Consumer)
준비된 애플리케이션만이 메시지를 소비하게 하려면 어떻게 해야 할까?
이벤트 기반 소비자(Event-Driven Consumer)
애플리케이션은 어떻게 사용 가능한 메시지를 자동으로 소비할 수 있을까?
경쟁 소비자(Competing Consumer)
메시징 클라이언트가 복 수개의 메시지들을 동시에 처리하려면 어떻게 해야 할까?
메시지 디스패처(Message Dispatcher)
하나의 채널에 대한 복수 소비자들은 자신들의 메시지 처리를 어떻게 조정할 수 있을까?
선택 소비자(Selective Consumer)
수신하려는 메시지만 선택하려면, 메시지 소비자는 어떻게 해야 할까?
영속 구독자(Durable Subscriber)
구독자의 수신 중지 동안, 발생 가능한 메시지 누락은 어떻게 방지할 수 있을까?
멱등 수신자(Idempotent Receiver)
메시지 수신자는 중복 메시지를 어떻게 처리할 수 있을까?
서비스 액티베이터(Service Activator)
애플리케이션은 메시징 기술과 비 메시징 기술 모두를 통해 호출되는 서비스를 어떻게 설계할 수 있을까?


메시지 구축(Message Construction)


메시지(Message)
메시지 채널로 연결된 두 애플리케이션은 어떻게 정보를 교환할까?
명령 메시지(Command Message)
애플리케이션들은 프로시저 호출에 어떻게 메시징을 사용할 수 있을까?
문서 메시지(Document Message)
애플리케이션들은 데이터 전송에 어떻게 메시징을 사용할 수 있을까?
이벤트 메시지(Event Message)
애플리케이션들은 이벤트 전송에 어떻게 메시징을 사용할 수 있을까?
요청 응답(Request-Reply)
애플리케이션은 어떻게 요청 메시지를 발신하고 응답 메시지를 수신할 수 있을까?
반환 주소(Return Address)
응답자는 응답 메시지를 전송할 채널을 어떻게 알까?
상관관계 식별자(Correlation Identifier)
요청자는 수신한 응답으로 어떤 요청에 대한 응답인지를 어떻게 알 수 있을까?
메시지 순서(Message Sequence)
많은 양의 데이터를 메시징을 사용하여 어떻게 전송할 수 있을까?
메시지 만료(Message Expiration)
메시지가 오래되어 사용 중단이 필요한 때를 발신자는 어떻게 지정할 수 있을까?
포맷 표시자(Format Indicator)
변경에 잘 대응하려면 메시지의 데이터 포맷은 어떻게 설계돼야 할까?


메시지 라우팅(Message Routing)


파이프 필터(Pipes and Filters)
독립성과 유연성을 유지하면서 메시지에 대한 복잡한 처리도 수행할 수 있으려면 어떻게 해야 할까?
메시지 라우터(Message Router)
개별 처리 단계들의 결합을 제거하여 메시지를 조건에 따라 서로 다른 필터로 전달할 수 있게 하려면 어떻게 해야 할까?
내용 기반 라우터(Content-Based Router)
단일 로직 기능이 여러 시스템에 물리적으로 분산되어 있는 경우 어떻게 처리해야 할까?
메시지 필터(Message Filter)
불필요한 메시지를 컴포넌트는 어떻게 수신하지 않을 수 있을까?
동적 라우터(Dynamic Router)
효율성을 유지하면서도 목적지에 대한 라우터의 종속성을 없애려면 어떻게 해야 할까?
수신자 목록(Recipient List)
수신자들이 가변적인 경우 어떻게 메시지를 라우팅할까?
분할기(Splitter)
메시지에 포함된 요소들을 각각 처리하려면 어떻게 해야 할까?
수집기(Aggregator)
서로 관련성이 있는 개별 메시지들은 어떻게 묶어 처리할 수 있을까?
리시퀀서(Resequencer)
순서가 뒤바뀐 메시지들 어떻게 올바른 순서로 되돌릴 것인가?
복합 메시지 처리기(Composed Message Processor)
서로 다른 처리를 요구하는 복수 개의 요소들을 포함한 메시지를 처리하면서도, 전체 메시지 흐름을 유지하려면 어떻게 해야 할까?
분산기 집합기(Scatter-Gather)
수신자들 각각에게 메시지를 발신하고 수신해야 하는 경우, 전체 메시지의 흐름은 어떻게 관리할까?
회람표(Routing Slip)
결정되지 않은 일련의 처리 단계들로 메시지를 라우팅하려면 어떻게 해야 할까?
프로세스 관리자(Process Manager)
설계 당시에는 필요한 단계가 알려지지 않았고 순차적이지 않을 수 있는 복합 처리 단계로 메시지를 라우팅하려면 어떻게 해야 할까?
메시지 브로커(Message Broker)
메시지 흐름의 중앙 제어를 유지하면서, 어떻게 메시지와 목적지의 결합을 제거할 수 있을까?


메시지 변환(Message Transformation)


메시지 변환기(Message Translator)
다른 데이터 포맷을 사용하는 시스템들이 메시징을 사용하여 서로 통신하려면 어떻게 해야 할까?
봉투 래퍼(Envelope Wrapper)
메시지 헤더 필드, 암호화 같은 특별한 포맷을 가진 메시지 교환에 기존 시스템을 참여시키려면 어떻게 해야 할까?
내용 보탬이(Content Enricher)
수신한 메시지에 필요한 데이터 항목이 완전하지 않은 경우 어떻게 다른 시스템과 통신할 수 있을까?
내용 필터(Content Filter)
큰 메시지에서 일부 데이터만 필요한 경우, 메시지 처리를 어떻게 단순화할까?
번호표(Claim Check)
시스템을 가로질러 전송되는 메시지의 데이터 크기를 정보 손실 없이 줄이려면 어떻게 해야 할까?
노멀라이저(Normalizer)
의미는 같지만 다른 포맷으로 수신된 메시지는 어떻게 처리할까?
정규 데이터 모델(Canonical Data Model)
다른 데이터 포맷을 사용하는 애플리케이션들을 통합할 때, 어떻게 하면 의존성을 최소화할 수 있을까?


시스템 관리(System Management)


제어 버스(Control Bus)
여러 플랫폼에 걸쳐 분산되어 있는 메시징 시스템을 효과적으로 관리하려면 어떻게 해야 할까?
우회기(Detour)
검증, 테스트, 디버깅 등을 수행하는 단계로 메시지를 통과시키려면 어떻게 라우팅해야 할까?
와이어 탭(Wire Tap)
포인트 투 포인트 채널을 지나가는 메시지는 어떻게 검사할 수 있을까?
메시지 이력(Message History)
느슨하게 결합된 시스템에서 메시지의 흐름을 어떻게 효과적으로 분석하고 디버깅할 수 있을까?
메시지 저장소(Message Store)
메시징 시스템의 느슨한 결합과 임시 보관적 특성을 방해하지 않으면서 어떻게 메시지 정보를 보고할 수 있을까?
스마트 프록시(Smart Proxy)
요청자가 지정한 반환 주소로 응답 메시지를 게시하는 서비스의 메시지는 어떻게 추적할 수 있을까?
테스트 메시지(Test Message)
컴포넌트가 메시지를 처리하면서 내부 오류로 인해 잘못된 메시지를 내보낸다면 어떤 일이 생길까?
채널 제거기(Channel Purger)
테스트 또는 운영 시스템이 교란되지 않게 채널 위에 남겨진 메시지들을 관리하려면 어떻게 해야 할까?


참고 사이트

댓글 없음:

댓글 쓰기