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 데이터베이스에 연결할 수 있는지 제어합니다.여기의 지침을 따르십시오.
- 스트리밍할 테이블 — 지금은 하나만 먼저 시작하십시오
SQL Server를 소스로 설정하기
1단계: Streamkap에서 SQL Server 소스 만들기
- Streamkap을 열고 소스 섹션으로 이동합니다.
- 새 소스를 생성합니다.
- 알아보기 쉬운 이름을 지정합니다(예: sqlserver-demo-source).
- SQL Server 연결 정보를 입력합니다:
- Host(예: your-db-instance.rds.amazonaws.com)
- Port(SQL Server의 기본값은 3306)
- Username 및 Password
- 데이터베이스 이름
내부적으로 어떤 일이 일어나는지
ClickHouse 대상 생성
2단계: Streamkap에서 ClickHouse 대상 추가
단계:
- Streamkap의 대상 섹션으로 이동합니다.
- 새 대상을 추가한 다음, 대상 유형으로 ClickHouse를 선택합니다.
- ClickHouse 정보를 입력합니다.
- 호스트
- 포트(기본값: 9000)
- 사용자 이름 및 비밀번호
- 데이터베이스 이름
업서트 모드란 무엇인가요?
- 이렇게 하면 SQL Server 쪽에서 변경이 발생하더라도 대상 테이블에 중복 데이터가 쌓이지 않도록 할 수 있습니다.
스키마 변경 처리
- 다행히 Streamkap은 기본적인 스키마 변경을 처리할 수 있습니다. 즉, SQL Server에 새 컬럼을 추가하면 ClickHouse 쪽에도 해당 컬럼이 표시됩니다.
스트리밍 파이프라인 구축
3단계: Streamkap에서 파이프라인 설정하기
파이프라인 설정
- Streamkap의 Pipelines 탭으로 이동하세요.
- 새 파이프라인을 생성하세요.
- SQL Server 소스(sqlserver-demo-source)를 선택하세요.
- ClickHouse 대상(clickhouse-tutorial-destination)을 선택하세요.
- 스트리밍할 테이블을 선택하세요. 여기서는 events라고 가정하겠습니다.
- CDC(Change Data Capture)로 구성하세요.
- 이번 실행에서는 새 데이터만 스트리밍합니다(처음에는 백필은 건너뛰고 CDC 이벤트에 집중해도 됩니다).
과거 데이터를 백필해야 할까요?
스트리밍 동작: 기대할 수 있는 사항
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 및 문제 해결
마무리
- 업서트와 삽입의 차이, 그리고 각각의 세부 사항
- 엔드 투 엔드 지연 시간: 최종 분석 뷰를 얼마나 빠르게 확보할 수 있을까요?
- 성능 튜닝과 처리량
- 이 스택을 기반으로 한 실제 대시보드 사례