SQL Server에서 ClickHouse로 데이터를 스트리밍해야 하는 이유는 무엇인가요?
- 프로덕션 앱 성능에 영향을 주지 않는 내부 보고
- 빠르고 항상 최신 상태를 유지해야 하는 고객 대상 대시보드
- 분석을 위해 사용자 활동 로그를 최신 상태로 유지하는 등의 이벤트 스트리밍
시작하기 전에 필요한 준비 사항
사전 요구사항
- 실행 중인 SQL Server 인스턴스
- 이 튜토리얼에서는 AWS RDS for SQL Server를 사용하지만, 최신 SQL Server 인스턴스라면 어느 것이든 사용할 수 있습니다.처음부터 AWS SQL Server 설정하기.
- ClickHouse 인스턴스
- 자체 호스팅 또는 클라우드.처음부터 ClickHouse 설정하기.
- Streamkap
- 이 도구는 데이터 스트리밍 파이프라인의 핵심 기반이 됩니다.
연결 정보
- SQL Server 서버 주소, 포트, 사용자 이름, 비밀번호. Streamkap이 SQL Server 데이터베이스에 액세스할 수 있도록 별도의 사용자와 역할을 만드는 것이 좋습니다.구성 방법은 문서를 참고하십시오.
- ClickHouse 서버 주소, 포트, 사용자 이름, 비밀번호. ClickHouse의 IP 액세스 목록은 어떤 서비스가 ClickHouse 데이터베이스에 연결할 수 있는지 제어합니다.여기의 지침을 따르십시오.
- 스트리밍할 테이블 — 지금은 하나만 먼저 시작하십시오
1
Streamkap에서 SQL Server 소스 생성하기
바로 시작해 보겠습니다!먼저 소스 연결을 설정하겠습니다. 이렇게 하면 Streamkap이 변경 사항을 어디서 가져와야 하는지 알 수 있습니다.설정 방법은 다음과 같습니다:
- Streamkap을 열고 소스 섹션으로 이동합니다.
- 새 소스를 생성합니다.
- 식별하기 쉬운 이름을 지정합니다(예: sqlserver-demo-source).
- SQL Server 연결 정보를 입력합니다:
- Host(예: your-db-instance.rds.amazonaws.com)
- Port(SQL Server의 기본값은 3306)
- 사용자 이름 및 비밀번호
- 데이터베이스 이름
내부에서 수행되는 작업
이 설정을 완료하면 Streamkap이 SQL Server에 연결해 테이블을 감지합니다. 이 데모에서는 events 또는 transactions처럼 이미 일부 데이터가 계속 스트리밍되고 있는 테이블을 선택하겠습니다.2
Streamkap에 ClickHouse 대상 추가
이제 이 모든 데이터를 보낼 대상을 연결하겠습니다.소스와 마찬가지로 ClickHouse 연결 정보를 사용해 대상을 생성하겠습니다.
단계:
- Streamkap의 대상 섹션으로 이동합니다.
- 새 대상을 추가한 다음, 대상 유형으로 ClickHouse를 선택합니다.
- ClickHouse 정보를 입력합니다:
- Host
- Port (기본값은 9000)
- Username and Password
- Database name
업서트 모드: 무엇인가요?
이 단계는 중요합니다. ClickHouse의 “업서트” 모드를 사용해야 합니다. 이 모드는 내부적으로 ClickHouse의 ReplacingMergeTree 엔진을 사용합니다. 이를 통해 들어오는 레코드를 효율적으로 머지하고, ClickHouse에서 “파트 병합”이라고 부르는 방식으로 수집 후 업데이트를 처리할 수 있습니다.- 이렇게 하면 SQL Server 쪽에서 변경이 발생하더라도 대상 테이블이 중복 데이터로 가득 차지 않도록 할 수 있습니다.
스키마 진화 처리
ClickHouse와 SQL Server는 항상 동일한 컬럼을 갖는 것은 아닙니다. 특히 애플리케이션이 운영 중이고 개발자가 필요에 따라 컬럼을 계속 추가하는 경우에는 더욱 그렇습니다.- 다행히 Streamkap은 기본적인 스키마 진화를 처리할 수 있습니다. 즉, SQL Server에 새 컬럼을 추가하면 ClickHouse 쪽에도 함께 반영됩니다.
3
Streamkap에서 파이프라인 설정하기
소스와 대상 설정이 끝났으니, 이제 본격적으로 데이터를 스트리밍할 차례입니다!
파이프라인 설정
-
Streamkap에서
Pipelines탭으로 이동하세요. - 새 파이프라인을 생성하세요.
-
SQL Server 소스(
sqlserver-demo-source)를 선택하세요. -
ClickHouse 대상(
clickhouse-tutorial-destination)을 선택하세요. -
스트리밍할 테이블을 선택하세요. 여기서는
events라고 가정하겠습니다. - Change Data Capture(CDC)용으로 구성하세요.
- 이번에는 새 데이터만 스트리밍합니다(처음에는 백필을 건너뛰고 CDC 이벤트에 집중해도 됩니다).
백필이 필요할까요?
이전 데이터를 백필해야 할지 궁금할 수 있습니다.많은 분석 사용 사례에서는 지금부터 발생하는 변경 사항만 스트리밍하는 것으로 시작해도 충분하지만, 필요하면 나중에 이전 데이터도 다시 적재할 수 있습니다.특별한 필요가 없다면 지금은 “don’t backfill”을 선택하세요.4
데이터 스트림 확인
이제 파이프라인 설정이 완료되어 활성화되었습니다!다음과 같은 일이 발생합니다:부하가 높은 상황에서는 다소 지연이 발생할 수 있지만, 대부분의 사용 사례에서는 거의 실시간에 가까운 스트리밍이 이루어집니다.
- SQL Server의 원본 테이블에 새 데이터가 들어오면 Streamkap 파이프라인이 변경 사항을 감지해 ClickHouse로 전송합니다.
- ClickHouse는 ReplacingMergeTree와 파트 병합 덕분에 이러한 행을 수집하고 업데이트를 머지합니다.
- 스키마도 자동으로 따라갑니다. SQL Server에 컬럼을 추가하면 ClickHouse에도 표시됩니다.
내부 동작: Streamkap은 실제로 무엇을 하나요?
- Streamkap은 SQL Server의 바이너리 로그(복제에 사용하는 바로 그 로그)를 모니터링합니다.
- 테이블에서 행이 삽입, 업데이트 또는 삭제되는 즉시 Streamkap이 그 이벤트를 포착합니다.
- 이 이벤트를 ClickHouse가 이해할 수 있는 형태로 변환한 뒤 전송하여 분석 DB에 변경 사항을 즉시 반영합니다.
고급 옵션
업서트 모드 vs. 삽입 모드
- 삽입 모드: 모든 새 행이 추가되므로 업데이트인 경우에도 중복이 발생합니다.
- 업서트 모드: 기존 행에 대한 업데이트는 기존 값을 덮어쓰므로 분석 데이터를 최신 상태로 깔끔하게 유지하는 데 훨씬 유리합니다.
스키마 변경 처리
- 운영 테이블에 새 컬럼을 추가하셨습니까? Streamkap이 이를 감지해 ClickHouse 측에도 해당 컬럼을 추가합니다.
- 컬럼을 제거하셨습니까? 설정에 따라 마이그레이션이 필요할 수 있지만, 컬럼 추가는 대부분 문제없이 처리됩니다.
실제 운영 환경 모니터링: 파이프라인 상태 추적하기
파이프라인 상태 확인
- 파이프라인 지연 시간(데이터가 얼마나 최신 상태인지)을 확인합니다
- 행 수와 처리량을 모니터링합니다
- 이상이 있으면 알림을 받습니다
확인해야 할 주요 메트릭
- 지연(Lag): ClickHouse가 SQL Server보다 얼마나 뒤처져 있는지
- 처리량(Throughput): 초당 행 수
- 오류율(Error Rate): 0에 가까워야 합니다
실전 시작: ClickHouse 쿼리하기
다음 단계와 심화 학습
- 필터링된 스트림 설정(일부 테이블/컬럼만 동기화)
- 여러 source를 하나의 분석용 DB로 스트리밍
- 콜드 스토리지를 위해 S3/데이터 레이크와 결합
- 테이블 변경 시 스키마 migration 자동화
- SSL 및 방화벽 규칙으로 파이프라인 보호
FAQ 및 문제 해결
마무리
- 업서트와 삽입의 차이, 그리고 각각의 세부 사항
- 엔드 투 엔드 지연 시간: 최종 분석 뷰를 얼마나 빠르게 확보할 수 있을까요?
- 성능 튜닝과 처리량
- 이 스택을 기반으로 한 실제 대시보드 사례