본문 바로가기

전지적라온시점

Spring Kafka 연동 실전 가이드 – Producer, Consumer 구현부터 설정까지 본문

Development/Kafka

Spring Kafka 연동 실전 가이드 – Producer, Consumer 구현부터 설정까지

최라온 2025. 6. 4. 16:56
728x90
반응형
SMALL

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 직렬화, 병렬 처리 등 다양한 기능을 실무에 적용해보세요.

728x90
반응형
LIST