카프카 이벤트 테스트를 어떻게 할까

topics 400-인프라 & 아키텍처 404 마이크로서비스(MSA)
types 학습
tags #kafka #test #event

카프카 이벤트 테스트를 어떻게 할까

상황

MSA 환경에서 Kafka를 이용한 이벤트 기반 아키텍처를 구현했을 때, 이벤트 발행/구독을 어떻게 테스트할까 고민이 생긴다.

테스트 방법들

1. 실제 Kafka 사용

실제 Kafka 서버를 띄워서 테스트하는 방법이다.

장점

  • 실제 환경과 동일하게 테스트 가능
  • 타이밍, 순서 등 실제 동작 확인 가능

단점

  • 테스트 속도가 느림
  • 환경 구성이 필요함
# <span id="docker-compose로-kafka-환경-구성"></span>Docker Compose로 Kafka 환경 구성
docker-compose up -d kafka zookeeper

2. Embedded Kafka 사용

Spring Kafka Test에서 제공하는 Embedded Kafka를 사용하는 방법이다. 테스트 실행 시 메모리에서 Kafka 서버가 뜬다.

장점

  • 빠른 테스트 가능
  • 별도 환경 구성 불필요

단점

  • 실제 환경과 차이가 있을 수 있음
@EmbeddedKafka(partitions = 1, topics = {"test-topic"})
class KafkaTest {
    // 테스트 코드
}

3. Mock 사용

Producer/Consumer를 Mock으로 대체하는 방법이다. 단위 테스트에 적합하다.

장점

  • 가장 빠른 테스트
  • 특정 시나리오만 테스트 가능

단점

  • Kafka 자체 동작은 검증 안됨
@MockBean
private KafkaTemplate<String, String> kafkaTemplate;

결론

본인의 경우, 테스트 목적에 따라 다르게 선택한다:

테스트 종류 추천 방법 이유
단위 테스트 Mock 사용 빠르고 격리된 테스트
통합 테스트 Embedded Kafka 환경 구성 없이 Kafka 동작 검증
E2E 테스트 Docker Compose 실제 환경과 동일한 테스트

테스트 피라미드 개념을 적용해서, 단위 테스트는 많이, 통합 테스트는 적당히, E2E 테스트는 핵심만 하는 게 좋다.

관련 문서