개요
항목 | 내용 |
기간 | 2025.12.23 ~ 2026.01.27 |
역할 | 의사결정 및 구현 담당 |
기술 스택 | Java/Kotlin, Apache Flink CDC, Kafka, Avro, Confluent Schema Registry |
핵심 | 오픈소스 커스텀으로 Avro + Schema Registry 지원 추가 |
배경
상품 메타데이터는 CNPG(Cloud Native PostgreSQL)에 저장되어 있었고, 이 역시 MongoDB와 마찬가지로 색인과 통계 등 후처리 작업을 위해 CDC가 필요했습니다.
Flink CDC Pipeline YAML 방식이 PostgreSQL을 지원하므로, Kotlin DataStream API로 직접 코드를 작성하는 것보다 간단한 이 방식을 채택했습니다.
문제
타 부서에서 관리하는 Kafka 환경에서는 Schema Registry + Avro 포맷 사용이 필수였습니다. 그러나 Flink CDC Pipeline YAML 방식은 이를 지원하지 않았습니다.
flowchart LR
A[PostgreSQL<br>CNPG] --> B[Flink CDC Pipeline<br>YAML 방식]
B --> C[Kafka]
C --> D[Schema Registry ❌<br>Avro 미지원 ❌]Mermaid
복사
선택지는 세 가지였습니다:
선택지 | 장점 | 단점 |
MongoDB처럼 Kotlin DataStream API로 전환 | 완전한 제어 | 개발 비용 높음, YAML의 간편함을 포기 |
Kafka Consumer 쪽에서 변환 | CDC 쪽 수정 불필요 | 아키텍처 복잡도 증가, 타 부서 협의 필요 |
오픈소스 커스텀 | YAML 방식 유지 + 요구사항 충족 | 유지보수 부담 |
무엇을 했나
의사결정: 오픈소스 커스텀
오픈소스 커스텀은 유지보수와 문서 관리 등 관리 요소가 증가하지만, AI 에이전트를 적극 활용해 규격화하면 이러한 단점을 극복할 수 있을 것이라 판단했습니다.
구현 내용
flowchart LR
A[PostgreSQL<br>CNPG] --> B[Flink CDC Pipeline<br>YAML 방식]
B --> C[커스텀 Kafka Connector]
C --> D[Avro 직렬화]
D --> E[Schema Registry 등록]
E --> F[Kafka]Mermaid
복사
원래 커넥터 vs 커스텀 범위:
flowchart LR
A[CDC Source<br>PostgreSQL] --> B[Serialization]
B --> C[Kafka Producer]
C --> D[Kafka]
style B fill:#fff3cd,stroke:#ffc107Mermaid
복사
원래 커넥터 | 커스텀 추가 | |
value.format | debezium-json, canal-json | avro, debezium-avro |
key.format | json, csv | avro |
스키마 관리 | 없음 | Schema Registry 연동 (조회/캐싱/호환성 검증) |
Wire Format | 평문 JSON | Confluent 호환 [0x00][SchemaID 4B][Avro Binary] |
Envelope | debezium-json (before/after/op/source), canal-json (old/data/type) | debezium-avro (Avro 직렬화된 envelope) |
Key/Value 분리 | key와 value에 같은 계열만 적용 가능 | 각각 다른 포맷 지정 가능 (key: json, value: debezium-avro 등) |
즉, 기존 커넥터의 Serialization 레이어(Serialization 영역)를 확장하여 Avro 직렬화 + Schema Registry 연동을 추가한 것이 핵심입니다.
AI 에이전트 활용 문서화
•
Claude Code를 활용하여 README.md(Configuration, Type Mapping, Wire Format 등)와 docs/ 하위 기술 문서(Avro 패키지 분석, 직렬화 스키마 개선 문서 등) 4건을 생성
•
커스텀 옵션 테이블, 타입 매핑 테이블, 예제 파이프라인 YAML 등을 문서화하여 유지보수 부담 경감
결과
•
요구사항을 충족하는 커스텀 Kafka Connector를 개발하여 운영에 적용
•
YAML 기반 파이프라인 정의 방식을 유지하면서도 Schema Registry + Avro 지원
•
타 부서의 Kafka 환경 요구사항(Schema Registry 필수)을 충족하면서도 CDC 파이프라인의 간결함을 유지
배운 점
•
커스텀 오픈소스의 가장 큰 단점인 문서화/유지보수 부담을 AI 에이전트로 문서 생성하여 대응함
•
MongoDB는 DataStream API로 전환, PostgreSQL은 YAML 유지 + 오픈소스 커스텀으로 간 것처럼 상황에 따라 다른 의사결정을 했고, 각각의 트레이드오프를 정리해두는 것이 후속 유지보수에 도움이 됨