Post

Custom Serializer 문제

Custom Serializer 문제 주제의 핵심 개념과 적용 포인트를 정리합니다.

Custom Serializer 문제

왜 문제가 생기는가

직접 구현 Serializer는 “현재 모델 구조”에 강하게 결합된다.
아래처럼 단순한 객체도 필드가 추가/변경되는 순간, 생산자/소비자 버전 호환성이 깨질 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Customer {

    Long id;
    String name;

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}

예를 들어 startDate 같은 필드가 추가되면, 구버전 컨슈머가 신버전 메시지를 해석하지 못할 가능성이 생긴다.

대안: 스키마 기반 직렬화

JSON/Avro/Protobuf 같은 표준 형식을 사용하면 변경 부담을 크게 줄일 수 있다.
그중 Avro는 Kafka 생태계에서 자주 선택되는 옵션이다.

Avro를 많이 사용하는 이유

  • 언어 중립적 스키마 정의(JSON 기반)
  • 강한 타입 검증
  • 스키마 호환성(상위/하위) 규칙 제공

즉, 생산자와 소비자가 완전히 동시에 배포되지 않아도, 호환 규칙 안에서 점진적 전환이 가능하다.

1
2
3
4
5
6
7
8
9
10
11
# 예전 스키마
{
  "namespace": "customer.avro",
  "type": "record",
  "name": "Customer",
  "fields": [
    {"name": "id", "type": "int"},
    {"name": "name",  "type": "string"},
    {"name": "faxNumber",  "type": ["null","string"], "default": null}
  ]
}
1
2
3
4
5
6
7
8
9
10
11
# 새로운 스키마
{
  "namespace": "customer.avro",
  "type": "record",
  "name": "Customer",
  "fields": [
    {"name": "id", "type": "int"},
    {"name": "name",  "type": "string"},
    {"name": "email",  "type": ["null","string"], "default": null}
  ]
}

실무 체크 포인트

  • 스키마 호환성 규칙(Backward/Forward/Full)을 먼저 정한다.
  • 읽는 쪽이 작성 시점 스키마를 참조할 수 있는 구조(예: Schema Registry)를 함께 마련한다.
This post is licensed under CC BY 4.0 by the author.