개발공부

Debezium이란 무엇인가?

Mactto 2023. 12. 21. 00:06
728x90

1. What is Debezium? (데비지움이란?)

Debezium은 변경 데이터 캡처를 위한 오픈 소스 분산 플랫폼입니다.
간단하게, 데이터베이스에 Insert or Update or Delete가 발생할 경우 이를 감지하고 변경 내용을 캡처해 이벤트로 변환하는 도구입니다.

Debezium 공식 문서를 읽어보면 이벤트 스트리밍 플랫폼으로 가장 일반적으로 Kafka를 사용한다고 소개할 정도로 Kafka와 함께 사용한다면 분산 시스템 환경에서 데이터 변경을 쉽게 감지하고 전달할 수 있습니다.

2. How does Debezium detect changes? (데비지움은 어떻게 데이터 변경을 감지할까?)

Debezium은 수많은 데이터베이스를 지원하지만 PostgreSQL을 기준으로 설명드리겠습니다.

공식문서에 따르면 Debezium은 PostgreSQL의 논리적 복제 스트림에서 읽는다고 합니다.
쉽게 말해, PostgreSQL의 로그 파일을 읽어서 변경 내역을 읽는 방식입니다.

서비스를 운영하면서 PostgreSQL에 데이터가 insert, update, delete가 되는 것 뿐만 아니라 테이블 스키마의 변경까지 로그로 남기 때문에 Debezium은 이 로그를 보고 데이터의 변경 내역을 감지할 수 있습니다.

PostgreSQL에서는 wal_level이라는 값이 있는데
이 설정이 로그를 남기는 방식을 결정하며 Debezium이 읽는 논리적 복제 스트림을 남기기 위해서는
wal_level을 logical로 해야만 합니다. (wal_level에 관련된 내용은 다른 포스팅에서 다룰 예정입니다.)

logical 방식에 대해 간단히만 설명드리면 변경 사항이 발생할 경우 변경되는 내용에 생략 없이 전체를 로깅합니다.
예를들어 [1,2,3,4]가 있는데 만약 [10,2,3,4]로 수정이 되었다면 다른 방식에서는 변경된 10만 기록하여 효율성을 얻을 수 있지만 logical 방식에서는 10 뿐만 아니라 2,3,4까지 함께 기록하여 모든 내용을 생략없이 기록합니다.

또 PostgreSQL은 일반적으로 일정 시간이 지난 후 로그를 제거하는데
이말은 즉슨, PostgreSQL 로그가 모든 내용을 기록하고 있지 않음을 의미합니다.
이러면 Debezium을 연결하더라도 분산 시스템에서 데이터 일관성이 지켜지지 않을 수 있는데
Debezium은 이 문제를 아래와 같이 풀어냈습니다.

 

  1. 처음 Debezium과 PostgreSQL이 연결되면 Debezium은 현재 PostgreSQL의 상태에 대한 스냅샷을 찍습니다.
    (현재 상태와 데이터에 대한 사진을 찍는다고 보시면 됩니다.)
  2. 이후부터 Insert, Update, Delete 로그를 감지합니다.

3. Benefits of Debezium (데비지움을 사용하여 얻을 수 있는 이점)

대표적으로 분산 시스템에서 데이터 변경을 감지하는 방법으로 지속적으로 일정 주기마다 데이터 변경 내용이 있는지 요청하는 풀링 방식이 있는데
풀링 방식과 비교해 CDC 방식인 Debezium을 사용했을때 얻을 수 있는 장점은 다음과 같습니다.

 

1. 에러 발생해도 데이터 유실을 방지할 수 있다.

 

Debezium은 데이터베이스의 로그를 읽기 때문에 정확한 적용 순서에 따라 모든 데이터 변경 사항의 전체 목록을 얻을 수 있습니다.
풀릭 방식의 경우 부득이하게 풀링에 실패했을 경우 데이터 변경 사항이 유실되는 경우가 있을 수 있습니다. 물론 실패 시 재요청을 보내는 등의 대안을 낼 수 있지만 이는 성능 상의 이슈를 발생시킵니다.
하지만 Debezium은 캡처한 wal 시점을 기록하고 있기 때문에 에러가 발생하더라도 마지막 읽은 wal 이후부터 적용이 가능해 성능 이슈 없이 대응이 가능합니다.

 

2. 스키마에 영향을 주지 않고 변경 데이터 캡처가 가능함

 

풀링 방식의 경우 스키마에 마지막 풀링 시점을 기록하는 특정 열이 필요합니다.
이는 기능상으로는 괜찮을 수 있지만 테이블 목적에는 맞지 않는 열이 추가되는 것입니다.
하지만 Debezium은 이러한 열의 추가 없이 변경 내용 캡처를 수행할 수 있습니다.

 

3. 삭제 캡처가 가능하다.

 

풀링 방식의 경우 삭제 요청으로 데이터베이스에서 row 자체가 삭제될 경우 이를 감지할 수 없습니다. (Soft Delete가 아니라는 가정 하에)
하지만 당연하게도 Debezium은 삭제 캡처 또한 가능합니다.

Reference

728x90