Spring Integration

2020. 9. 15. 11:58Java/Spring

Spring Integration이란

Spring Integration은 스프링 기반 어플리케이션 내에 메시징 기반 서비스를 제공하고 선언적 어댑터를 사용해 외부 시스템과의 통합을 쉽게 해줍니다. 이런 어댑터들은 리모팅, 메시징, 스케줄링과 같이 스프링이 제공하는 기능들을 추상화하고 있습니다.

Spring Integration의 컴포넌트

Message

Spring Integration에서 메시지란 메타데이터와 함께 결합되어 있는 일련의 자바 오브젝트를 위한 포괄적인 Wrapper를 말합니다. 아래 메시지 인터페이스가 보여주듯이 메시지는 페이로드와 여러 개의 헤더로 구성됩니다.

public interface org.springframework.integration.Message<T> {
    MessageHeaders getHeaders();
    T getPayload();
}

Message Channel


Spring Integration에서 Message Channel은 pipes-and-filters 구조에서 pipe의 역할을 합니다. 메시지 발행자가 메시지를 채널로 보내면 메시지 소비자가 채널로부터 메시지를 수신하는 구조입니다. 이와 같이 메시지 채널은 메시지이 컴포넌트들과 결합되어 있지 않기 때문에 메시지를 가로채거나 감시할 수 있는 좋은 지점이기도 합니다.
Spring Integration의 Message Channel은 Point-to-Point 혹은 Publish/Subscribe 방식을 제공합니다. Point-to-Point 채널의 경우, 채널로 보내진 메시지는 오직 하나의 메시지 소비자만이 수신할 수 있습니다. Publish/Subscribe 채널은 전체 메시지 구독자에게 메시지를 브로드캐스트합니다.

Message Endpoint

Spring Integration에서 Message Endpoint는 pipes-and-filters 구조에서 filter의 역할을 합니다. Endpoint의 주요 역할을 어플리케이션 코드를 메시징 프레임워크에 연결해 주는 것입니다. 이상적으로 어플리케이션 코드는 Message나 Message Channel 객체에 대해서 알 필요가 없어야 합니다. 엔드 포인트의 역할은 MVC 패턴에서 컨트롤러의 역할과 비슷합니다. 컨트롤러가 HTTP 요청을 처리하듯이 메시지 엔드포인트는 메시지를 처리합니다.

Transformer
Transformer는 메시지의 내용과 구졸르 변경해서 리턴하는 역할을 수행합니다. Transformer의 가장 흔한 용도는 메시지의 페이로드 포맷을 다른 포맷으로 변경하는 것입니다. 메시지 헤더의 값을 추가/수정/삭제 할 필요가 있을 경우에도 사용합니다.

Filter
Filter는 메시지를 출력채널로 전달해야하는지 결정하는 역할을 담당합니다. 메시지가 조건을 통과할 경우에 한해서 메시지를 출력 채널로 보내고 그렇지 않을 경우 무시하거나 예외를 던질 수도 있습니다.

Router
Router는 어떤 채널이 메시지를 받아야 하는지 결정하는 역할을 담당합니다. 일반적으로 메시지의 컨텐트 타입이나 메시지 헤더의 메타 데이터를 참조하여 결정합니다. Router는 고정된 출력 채널 대신, 동적 채널로서의 용도로 사용되기도 합니다.

Splitter
Splitter는 입력 채널로부터 메시지를 받아서, 메시지를 여러 개로 쪼갠 후에 출력 채널로 보내는 역할을 담당합니다. 보통 복합 페이로드 객체를 메시지 그룹으로 분리하기 위해 사용합니다.

Aggregator
Aggregator는 여러 개의 메시지를 받아서 하나의 메시지로 병합하는 역할을 합니다. Aggregator는 Splitter를 포함하는 pipeline에서 Splitter 뒤에 적용되어, 메시지 소비자 역할을 하기도 합니다. Aggregator는 취합할 메시지의 상태를 관리할 필요도 있고, 취합에 필요한 전체 메시지가 수신되었는지 확인할 필요도 있고, 타임아웃이 발생했을 경우 그때까지 수신한 데이터를 각 채널로 보내야 하는지 무시해야 하는지 등을 알아야 하기 때문에 Splitter보다 기술적으로 복잡합니다.

Service Activator
Service Activator는 서비스를 메시징 시스템에 연결하기 위한 엔드포인트입니다. 입력 채널이 설정되어 있어야 하고 서비스가 값을 리턴하도록 구현했다면 출력 채널도 설정해야 합니다.
Service Activator는 메시지의 페이로드를 추출하거나 변환하는 식으로 메시지를 처리하기 위해서 서비스 객체의 메소드를 호출해 줍니다. 서비스 객체가 리턴한 값이 Message 타입이 아닌 경우라면 Message 타입으로 변환되기도 합니다. 이렇게 최종 생성된 Message 타입의 응답은 출력 채널로 보내집니다. 출력 채널이 설정되지 않은 경우라면, 메시지의 "return address"에 명시된 채널로 보내지기도 합니다.

728x90

'Java > Spring' 카테고리의 다른 글

Spring Batch Chunk 지향 처리  (0) 2021.03.22
Spring + Hibernate Validator Custom Message  (0) 2020.09.15
Spring WebFlux  (0) 2020.09.13
Spring boot 와 Spring Legacy 비교  (0) 2020.09.10
Spring Batch  (0) 2020.07.02