Spring Kafka 연동 실전 가이드 – Producer, Consumer 구현부터 설정까지
Spring Kafka는 Kafka를 Spring 애플리케이션에 쉽게 통합할 수 있도록 도와주는 모듈입니다. 복잡한 설정 없이 간단한 애노테이션과 설정만으로 Kafka 메시지를 송수신할 수 있습니다. 이 글에서는 Spring Kafka의 기본 설정부터 Producer/Consumer 구현, 실무 팁까지 상세히 정리합니다.
1. 의존성 추가 (Gradle)
dependencies {
implementation 'org.springframework.kafka:spring-kafka'
}
2. 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
3. Kafka Producer 구현
KafkaTemplate을 사용하여 메시지를 발행합니다.
@Service
public class KafkaProducerService {
private final KafkaTemplate<String, String> kafkaTemplate;
public KafkaProducerService(KafkaTemplate<String, String> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
public void sendMessage(String topic, String message) {
kafkaTemplate.send(topic, message);
}
}
4. Kafka Consumer 구현
간단한 애노테이션 기반 메시지 수신 처리
@Component
public class KafkaConsumerService {
@KafkaListener(topics = "my-topic", groupId = "my-group")
public void listen(String message) {
System.out.println("Received message: " + message);
}
}
5. REST API와 연동 예시
@RestController
@RequestMapping("/kafka")
public class KafkaController {
private final KafkaProducerService kafkaProducerService;
public KafkaController(KafkaProducerService kafkaProducerService) {
this.kafkaProducerService = kafkaProducerService;
}
@PostMapping("/send")
public ResponseEntity<String> send(@RequestParam String message) {
kafkaProducerService.sendMessage("my-topic", message);
return ResponseEntity.ok("Sent: " + message);
}
}
6. 메시지 객체를 JSON으로 처리하려면?
역직렬화/직렬화를 위해 설정 변경
# application.yml
producer:
value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
consumer:
value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
properties:
spring.json.trusted.packages: "*"
7. 실무 적용 팁
- Consumer 병렬 처리: @KafkaListener에
concurrency설정 추가 - Batch 처리:
consumer.enable-auto-commit=false후 수동 커밋 - 오류 핸들링: ErrorHandler Bean 정의 가능
- 테스트: Embedded Kafka 또는 KafkaContainer 사용
8. 결론
Spring Kafka를 사용하면 Kafka의 복잡한 메시지 송수신 로직을 간단하게 구현할 수 있습니다. KafkaTemplate, @KafkaListener를 통해 Producer/Consumer를 명확하게 분리하고, REST API, JSON 직렬화, 병렬 처리 등 다양한 기능을 실무에 적용해보세요.