들어가면서
Kafka는 대용량의 데이터를 처리하기 위한 분산 메시지 큐입니다. 이 문서에서는 Spring Boot 3.0에서 Kafka를 적용하는 방법과 기본적인 설정 코드를 제공합니다.
Kafka에 대한 기본적인 사항
Kafka는 Pub/Sub 모델을 사용하여 메시지를 처리합니다. 브로커(Broker)라고 불리는 Kafka 서버에서 메시지를 생성하고, 토픽(Topic)이라는 주제에 따라 메시지를 구분합니다. 프로듀서(Producer)는 메시지를 생성하고, 컨슈머(Consumer)는 메시지를 받아서 처리합니다.
Kafka 설정 코드
Kafka를 Spring Boot 3.0에서 적용하려면, spring-kafka
라이브러리를 추가해야 합니다. 예제 코드는 다음과 같습니다.
@Configuration
@EnableKafka
public class KafkaConfiguration {
@Value("${spring.kafka.bootstrap-servers}")
private String bootstrapServers;
@Bean
public Map<String, Object> consumerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
return props;
}
}
위 코드에서 @Value
어노테이션을 사용하여 bootstrap-servers
값과 같은 Kafka 설정 정보를 application.yml
파일에서 가져올 수 있습니다.
RabbitMQ와의 비교
RabbitMQ는 메시지 큐를 위한 오픈소스 브로커입니다. Kafka와 비교하면 RabbitMQ는 메시지 브로커의 역할만 수행합니다. 반면에 Kafka는 메시지 브로커 역할과 분산 처리 역할을 수행합니다. RabbitMQ는 AMQP(Advanced Message Queuing Protocol) 프로토콜을 사용하며, Kafka는 Apache ZooKeeper를 사용합니다.
다른 메시지 큐와의 비교
다음 표는 Kafka와 유사한 메시지 큐와의 성능, 기능, 사용자 인기 등을 비교한 것입니다.
메시지 큐 | 성능 | 기능 | 어떤 프로젝트에 더 어울리는지 | 사용자 인기 |
ActiveMQ | 높음 | 다양함 | 중간 | 높음 |
Redis | 높음 | 캐시 용도 | 작은 규모 | 높음 |
RabbitMQ | 중간 | 다양함 | 중간 | 높음 |
MySQL, JPA와 함께 사용하기
Spring Boot 3.0에서 Kafka를 사용하면서 MySQL과 JPA를 함께 사용할 수 있습니다. 아래는 application.yml
파일에서 MySQL과 Kafka 설정 정보를 가져오는 예제 코드입니다.
spring:
datasource:
url: {MySQL DB URL}
username: {MySQL DB username}
password: {MySQL DB password}
kafka:
bootstrap-servers: {Kafka bootstrap servers}
JUnit 6로 테스트하기
Spring Boot 3.0에서 Kafka를 사용하는 애플리케이션을 테스트하려면, spring-kafka-test
라이브러리를 추가해야 합니다. 아래는 예제 코드입니다.
@SpringBootTest
@EmbeddedKafka
class KafkaTest {
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
@Autowired
private KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry;
@Test
void testKafka() throws InterruptedException {
String topic = "test-topic";
kafkaTemplate.send(topic, "test-message");
Thread.sleep(1000);
assertThat(kafkaListenerEndpointRegistry.getListenerContainer("test-group").getRecordLatches().get(topic).getCount())
.isEqualTo(1);
}
}
위 코드에서 @EmbeddedKafka
어노테이션을 사용하여 내장된 Kafka 서버를 사용하여 테스트를 수행할 수 있습니다.
결론
Spring Boot 3.0에서 Kafka를 적용하는 방법과 기본적인 설정, RabbitMQ와의 비교, 다른 메시지 큐와의 비교, MySQL과 JPA와 함께 사용하는 방법, JUnit 6로 테스트하는 방법 등을 살펴보았습니다. 이를 통해 Kafka 사용 설정에 대한 내용을 이해하고, 적용할 수 있도록 도움이 되었기를 바랍니다.
내저장소 바로가기 luxury515