안녕하세요 오늘은 카프카(Kafka)를 사용하여 데이터를 교환하는 작업을 해보겠습니다.
카프카(Kafka)는 분산 스트리밍 플랫폼으로,
대용량의 실시간 데이터 스트림을 처리하기 위해 사용됩니다.
1. 의존성 추가
먼저, 프로젝트의 의존성 관리 파일(예: pom.xml 또는 build.gradle)에
Kafka 관련 의존성을 추가해야 합니다.
메이븐:
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
그래들:
implementation 'org.springframework.kafka:spring-kafka'
2. Kafka 연결 설정
Spring Boot를 사용하는 경우,
application.properties 또는 application.yml 파일에 Kafka 연결 설정을 추가합니다.
application.yml
spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: my-consumer-group
3. 메시지 수신 설정
Spring에서 Kafka로부터 메시지를 수신하려면
@KafkaListener 어노테이션을 사용하여 메소드를 구성해야 합니다.
이 어노테이션은 Kafka 토픽(Topic)에서 메시지를 받을 수 있는 리스너 역할을 합니다.
@Component
public class MessageReceiver {
@KafkaListener(topics = "my-topic")
public void receiveMessage(String message) {
// 수신된 메시지 처리 로직
System.out.println("Received message: " + message);
}
}
위 예시에서는 MessageReceiver 클래스에
@Component 어노테이션을 추가하여 Spring의 컴포넌트 스캔 대상으로 만듭니다.
그리고 receiveMessage() 메소드에 @KafkaListener 어노테이션을 적용하여
"my-topic"이라는 Kafka 토픽에서 메시지를 받습니다.
이 때, 매개변수로 전달되는 문자열은 수신된 메시지입니다.
4. 데이터 송신
이번에는 토픽에 메시지를 넣어 봅시다.
데이터를 송신하기 위해서는 KafkaTemplate 클래스를 사용합니다.
KafkaTemplate은 Kafka와의 상호작용을 단순화한 API입니다.
@Service
public class MessageSender {
private final KafkaTemplate<String, String> kafkaTemplate;
public MessageSender(KafkaTemplate<String, String> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
public void sendMessage(String message) {
kafkaTemplate.send("my-topic", message);
}
}
위 예시에서는 MessageSender 클래스에 KafkaTemplate을 주입받아서 사용합니다.
sendMessage() 메소드에서는 kafkaTemplate.send() 메소드를 사용하여
"my-topic"이라는 Kafka 토픽으로 메시지를 송신합니다.
5. 실행 및 결과 확인
위의 설정과 코드가 준비되었다면,
애플리케이션을 실행하고 Kafka로부터 수신된 데이터를 확인할 수 있습니다.
메시지 수신은 애플리케이션 실행 시 자동으로 시작되며,
Kafka 토픽에 도착한 메시지가 있으면 해당 리스너가 작동하여 메시지를 처리합니다.
이러한 방식으로 Spring과 카프카를 조합하여
실시간 스트리밍 데이터 처리와 이벤트 기반 아키텍처 구현에 사용할 수 있습니다.
참고 자료:
감사합니다.
'스프링부트' 카테고리의 다른 글
스프링 부트에서 Slack으로 실시간 모니터링하기 (1) (0) | 2023.11.29 |
---|---|
Swagger로 API 문서 자동화: 실습 후기와 튜토리얼 (0) | 2023.11.28 |
Spring에서 RabbitMQ를 사용하여 데이터를 받아보자 (0) | 2023.10.14 |
Spring WebFlux의 WebClient를 사용하여 비동기, 논블로킹 방식으로 HTTP 요청을 보내보자 (0) | 2023.10.14 |
Java 스프링부트를 이용한 RESTful API 작성하기: JPA와 데이터베이스를 사용한 api 기본 예제 (0) | 2023.09.27 |
댓글