Custom Serializer
Custom Serializer 주제의 핵심 개념과 적용 포인트를 정리합니다.
Custom Serializer
왜 Custom Serializer가 필요한가
Kafka 네트워크로 전달되는 데이터는 결국 바이트 배열이다.
애플리케이션 객체를 그대로 보낼 수 없기 때문에 직렬화 과정이 필수다.
기본 제공 직렬화기(StringSerializer, IntegerSerializer)로 충분한 경우도 있지만, 도메인 객체를 직접 전송하려면 커스텀 구현이 필요하다.
선택지 2가지
Serializer<T>를 직접 구현한 Custom Serializer를 만든다.- Avro/Protobuf 같은 검증된 직렬화 라이브러리를 사용한다.
초기 학습 단계에서는 직접 구현이 이해에 좋지만, 운영 단계에서는 스키마 진화와 호환성 관리까지 고려해야 한다.
기본 구현 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class CustomerSerializer implements Serializer<Customer> {
@Override
public void configure(Map<String, ?> configs, boolean isKey) {
}
@Override
public byte[] serialize(String topic, Customer customer) {
// ... customer to byte
}
@Override
public void close() {
}
}
핵심은 serialize()에서 도메인 객체를 안정적으로 바이트로 변환하는 것이다.
실무 포인트
- 직접 구현 직렬화는 변경에 취약할 수 있다.
- 필드 추가/삭제가 잦은 도메인이라면 스키마 기반 직렬화 도입을 먼저 검토하는 편이 안전하다.
This post is licensed under CC BY 4.0 by the author.