메인 콘텐츠로 건너뛰기

소개

Amazon Redshift는 Amazon Web Services에서 제공하는 대표적인 클라우드 데이터 웨어하우징 솔루션입니다. 이 가이드에서는 Redshift 인스턴스에서 ClickHouse로 데이터를 마이그레이션하는 다양한 접근 방식을 소개합니다. 여기서는 다음 3가지 옵션을 살펴봅니다: ClickHouse 인스턴스 기준으로는 다음 중 하나를 선택할 수 있습니다:
  1. PUSH 타사 ETL/ELT 도구 또는 서비스를 사용해 데이터를 ClickHouse로 전송합니다
  2. PULL ClickHouse JDBC Bridge를 활용해 Redshift에서 데이터를 가져옵니다
  3. PIVOT S3 객체 스토리지를 사용해 “언로드 후 로드” 방식으로 데이터를 이동합니다
이 튜토리얼에서는 데이터 소스로 Redshift를 사용했습니다. 하지만 여기서 소개하는 마이그레이션 방식은 Redshift에만 국한되지 않으며, 호환되는 모든 데이터 소스에도 유사하게 적용할 수 있습니다.

Push 방식으로 Redshift에서 ClickHouse로 데이터 전송

Push 시나리오에서는 타사 도구나 서비스(사용자 지정 코드 또는 ETL/ELT)를 활용해 데이터를 ClickHouse 인스턴스로 전송합니다. 예를 들어, Airbyte와 같은 소프트웨어를 사용해 Redshift 인스턴스를 소스로, ClickHouse를 대상으로 하여 데이터를 이동할 수 있습니다(Airbyte 통합 가이드 보기)

장점

  • ETL/ELT 소프트웨어에서 기존에 제공하는 커넥터 카탈로그를 활용할 수 있습니다.
  • 데이터를 동기화된 상태로 유지할 수 있는 기본 기능(append/overwrite/increment 로직)이 내장되어 있습니다.
  • 데이터 변환 시나리오를 구현할 수 있습니다(예를 들어, dbt 통합 가이드를 참조하십시오).

단점

  • ETL/ELT 인프라를 구축하고 유지 관리해야 합니다.
  • 아키텍처에 서드파티 요소가 추가되어 잠재적인 확장성 병목이 될 수 있습니다.

Redshift에서 ClickHouse로 데이터 가져오기

Pull 시나리오에서는 ClickHouse JDBC Bridge를 사용하여 ClickHouse 인스턴스에서 Redshift 클러스터에 직접 연결한 뒤 INSERT INTO ... SELECT 쿼리를 수행합니다:

장점

  • 모든 JDBC 호환 도구에서 사용할 수 있습니다
  • ClickHouse 내에서 여러 외부 데이터 소스를 쿼리할 수 있게 해주는 효율적인 솔루션입니다

단점

  • 잠재적인 확장성 병목이 될 수 있는 ClickHouse JDBC Bridge 인스턴스가 필요합니다
Redshift는 PostgreSQL 기반이지만, ClickHouse는 PostgreSQL 버전 9 이상을 요구하고 Redshift API는 그보다 이전 버전(8.x)을 기반으로 하므로 ClickHouse PostgreSQL 테이블 함수 또는 테이블 엔진은 사용할 수 없습니다.

튜토리얼

이 옵션을 사용하려면 ClickHouse JDBC Bridge를 설정해야 합니다. ClickHouse JDBC Bridge는 JDBC 연결을 처리하고 ClickHouse 인스턴스와 데이터 소스 사이에서 프록시 역할을 하는 독립형 Java 애플리케이션입니다. 이 튜토리얼에서는 샘플 데이터베이스가 미리 구성된 Redshift 인스턴스를 사용했습니다.
1

ClickHouse JDBC Bridge 배포

ClickHouse JDBC Bridge를 배포합니다. 자세한 내용은 외부 데이터 소스용 JDBC 사용자 가이드를 참조하십시오.
ClickHouse Cloud를 사용하는 경우에는 별도의 환경에서 ClickHouse JDBC Bridge를 실행한 뒤 remoteSecure 함수를 사용해 ClickHouse Cloud에 연결해야 합니다.
2

Redshift 데이터 소스 구성

ClickHouse JDBC Bridge에서 사용할 Redshift 데이터 소스를 구성합니다. 예: /etc/clickhouse-jdbc-bridge/config/datasources/redshift.json
3

ClickHouse에서 Redshift 인스턴스 쿼리

ClickHouse JDBC Bridge가 배포되어 실행 중이면 ClickHouse에서 Redshift 인스턴스를 쿼리할 수 있습니다.
4

Redshift에서 ClickHouse로 데이터 가져오기

다음에서는 INSERT INTO ... SELECT 문을 사용해 데이터를 가져오는 방법을 보여줍니다.

S3를 사용해 Redshift 데이터를 ClickHouse로 피벗

이 시나리오에서는 데이터를 중간 피벗 포맷으로 S3에 내보내고, 두 번째 단계에서 S3의 데이터를 ClickHouse로 적재합니다.

장점

  • Redshift와 ClickHouse는 모두 강력한 S3 통합 기능을 제공합니다.
  • Redshift UNLOAD 명령과 ClickHouse S3 테이블 함수 / 테이블 엔진 같은 기존 기능을 활용할 수 있습니다.
  • ClickHouse의 S3 대상 병렬 읽기와 고처리량 capability를 통해 원활하게 확장할 수 있습니다.
  • Apache Parquet와 같은 고급 압축 포맷을 활용할 수 있습니다.

단점

  • 프로세스가 2단계로 진행됩니다(Redshift에서 언로드한 후 ClickHouse로 로드).

튜토리얼

1

UNLOAD를 사용해 데이터를 S3 버킷으로 내보내기

Redshift의 UNLOAD 기능을 사용하여 데이터를 기존의 비공개 S3 버킷으로 내보내십시오:그러면 S3에 원시 데이터가 들어 있는 part 파일이 생성됩니다.
2

ClickHouse에 테이블 생성하기

ClickHouse에 테이블을 생성하십시오:
또는 CREATE TABLE ... EMPTY AS SELECT를 사용하여 ClickHouse가 테이블 구조를 추론하도록 할 수 있습니다:
이 방법은 Parquet처럼 데이터 타입 정보가 포함된 포맷에서 특히 잘 작동합니다.
3

S3 파일을 ClickHouse로 로드하기

INSERT INTO ... SELECT 문을 사용하여 S3 파일을 ClickHouse로 로드하십시오:
이 예시에서는 CSV를 피벗 포맷으로 사용했습니다. 하지만 프로덕션 워크로드에서는 대규모 마이그레이션에 가장 적합한 옵션으로 Apache Parquet를 권장합니다. 압축이 적용되므로 전송 시간을 줄이면서 스토리지 비용도 일부 절감할 수 있기 때문입니다. (기본적으로 각 row group은 SNAPPY를 사용해 압축됩니다.) 또한 ClickHouse는 Parquet의 컬럼 지향 구조를 활용하여 데이터 수집 속도를 높입니다.
마지막 수정일 2026년 7월 2일