[Spring Cloud Stream] Spring Cloud Stream 개념
SCS (Spring Cloud Stream)
Spring Framework를 기반으로 한 메시징 마이크로서비스 개발을 위한 프레임워크
MQ와 같은 메시징 시스템과 쉽게 통합할 수 있도록 설계되어 있으며, Kafka, RabbitMQ 등
다양한 메시징 미들웨어를 지원
주요 개념
1. 메시지 중심의 마이크로서비스
SCS는 비동기 메시징을 기반으로 마이크로서비스 간 통신을 가능하게 한다.
이벤트 기반의 데이터 흐름을 처리하거나 메시지를 전달하는데 최적화되어 있다.
2. 바인딩개념(Binding)
애플리케이션 코드를 메시징 미들웨어와 추상화된 인터페이스로 연결
input(입력채널) : 외부 메시지를 소비
output(출력채널) : 외부로 메시지를 발행
3. Binder 추상화
MQ나 Kafka 같은 다양한 메시징 시스템과의 통합을 Binder라는 추상화를 통해 구현
이를 통해 개발자는 특정 미들웨어의 복잡한 설정을 신경 쓰지 않고 동일한 코드를 사용할 수 있다.
(ex: Kafka Binder, RabbitMQ Binder )
4. Stream Processing지원
데이터를 실시간으로 스트리밍 하고, 이를 필터링하거나 변환하는 작업을 쉽게 수행할 수 있다.
기본 구성 요소
1. Source, Sink, Processor
Source : 데이터를 발행하는 역할
Sink : 데이터를 소비하는 역할
Processor: 데이터를 중간에서 변환/처리하는 역할
2. Binder
메시징 미들웨어와 통신하기 위한 구성 요소
Spring Cloud Stream은 기본적으로 Kafka와 RabbitMQ Binder를 제공
3. Properties
바인딩 설정, 컨슈머 설정, 프로듀서 설정 등을 정의
사용사례
1. 이벤트 기반 시스템
주문 처리 시스템에서 주문이 생성되면 결제, 배송 서비스가 메시지를 통해 독립적으로 처리
2. 실시간 데이터처리
실시간 로그나 센서 데이터를 Kafka를 통해 스트리밍 하고 분석
3. 대규모 비동기 작업
사용자 요청 데이터를 Queue에 저장하고 백그라운드 작업으로 처리
장점 (사용하는 이유)
1. 메시징 미들웨어 추상화
SCS는 Kafka, RabbitMQ 등 다양한 메시징 미들웨어를 추상화하여 제공하므로, 개발자는 특정 미들웨어에
종속되지 않고 애플리케이션을 설계할 수 있다. 필요에 따라 메시징 플랫폼을 변경하거나 동시에 여러 플랫폼을 사용하는 것도 가능
2. 마이크로 서비스 간 통신 지원
MSA환경에서 각 서비스가 서로 독립적으로 메시지를 주고받을 수 있도록 도와준다.
서비스 간의 결합도를 낮추어 유연한 확장과 변경이 가능
3. 비동기 데이터 처리
REST API기반의 동기 패턴 대신, 비동기 메시징 패턴을 사용하여 높은 처리량과 낮은 지연 시간을 구현.
작업이 비동기로 처리되므로 서비스가 응답 속도에 덜 의존하게 된다.
4. 대규모 이벤트 스트리밍
실시간으로 데이터 스트리밍, 로그분석, 센서 데이터처리 등 대규모 데이터 처리에 적합
Kafka 같은 플랫폼과 연계해 높은 확장성과 처리량을 제공
5. 프로덕션 준비 기능
메시지 재전송, 메시지 필터링, 상태 관리와 같은 기능을 쉽게 구현 가능
Spring의 생태계를 활용하여 안정적이고 유지보수하기 쉬운 코드를 작성할 수 있음
6. 애플리케이션 간 독립성 확보
메시지를 통해 데이터를 주고받기 때문에, 한 애플리케이션의 장애가 다른 애플리케이션으로 전파되는 것을
방지한다.
장애 복구와 데이터 일관성 관리가 유리
참고
Spring Framework를 기반으로 한 마이크로서비스 아키텍처
→ Spring 기술을 사용하여 분산 시스템을 구축하는 방식
⊙Spring 기반의 마이크로서비스
Spring Boot
Spring Cloud
Spring Data
Spring Security 등...