기타
RabbitMQ → Kafka 직접 치환
ipxy
2025. 3. 31. 13:24
728x90
✅ 전환 전략 요약: "RabbitMQ → Kafka 직접 치환"
RabbitMQ를 완전히 제거하고 Spring Boot에서 Kafka만 사용하는 구조로 바꾸는 단계별 가이드입니다.
🛠 단계별 전환 방법
1. RabbitMQ 관련 코드 제거
- RabbitTemplate, @RabbitListener, Queue, Exchange, Binding 등 모든 RabbitMQ 의존성과 Bean 제거
- spring-boot-starter-amqp 의존성 제거
// 제거
// implementation 'org.springframework.boot:spring-boot-starter-amqp'
2. Kafka 의존성 추가
// build.gradle
dependencies {
implementation 'org.springframework.kafka:spring-kafka'
}
3. Kafka 설정 (application.yml)
spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: my-group
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
4. Kafka Producer 작성
@Service
public class KafkaMessageProducer {
private final KafkaTemplate<String, String> kafkaTemplate;
public KafkaMessageProducer(KafkaTemplate<String, String> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
public void send(String topic, String message) {
kafkaTemplate.send(topic, message);
}
}
5. Kafka Consumer 작성
@Component
public class KafkaMessageConsumer {
@KafkaListener(topics = "my-topic", groupId = "my-group")
public void consume(String message) {
System.out.println("Consumed message: " + message);
}
}
6. 메시지 전송 방식 변경 (서비스 단)
기존에 rabbitTemplate.convertAndSend(...) 사용하던 부분을 아래처럼 교체합니다:
kafkaMessageProducer.send("my-topic", "Hello Kafka!");
📌 추가 팁
항목 | 설명 |
구조 개선 | Kafka는 이벤트 기반이므로, 기존 큐 기반 구조를 이벤트 발행/구독 모델로 변경하면 더 자연스러움 |
성능 | Kafka는 병렬 소비, 대용량 처리에 강함 – 파티션 고려 필요 |
DTO 전송 | Kafka에서 JSON 메시지로 DTO 주고받기 가능 (Jackson 사용) |
🎯 예시 시나리오
기존 구조 (RabbitMQ) | 전환 후 (Kafka) |
주문 생성 → 큐 전송 | 주문 생성 → Kafka Topic 발행 |
@RabbitListener 로 소비 | @KafkaListener 로 소비 |
필요하시면 "DTO 객체를 JSON으로 주고받는 Kafka 코드"나
"Kafka를 활용한 마이크로서비스 통신 예제"도 만들어드릴 수 있어요.
혹시 기존 메시지 구조(JSON, DTO 등)나 서비스 이름을 알려주실 수 있나요?
그럼 그걸 기반으로 예시 코드를 바로 보여드릴게요!
728x90