[java] 아파치 카프카 클라이언트에서 자바 직렬화 사용하기

아파치 카프카는 대용량의 데이터를 신속하게 처리하기 위한 분산형 메시징 시스템입니다. 자바를 사용하여 카프카 클라이언트를 개발할 때, 데이터를 직렬화하여 전송할 수 있습니다. 이번 블로그 포스트에서는 아파치 카프카 클라이언트에서 자바 직렬화를 사용하는 방법에 대해 알아보겠습니다.

직렬화란?

직렬화(serialization)는 객체를 바이트 스트림으로 변환하는 과정을 말합니다. 객체를 직렬화하면, 해당 객체의 상태와 데이터를 보존하여 통신이나 저장 등 다양한 용도로 사용할 수 있습니다. 직렬화된 객체는 바이트 단위로 전송하거나 파일에 저장할 수 있습니다.

아파치 카프카에서의 직렬화

아파치 카프카 클라이언트는 기본적으로 문자열로 데이터를 전송합니다. 그러나 복잡한 자료형의 데이터를 전송해야 하는 경우, 자바 직렬화를 사용하여 객체를 직렬화하여 전송할 수 있습니다.

아파치 카프카 클라이언트에서 자바 직렬화를 사용하기 위해서는 먼저 해당 객체를 Serializable 인터페이스를 구현해야 합니다. 이 인터페이스는 직렬화가 가능한 객체임을 나타냅니다.

아래는 Person 클래스를 예시로 들어 자바 직렬화를 사용하는 방법을 보여줍니다.

import java.io.Serializable;

public class Person implements Serializable {
    private String name;
    private int age;

    // Constructor, Getter, Setter 생략

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

위의 Person 클래스는 Serializable 인터페이스를 구현하고 있습니다. 이제 이 클래스의 객체를 직렬화하여 카프카에 전송할 수 있습니다.

카프카 메시지 전송하기

직렬화된 객체를 카프카에 전송하려면, ProducerRecord 객체를 생성하여 KafkaProducer를 통해 메시지를 전송해야 합니다.

import org.apache.kafka.clients.producer.*;
import java.util.Properties;

public class KafkaProducerExample {
    public static void main(String[] args) {
        // 카프카 프로듀서 설정
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.ByteArraySerializer");

        KafkaProducer<String, byte[]> producer = new KafkaProducer<>(props);

        // 직렬화할 객체 생성
        Person person = new Person("John", 30);

        // ProducerRecord 생성 및 메시지 전송
        ProducerRecord<String, byte[]> record = new ProducerRecord<>("my_topic", "person_key", serialize(person));
        producer.send(record, new Callback() {
            @Override
            public void onCompletion(RecordMetadata metadata, Exception exception) {
                if (exception != null) {
                    exception.printStackTrace();
                } else {
                    System.out.println("Message sent successfully");
                }
            }
        });

        producer.close();
    }

    private static byte[] serialize(Person person) {
        // 직렬화 로직 작성
        // ...
    }
}

위의 예제에서는 KafkaProducer를 생성하고, Person 객체를 직렬화하여 ProducerRecord를 생성한 후, KafkaProducer를 통해 메시지를 전송하고 있습니다. serialize 메소드는 Person 객체를 직렬화하는 로직을 작성해야 합니다.

마무리

이번 블로그 포스트에서는 아파치 카프카 클라이언트에서 자바 직렬화를 사용하는 방법에 대해 알아보았습니다. 자바 직렬화를 통해 복잡한 자료형의 객체를 카프카에 전송할 수 있으며, 이를 통해 다양한 용도로 활용할 수 있습니다.

더 자세한 내용은 아파치 카프카 공식 문서를 참고하시기 바랍니다.