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 값을 넣은 부분만 참고하다록 하자.)
'Java > Spring boot' 카테고리의 다른 글
[Spring boot] Spring WebMVC(Servlet) 와 Spring Webflux의 차이 (0) | 2022.02.18 |
---|---|
Custom Validation Contraint 작성하기 (0) | 2022.01.22 |
Spring boot Validation 설정하기 (0) | 2022.01.20 |
Embedded Redis를 이용하여 Unit test 작성하기 (0) | 2022.01.17 |
SLF4J: Class path contains multiple SLF4J bindings 해결 방법 (0) | 2022.01.17 |