← 학습 카테고리

Learn

Kafka

84개 모듈 · 현재 76번째

Kafka 모듈 76/84 kafka-learn-76

TopologyTestDriver — 실제 브로커 없이 토폴로지를 단위 테스트한다

Kafka Producer/Consumer Interceptor(KIP-42) 및 Kafka Streams TopologyTestDriver 공식 문서 종합 (웹 리서치, 2026) — Apache Kafka KIP-42(Add Producer and Consumer Interceptors), Apache Kafka 공식문서 Testing a Streams Application Apache Kafka 공식문서 Testing a Streams Application

이 모듈을 다 읽으면

  • TopologyTestDriver가 실제 브로커 없이 어떻게 Kafka Streams 토폴로지를 검증하는지 설명할 수 있다
  • TestInputTopic/TestOutputTopic이 실제 토픽을 어떻게 모킹하는지 설명할 수 있다

kafka-learn-37에서 다룬 Kafka Streams 토폴로지(KStream/KTable 처리 그래프)를 전제로, 실제 클러스터를 띄우지 않고도 그 토폴로지의 로직을 검증하는 표준 단위 테스트 도구를 정리한다.

브로커 없이 컨슈머·프로듀서를 흉내 낸다

TopologyTestDriver는 실제 Kafka 브로커를 쓰지 않지만, 내부적으로 Kafka 컨슈머·프로듀서의 동작을 시뮬레이션해 토폴로지를 그대로 구동한다 — 그 덕분에 실제 브로커 인프라(테스트용 클러스터, Docker 컨테이너 등) 없이도 토폴로지 로직을 검증하는 순수 단위 테스트가 가능하다. 실제 애플리케이션을 만들 때와 동일하게 topology와 설정(config)을 넘겨 driver를 생성하는 것으로 시작한다.

핵심 포인트

  • 실제 브로커 없이 컨슈머·프로듀서 동작을 시뮬레이션해 토폴로지를 그대로 구동 — 테스트용 클러스터·컨테이너 불필요
  • 실제 앱과 동일하게 topology+config를 넘겨 TopologyTestDriver 생성

TestInputTopic/TestOutputTopic — 입출력 토픽을 모킹한다

입력 토픽마다 TestInputTopic을 만들어 pipeInput()으로 테스트 데이터를 토폴로지에 흘려보내고, 결과를 확인할 각 출력 토픽마다 TestOutputTopic을 만들어 그 결과를 꺼내 검증한다 — 2.4.0부터 도입된 API다. createInputTopic() 호출 시 첫 레코드의 타임스탬프와 레코드마다 증가시킬 시간 간격을 파라미터로 지정할 수 있어, kafka-learn-73에서 다룬 grace period·윈도우 닫힘처럼 이벤트 시간에 의존하는 로직도 결정론적으로 재현해 테스트할 수 있다.

핵심 포인트

  • TestInputTopic(pipeInput()으로 데이터 주입)/TestOutputTopic(결과 검증) — Kafka 2.4.0부터 도입
  • createInputTopic()에서 첫 레코드 타임스탬프+레코드당 시간 증가폭 지정 가능 — kafka-learn-73의 grace period·윈도우 닫힘 같은 이벤트 시간 의존 로직도 결정론적으로 재현 테스트 가능