[java] 카프카와 자바를 이용한 이벤트 드리븐 아키텍처 구현하기
소개
이벤트 드리븐 아키텍처(Event-driven architecture)는 비동기적인 이벤트 기반의 시스템 구조를 의미합니다. 이 아키텍처는 각각의 컴포넌트가 독립적으로 작동하며, 이벤트를 통해 서로 통신하고 상호작용합니다. 이를 통해 느슨한 결합도와 확장성을 가진 시스템을 구축할 수 있습니다.
카프카(Kafka)는 고성능의 분산 메시징 시스템으로, 대량의 데이터를 신속하게 처리할 수 있도록 지원합니다. 이 블로그 포스트에서는 카프카와 자바를 이용하여 이벤트 드리븐 아키텍처를 구현하는 방법에 대해 알아보겠습니다.
아키텍처 개요
아키텍처는 다음과 같은 구성요소로 이루어집니다.
- 이벤트 발행자(Publisher): 이벤트를 생성하고 카프카로 전송합니다.
- 이벤트 수신자(Subscriber): 카프카로부터 이벤트를 수신하고 처리합니다.
- 카프카: 이벤트를 저장하고, 이벤트 발행자와 수신자 간의 매개체 역할을 합니다.
프로젝트 설정
-
카프카 라이브러리 의존성 추가
<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.8.0</version> </dependency>
-
카프카 클러스터 연결 설정
public class KafkaConfig { private static final String BOOTSTRAP_SERVERS = "localhost:9092"; public static Properties getConfig() { Properties properties = new Properties(); properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS); properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS); return properties; } }
이벤트 발행자 구현
public class EventPublisher {
private static final String TOPIC_NAME = "event_topic";
public void publishEvent(String event) {
try (Producer<String, String> producer = new KafkaProducer<>(KafkaConfig.getConfig())) {
ProducerRecord<String, String> record = new ProducerRecord<>(TOPIC_NAME, event);
producer.send(record);
} catch (Exception e) {
e.printStackTrace();
}
}
}
이벤트 수신자 구현
public class EventReceiver {
private static final String TOPIC_NAME = "event_topic";
public void start() {
try (Consumer<String, String> consumer = new KafkaConsumer<>(KafkaConfig.getConfig())) {
consumer.subscribe(Collections.singletonList(TOPIC_NAME));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {
// 이벤트 처리 로직 구현
processEvent(record.value());
}
}
}
}
private void processEvent(String event) {
// 이벤트 처리 로직 구현
System.out.println("Processing event: " + event);
}
}
실행
public class Main {
public static void main(String[] args) {
EventPublisher publisher = new EventPublisher();
publisher.publishEvent("Example Event");
EventReceiver receiver = new EventReceiver();
receiver.start();
}
}
마치며
위의 예제를 통해 카프카와 자바를 이용하여 이벤트 드리븐 아키텍처를 구현하는 방법에 대해 살펴보았습니다. 카프카를 사용하면 고성능의 분산 메시징 시스템을 쉽게 구축할 수 있으며, 이를 통해 유연하고 확장 가능한 시스템을 개발할 수 있습니다. 추가적으로 카프카의 다양한 기능들을 알아보고 적절하게 활용하는 것도 중요합니다.
더 많은 내용을 알고 싶다면 카프카 공식 문서를 참고해보세요.