[Spring boot] Spring boot test 에서 Kafka Configuration 제외하기
Kafka를 이용하는 Spring boot project에서 unit test를 수행할 때에 여러가지 어려움을 직면하게 된다. Kafka message send and receive 관련 Unit test를 추가하기 위해서는 Embedded kafka를 추가한 후 메세지가 제대로 전달되는지를 확인한다.
이때, Kafka bootstrap server address를 아래와 같이 Embedded Kafka 의 Broker 주소 값으로 수행한다.
${spring.embedded.kafka.brokers}
하지만, 이 설정은 아래의 Annotation이 설정된 Spring boot test에서만 사용이 가능하다.
@EmbeddedKafka
그렇지 않은 Unit test에서는 아래와 같은 Exception이 발생하게 된다. Embedded Kafka의 AutoConfiguration이 적용되지 않아서 broker address를 찾을 수 없기 때문이다.
이러한 문제가 발생할 경우 application.yaml에 추가되어 있는 Embedded Kafka 의 broker 주소에 Default 값을 넣어주면 문제가 해결된다.
즉, @EmbeddedKafka가 없는 Spring boot test의 경우 Default 주소로 동작을 하게 되고, 이 때 해당 주소에 실제 Kafka가 없더라도 Integration Test를 수행하는데는 문제가 발생하지 않는다.
나의 경우 Kafka broker의 기본 Port를 사용하여 Default 값을 추가해 주었다.
kafka:
bootstrap:
addresses: ${spring.embedded.kafka.brokers:localhost:9092}
(위 설정은 Config 파일을 통해서 직접 Bean을 등록하여 Spring에서 기본으로 사용하는 Configuration과는 차이가 있다. Default 값을 넣은 부분만 참고하다록 하자.)