데이터 계약을 구현하는 최적의 조합, 아파치 카프카와 플링크
컨텐츠 정보
- 조회 386
본문
새벽 3시, 호출기가 울린다고 상상해보자. 다운스트림 서비스가 멈춰섰고, 한 시간 넘게 디버깅한 끝에 문제의 원인이 업스트림 팀이 문서화 없이 적용한 작은 스키마 변경이라는 사실을 겨우 찾아낸다. 수정 자체는 간단하지만, 잠 못 이루는 밤과 운영 중단이라는 대가가 따른다.
이런 상황은 오늘날 데이터 파이프라인에서 흔히 벌어진다. 분산 시스템을 구축하는 기술은 발전했지만, 정작 핵심인 데이터에 대한 합의는 종종 소홀히 다뤄져 왔다. 이 지점을 보완하려는 개념이 데이터 계약(data contract)이며, 이를 제대로 강제할 수 있는 도구가 없다면 데이터 계약은 쉽게 무너진다.
데이터 계약의 중요성
데이터 파이프라인은 데이터베이스, 애플리케이션, 로그, 마이크로서비스 등 다양한 소스에서 생산된 데이터를 소비자에게 전달해 이벤트 기반 애플리케이션을 구현하거나 분석·처리를 가능하게 하는 수단으로 널리 사용된다. 그러나 많은 파이프라인이 생산되는 데이터에 대한 명확한 사양 없이, 그리고 소비자가 어떤 데이터를 필요로 하는지에 대한 피드백 없이 즉흥적으로 구축돼 왔다. 그 결과, 업스트림에서 소비자가 예상하거나 처리할 수 없는 임의 변경이 발생하는 일이 드물지 않다. 결국 운영 장애와 원인 파악에 막대한 시간·비용이 소요되는 문제로 이어진다.
데이터 계약은 이런 문제를 막기 위해 등장했다.
데이터 계약을 설계하려면 소프트웨어 개발 초기 단계에서 데이터 생산자와 소비자가 함께 요구사항을 정의하고 조율해야 한다. 요구사항을 명확히 정의하고 문서화하면 파이프라인 설계가 단순해지고, 계약에 명시되지 않은 데이터 변경으로 인해 소비자에게 발생하는 오류를 줄이거나 없앨 수 있다.
데이터 계약은 데이터 생산자와 소비자 간의 합의로, 공유되는 데이터의 스키마, 데이터 유형, 품질 제약 등을 정의한다. 데이터 파이프라인은 분산 소프트웨어를 활용해 생산자에서 소비자까지 이어지는 데이터 흐름과 변환 과정을 관리한다. 파이프라인이 안정적이고 제대로 설계되려면 데이터 계약이 핵심 기반이 된다.
데이터 계약이 필요한 이유
그렇다면 데이터 계약은 개발자와 비즈니스 모두에게 왜 중요할까? 첫째, 데이터 계약은 업스트림에서 발생하는 예상치 못한 데이터 변경을 차단해 운영 중단을 막고, 그에 따른 운영 비용을 줄여준다.
둘째, 디버깅과 장애 수정에 투입되는 개발자 시간을 줄여준다. 개발자가 소비자에게 미치는 영향을 모른 채 데이터를 수정할 때 다운스트림에서 여러 오류가 발생하는데, 데이터 계약은 이런 영향도를 미리 이해할 수 있게 한다.
셋째, 데이터 계약은 명확하게 정의되고 재사용 가능한 데이터 제품을 개발하는 데 중요한 기반이 된다. 소비자는 분석이나 애플리케이션 개발에 활용할 수 있는 형태의 데이터 제품을 만들 수 있다.
또한 데이터 계약을 활용하면 소비자와 생산자가 스키마 및 기타 변경 사항을 사전에 정의할 수 있다. 계약에는 스키마 전환 절차도 포함해야 하며, 이를 통해 소비자가 중단 없이 새 스키마와 해당 계약으로 자연스럽게 이전할 수 있다.
데이터 계약의 핵심 요건 3가지
최근 들어 데이터 계약에 대한 관심이 높아진 이유는 기업이 데이터 기반 운영 제품을 구축할 때 데이터가 생성되는 업스트림 영역에 초점을 옮기는 것이 효과적이라는 사실을 인식했기 때문이다. 이 접근 방식은 흔히 ‘시프트 레프트(shift left)’라고 불린다.
시프트 레프트 데이터 파이프라인 설계에서는 다운스트림 소비자가 자신들이 필요한 데이터 제품의 요구사항을 업스트림 생산자에게 전달할 수 있다. 이 요구사항은 정제되고 구조화돼 데이터 계약으로 반영된다.
데이터 계약을 도입하려면 다음 3가지 요소가 필요하다.
- 명세화 : 데이터 계약을 정의하는 과정
- 구현 : 데이터 파이프라인에 계약을 실제로 반영하는 과정
- 강제 : 계약 내용을 실시간으로 준수하도록 보장하는 과정
이 요소를 실현하는 기술은 다양하지만, 그중에서도 아파치 카프카(Apache Kafka)와 아파치 플링크(Apache Flink)가 가장 적합한 기술로 꼽힌다.
데이터 계약을 위한 아파치 카프카와 플링크
아파치 카프카와 아파치 플링크는 확장성, 폭넓은 활용성, 낮은 지연 시간 덕분에 데이터 파이프라인과 데이터 계약 구축에 널리 사용되는 기술이다. 이 두 기술은 생산자와 소비자 간에 공유 저장소 역할을 제공한다. 특히 카프카는 생산자가 스키마, 데이터 유형, 직렬화 포맷(암묵적으로 포함됨)을 소비자에게 전달할 수 있게 한다. 이 공유 정보는 플링크가 생산자와 소비자 사이에서 이동하는 데이터를 변환하는 데도 활용된다.
아파치 카프카는 높은 처리량, 내결함성, 확장성을 갖춘 분산 이벤트 스트리밍 플랫폼으로, 공유 데이터 파이프라인 구축에 적합하다. 카프카는 분산 로그처럼 동작해 생산자가 데이터를 특정 토픽에 발행하면 소비자가 비동기 방식으로 구독할 수 있다. 각 토픽에는 스키마, 정의된 데이터 타입, 데이터 품질 규칙이 적용된다. 카프카는 레코드(이벤트) 스트림을 안정적이고 분산된 방식으로 저장·처리할 수 있으며, 데이터 파이프라인, 스트리밍 분석, 이벤트 기반 아키텍처 구축에 널리 활용된다.
아파치 플링크는 실시간 데이터와 배치 데이터를 고성능·확장성·내결함성 있게 처리하도록 설계된 분산 스트림 처리 프레임워크다. 플링크는 대규모 데이터 스트림을 낮은 지연과 높은 처리량으로 처리하는 데 강점을 지니며, 실시간 분석, 이벤트 기반 애플리케이션, 데이터 처리 파이프라인에서 널리 사용된다.
플링크는 카프카와 함께 활용되는 경우가 많다. 카프카를 스트리밍 데이터의 소스 또는 싱크로 사용하고, 카프카가 이벤트 스트림의 수집·저장을 담당하는 동안 플링크는 이를 분석하거나 변환해 처리한다. 예를 들어 플링크 작업은 카프카 토픽에서 이벤트를 읽어 집계를 수행한 뒤, 그 결과를 다시 다른 카프카 토픽이나 데이터베이스에 기록할 수 있다.
카프카는 스키마 버전 관리를 지원하며, 시간이 지나면서 진화하는 동일 데이터 계약의 여러 버전을 동시에 운영할 수 있다. 카프카는 기존 스키마와 새로운 스키마를 병행해 유지할 수 있어 신규 클라이언트는 새 스키마를 사용하고 기존 클라이언트는 기존 스키마를 계속 사용할 수 있다. 플링크의 구체화된 뷰(materialized view) 기능도 이런 호환성을 제공하는 데 도움이 된다.
카프카와 플링크가 데이터 계약 구현에 기여하는 방식
카프카와 플링크는 앞서 언급한 3가지 요건(명세화, 구현, 강제)을 충족하는 데이터 계약을 구축하는 데 매우 효과적인 기술이다. 두 기술은 오픈소스 기반이기 때문에 다른 오픈소스 도구나 표준으로 구성된 데이터 파이프라인 요소와도 자연스럽게 연동된다. 이를 통해 데이터 계약을 정의하고 구현하며 강제할 수 있는 공통 언어와 인프라가 마련된다.
플링크는 데이터 계약을 준수하도록 강제하는 동시에 필요할 경우 생산자와 소비자의 요구에 맞춰 계약을 진화시킬 수 있으며, 일부 경우에는 생산자 코드를 수정하지 않고도 가능하다. 카프카는 데이터 계약 명세를 지원하고 실질적인 구현을 가능하게 하는 공통 언어 역할을 한다.
카프카와 플링크는 데이터 계약으로 정교하게 설계된 데이터 제품의 재사용을 촉진한다. 카프카는 데이터 저장·공유 기술로, 추가 소비자나 파이프라인이 동일한 데이터 제품을 쉽게 활용하도록 지원한다. 이는 강력한 형태의 소프트웨어 재사용이다. 또한 카프카와 플링크는 동일한 공유 인프라 내에서 한 데이터 계약의 데이터를 다른 계약의 요구사항에 맞도록 변환·조정할 수 있다.
카프카는 직접 배포하고 운영할 수도 있고, 카프카 클라우드 서비스를 활용해 운영을 위탁할 수도 있다. 상용 솔루션과 달리 카프카는 특정 생산자·소비자에 대한 제약이 거의 없기 때문에 누구나 생산자나 소비자로 참여할 수 있다.
데이터 계약이 관리하는 모든 데이터가 단일 데이터베이스에 모여 있다면 그 안에서 계약을 강제할 수도 있을 것이다. 하지만 오늘날 애플리케이션은 대개 다양한 데이터 소스를 사용해 구축된다. 예를 들어 데이터 스트리밍 애플리케이션은 여러 데이터 생산자가 여러 소비자에게 데이터를 지속적으로 전송한다. 따라서 데이터 계약은 서로 다른 데이터베이스, API, 애플리케이션 전반에서 일관적으로 강제돼야 한다.
생산자 쪽에서 데이터 계약을 정의하고 협력해 필요한 형태의 데이터를 받을 수도 있다. 하지만 생산자 측에서 계약을 강제하는 방식은 복잡하고 침투적이다. 각 데이터 생산자는 저마다의 인증·보안 체계를 갖고 있으며, 계약 아키텍처를 모든 생산자에 맞게 조정해야 한다. 새로운 생산자가 추가될 때마다 이를 수용해야 하는 문제도 생긴다. 여기에 스키마, 메타데이터, 보안은 지속적으로 변경된다. 카프카를 사용하면 이런 변경 사항을 한 곳에서 통합 관리할 수 있다.
카프카는 생산자와 소비자 사이에 위치한다. 카프카 스키마 레지스트리를 활용하면 생산자와 소비자가 데이터 계약에서 기대하는 바를 상호 전달할 수 있다. 또한 카프카 토픽은 재사용이 가능해 데이터 계약을 그대로 재사용하거나, 점진적으로 수정한 뒤 다시 사용할 수도 있다
카프카는 모든 데이터 생산자를 위한 공통적이고 표준화된 보안·데이터 인프라를 제공한다. 생산자와 협력해 카프카 단에서 스키마를 설계·관리·강제할 수 있으며, 데이터 계약을 깨뜨릴 수 있는 변화도 이 단계에서 감지해 처리할 수 있다.
데이터 계약의 구현은 단순해야 하며, CI/CD를 포함한 기존 도구에 자연스럽게 통합돼야 한다. 카프카는 범용성, 오픈소스 기반, 확장성, 데이터 재사용성 덕분에 데이터 계약 기반 데이터 제품을 제공하는 사실상 표준으로 자리잡았다.
데이터 계약을 구축하는 베스트 프랙티스
데이터 엔지니어 또는 개발자에게 데이터 계약은 더 낮은 비용으로 더 나은 소프트웨어와 사용자 경험을 제공하는 데 도움이 된다. 데이터 계약을 파이프라인과 데이터 제품에 적용할 때 참고할 만한 베스트 프랙티스를 정리했다.
- 스키마 형식 표준화 : 강력한 타입 지정과 호환성을 제공하는 아브로(Avro) 또는 프로토콜 버퍼(Protobuf)를 카프카 스키마 형식으로 사용하는 것이 좋다. JSON 스키마도 대안이 될 수 있지만 효율성은 떨어진다.
- 검증 자동화 : 배포 전에 CI/CD 파이프라인을 활용해 스키마 변경이 기존 호환성 규칙을 준수하는지 검증해야 한다. 카프카 토픽 스키마의 구성·초기화·변경을 담당하는 코드가 CI/CD 워크플로와 커밋 과정에 포함되도록 해야 한다.
- 점진적 버전 관리 : 스키마 버전은 의미 기반 버전 체계(예 : v1.0.0, v1.1.0)를 사용해 관리하고, 변경 내용을 문서화해야 한다. 이 과정은 CI/CD 워크플로와 런타임 호환성 검사에 포함돼야 한다.
- 모니터링 및 알림 : 카프카 토픽이나 플링크 작업에서 스키마·타입 위반이나 데이터 품질 문제를 감지하는 알림 시스템을 구축해야 한다.
- 팀 간 협업 : 생산자와 소비자(예 : 서로 다른 팀의 플링크 작업)가 계약 내용에 사전에 합의해 불일치를 방지해야 한다. 개발자, 비즈니스 분석가, 데이터 엔지니어가 함께 계약 사양을 정의·조정·진화시킬 수 있도록 그래픽 기반 협업 도구를 활용하는 것이 좋다.
- 스키마 진화 테스트 : 스테이징 환경에서 스키마 변경을 시뮬레이션해 카프카 토픽 및 플링크 작업과의 호환성을 검증해야 한다.
카프카를 활용해 데이터 계약을 구축하는 방법에 대한 더 자세한 내용은 여기에서 확인할 수 있다.
데이터 계약을 위한 핵심 기능
카프카와 플링크는 스키마, 데이터 유형, 데이터 품질 규칙을 정의할 수 있는 공통 언어를 제공한다. 이 공통 언어는 개발자 사이에서 공유되고 이해되며, 특정 데이터 생산자나 소비자에 구애받지 않는다는 장점이 있다. 카프카와 플링크는 조직 내에서 데이터 계약을 실용적이고 확산 가능하게 만드는 중요한 기능을 갖추고 있다.
- 다양한 데이터 생산자와 소비자를 폭넓게 지원한다.
- 오픈소스 기반 덕분에 활용도와 이해도가 넓다.
- 온프레미스, 클라우드 네이티브, BYOC(Bring Your Own Cloud) 등 다양한 방식으로 구현이 가능하다.
- 소규모부터 대규모까지 확장해 운영할 수 있다.
- 시간이 지나며 진화하는 데이터 계약과 스키마를 수정하는 기능을 제공한다.
- 각기 다른 데이터 계약을 가진 여러 스트림을 조인할 때 스키마를 진화시키고 계약을 재사용하는 정교한 메커니즘을 지원한다.
데이터 계약을 도입하려면 생산자와 소비자의 협업을 장려하는 새로운 문화와 사고방식이 필요하다. 소비자는 개발자와 데이터 아키텍트의 도움을 받아 생산자와 함께 스키마와 데이터 파이프라인 요구사항을 설계하고 정의해야 한다.
카프카와 플링크를 활용하면 생산자와 소비자가 협업해 만든 데이터 계약을 정의하고 구현하며 강제하는 과정이 훨씬 수월해진다. 이를 통해 데이터 파이프라인을 더 빠르게 구축하고, 더 효율적으로 운영하며, 중단 없는 환경에서 비즈니스에 더 큰 가치를 제공할 수 있다.
dl-itworldkorea@foundryco.com
관련자료
-
링크
-
이전
-
다음






