Spring Integration이란?
애플리케이션 내부-외부 사이의 메시징을 가능하게 하는 프레임워크이다.
Spring Framwork에서 매세징이란 메타데이터와 함께 결합되어있는 이련의 자바 오브젝트를 위한 포괄적인 Wrapper를 말한다. 메시지는 여러개의 헤더로 구성된다.
Enterprise Integration Patterns은 엔터프라이즈 환경에서 사용하고 있는 다양한 분야(ex. 결제,메일, 각 부서별 서비스) 의 애플리케이션을 통합, 즉 유기적으로 연결해서 효율적으로 적절하게 통합하는 방법을 여러 패턴을 통해 제시했다.
하나의 동작을 하는 서비스의 각각의 기능들(프로젝트)이 내/외부 모듈과 접촉하는 부분을 쉽게 구성할 수 있도록 하는 기능들을 제공한다.
header, payload로 구성되어 있는 내용을 포함하고 있는 generic wrapper.
컴포넌트 간에 이동되는 실제 데이터이다.
pipes-and-filters 모델의 pipe에 해당.
컴포넌트간의 메세지 중간 통로 역할을 함으로써 컴포넌트간 디컬플링을 유지 할 수 있도록 하며 interception, monitering 포인트가 될 수 있다.
다른 주요 기능 중 하나는, 메세지 버퍼 역할을 할 수 있는 Queue로써 동작할 수 있다.
FIFO방식으로 컨슈머가 가져갈 때 까지 큐에 저장된다.
ex) @Bean public MessageChannel sampleChannel() { return new DirectChannel(); } -> DirectChannel은 Point to Point로, 하나의 MessageHeader에게 Message를 전달한다. 이외에도 다양한 체널종류가 있다.
pipes-and-filters 모델의 filters에 해당.
Spring integration상에서 채널을 통해서 메세지를 받고, 소비하는 주체이며 하나의 클래스이다.
여기서 말하는 EndPoint란 Spring integration이 구성할 파이프라인의 끝단이 아닌, 파이프라인 중간에서 메세지를 변경하거나 필터링 하거나, 다른 채널로 라우팅하는 요소이다.
ex)
@MessageEndpoint
public class serverEndpoint {
...
}
Spring integration에서 일련의 작업들을 정의한 플로우를 integration flow 라고 하는데, 이 플로우가 Message Endpoint로 구성되어있다.
엔드포인트는 작업 타입에 따라 크게 그 종류를 나눌 수 있는데 Transformer(변형), Filter(필터링), Router(메세지를 특정 채널로 전송), Splitter(메세지를 분리하여 여러 채널로 전송), Aggregator(splitter의 반대), Service Activator(메세지로 특정 작업을 수행할 수 있는 핸들러를 붙일 수 있는 엔드포인트), Channel Adapter(외부 시스템과 입출력이 가능)가 있다.
@Filter( inputChannel="numberChannel", outputchannel="evenNumberChannel" )
public boolean evenNumberFilter( Integer number ) {
return number % 2 == 0; //숫자를 받아 짝수만 전달
}
ex)
@ServiceActivator(inputChannel = "sampleChannel") { }