본문 바로가기
🔥 Data Engineer/Kafka

[Kafka] - 카프카 스키마 레지스트리(kafka Schema Registry)

by jyu_seo_ 2026. 1. 20.

들어가며

현대의 데이터 파이프라인에서 Apache Kafka는 필수적인 메세징 플랫폼이 되었다. 하지만 Kafka를 운영하다 보면 프로듀서와 컨슈머 간의 데이터 형식 불일치로 인한 문제에 직변하게 된다. 이러한 문제를 해결하기 위해 등장한 것이 바로 스키마 레지스트리(schema Registry)이다.

 

스키마 레지스트리가 필요한 이유

Kafka의 구조적 특징

kafka는 프로듀서(Producer)와 컨슈머(Consumer)사이의 직접적인 관계를 끊어 구조적 결합도를 낮춘다. 이는 큰 장점이지만, 동시에 새로운 문제를 이야기한다.

 

  • 프로듀서는 어떤 컨슈머가 메세지를 소비할 지 알지 못한다.
  • 컨슈머는 어떤 프로듀서가 메세지를 보냈는지 알지 못한다.
  • 브로커는 메세지를 Append-Only 로그 구조로 저장하여 한 번 저장된 메세지는 수정할 수 없다.

발생 가능한 문제 시나리오

다음과 같은 상황을 생각해보자

 

1. 프로듀서가 1과 2가 동일한 토픽에 메세지를 발행한다.

2. 갑자기 프로듀서 2가 메세지 스키마를 변경한다.

3. 컨슈머는 이 변경을 알지 못하고 새로운 형식의 메세지를 처리하려 시도한다.

4. 결과: 역직렬화 실패로 인한 애플리케이션 장애 발생

 

이러한 문제는 프로듀서와 컨슈머가 직렬화/역직렬화를 통해 강한 의존성(커플링)을 가지기 때문에 발생한다.

 

스키마 레지스트리란?

스키마 레지스트리(Schema Registry)는 Kafka 메세지의 스키마를 중앙에서 관리하고 검증하는 웹 애플리 케이션이다. Confluent에서 개발했고, 현재는 Kafka 생태계의 핵심 컴포넌트로 자리잡았다.

주요 기능

스키마 레지스트리는 다음과 같은 핵심 기능을 제공한다.

 

스키마 저장 및 관리 📚

  • 토픽별 메세지 Key/Value 스키마의 버전관리
  • RESTful API를 통한 스키마 등록,조회,검증

스키마 호환성 규칙 강제 🔒

  • Backward, Forward, Full, None 호환성 모드 지원
  • 스키마 진화(Schema Evolution)시 호환성 자동 검증

직렬화/역직렬화 최적화 

  • 전체 스키마 대신 스키마 ID만 메세지에 포함
  • 네트워크 페이로드 크기 대폭 감소

다양한 데이터 포맷 지원 🎯

  • Avro
  • JSON Schema
  • Protobuf

스키마 호환성 모드

스키마 레지스트리의 가장 중요한 기능은 스키마 호환성 규칙 강제이다.다음과 같은 호환성 모드를 제공한다.

1. Backward Compatibility (하위 호환성) 

  • 새로운 스키마로 이전 데이터를 읽을 수 있음
  • 사용 예: 필드 삭제, 기본값이 있는 필드 추가
  • 컨슈머를 먼저 업그레이드 하는 경우에 적합

2. Forward Compatibility (상위 호환성)

  • 이전 스키마로 새로운 데이터를 읽을 수 있음
  • 사용 예:필드 추가, 기본값이 있는 필드 삭제
  • 프로듀서를 먼저 업그레이드 하는 경우에 적합

3. Full Compatibility (완전 호환성)

  • Backward와 Forward 호환성을 모두 충족
  • 사용 예:기본값이 있는 필드 추가/삭제
  • 가장 안전하지만 제약이 많음

4. None(호환성 체크 안함)

  • 스키마 호환성을 검증하지 않음
  • 개발 초기 단계나 특수한 경우에만 사용 권장

스키마 레지스트리 작동 원리

프로듀서 측

1. 프로듀서가 메시지를 발행하기 전 스키마를 스키마 레지스트리에 등록
2. 스키마 레지스트리가 호환성을 검증하고 스키마 ID를 반환
3. 프로듀서는 메시지에 스키마 ID를 포함하여 직렬화
4. 직렬화된 메시지를 Kafka 토픽에 발행

컨슈머 측

1. 컨슈머가 메시지를 구독
2. 메시지 헤더의 스키마 ID를 추출
3. 스키마 ID를 사용하여 스키마 레지스트리에서 스키마를 조회
4. 조회한 스키마로 메시지를 역직렬화
5. 애플리케이션 로직 처리

 

이 과정에서 KafkaAvroSerializer/KafkaAvroDeserializer가 스키마 레지스트리와 통신하여 자동으로 스키마를 관리한다. 덕분에 개발자는 스키마 관리의 복잡성에서 벗어날 수 있다.

스키마 레지스트리의 장점

1. 데이터 품질 보장

  • 잘못된 형식의 데이터가 시스템에 유입되는 것을 원천 차단
  • 데이터 일관성과 정확성 향상

2. 시스템 안정성 향상

  • 스키마 변경으로 인한 장애 사전 예방
  • 프로듀서/컨슈머 간 계약(Contract)명확화

3. 개발 생산성 증대

  • 스키마 관리를 위한 커스텀 코드 불필요
  • 표준화된 방식으로 협업 용이

4. 운영 효율성 개선

  • 중앙 집중식 스키마 관리
  • 스키마 변경 이력 추적 가능
  • 데이터 거버넌스 강화

5. 성능 최적화

  • 전체 스키마가 아닌 스키마 ID만 전송
  • 네트워크 대역폭 절약
  • 처리 시간 단축

실전 적용 시 고려사항

1. 개발 규칙 수립

✓ 클라이언트는 스키마 레지스트리에서 배포받은 스키마 명세 사용
✓ 스키마 변경 시 호환성 모드 준수
✓ HTTP API를 통한 스키마 조회 및 등록

2. Avro 스키마 예시

{
	
	"type": "record",
    "name": "User",
    "namespace": "com.example",
    "fields": [
        {"name": "id", "type": "long"},
        {"name": "name", "type": "string"},
        {"name": "email", "type": "string", "default": ""}
    ]
}

3. 운영 Best Practices

  • 처음부터 스키마 레지스트리 도입: 나중에 추가하면 기존 코드 리팩토링 비용증가
  • 적절한 호환성 모드 선택:시스템 특성에 맞는 모드 설정
  • 스키마 네이밍 컨벤션 수립:일관된 명명 규칙으로 관리 용이성 확보
  • 모니터링 및 알림 설정:스키마 등록/검증 실패 시 즉시 감시

Confluent Cloud vs Self-Managed

Confluent Cloud

  • 완전 관리형 서비스
  • 자동 확장 및 고가용성
  • $400 무료 크레딧 제공
  • 인프라 관리 불필요

Self-Managed (Confluent Platform)

  • 온프레미스 또는 클라우드에 직접 설치
  • 완전한 제어권
  • 고급 커스터마이징 기능
  • Confluent Community License 적용

 

마치며

스키마 레지스트리는 단순한 스키마 저장소가 아니다. 대규모 Kafka 시스템의 데이터 품질, 안정성, 거버넌스를 보장하는 필수 컴포넌트 이다. 특히 다음과 같은 경우 스키마 레지스트리 도입을 강력히 권장한다.

 

  • 🔄 여러 팀이 동일한 Kafka 클러스터를 공유하는 경우
  • 📈 서비스 규모가 지속적으로 확장되는 경우
  • 🎯 데이터 품질과 일관성이 중요한 비즈니스인 경우
  • 🔐 데이터 거버넌스 규정을 준수해야 하는 경우

 

프로젝트 초기부터 스키마 레지스트리를 도입하면 장기적으로 개발 및 운영비용이 크게 절감할수 있다. 카프카를 활용하는 조직이라면 스키마 레지스트리 도입을 반드시 고려해보기 바란다.