카프카 이벤트 테스트를 어떻게 할까
| 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 테스트는 핵심만 하는 게 좋다.