RisingWave v2.5 주요 기능 소개: Iceberg 통합·백필 제어·AI 임베딩 by OpenAI (한글 번역)
RisingWave는 실시간 이벤트 스트리밍 플랫폼으로, 실시간 이벤트 데이터를 가장 간단하고 비용 효율적인 방식으로 처리·분석·관리할 수 있도록 설계되었습니다. 또한 Apache Iceberg™ 오픈 테이블 포맷을 기본 지원합니다. Postgres와 호환되는 SQL 인터페이스와 DataFrame 스타일의 Python 인터페이스를 모두 제공합니다.
RisingWave는 초당 수백만 건의 이벤트를 수집하고, 실시간 스트림과 과거 데이터를 지속적으로 조인·분석하며, 저지연으로 애드혹 쿼리를 처리하고, 최신의 일관된 결과를 Apache Iceberg™ 또는 다른 다운스트림 시스템에 저장할 수 있습니다.
RisingWave v2.5 릴리스를 발표하게 되어 매우 기쁩니다! 이번 업데이트는 Apache Iceberg 통합 심화, 머티리얼라이즈드 뷰 백필(backfill) 순서에 대한 세밀한 제어, 부하 상황에서의 조인 처리 개선, 새로운 SQL 구문 기능 등 다양한 영역에서 주요 향상을 제공합니다.
아래에서 이번 버전의 주요 기능을 살펴보세요. v2.5 업데이트 전체 목록은 릴리스 노트에서 확인할 수 있습니다.
Apache Iceberg 통합 기능 향상
이번 릴리스에서는 Apache Iceberg 네이티브 통합이 크게 향상되었습니다. 데이터 관리 개선, 설정 단순화, 더 강력한 데이터 싱크 기능이 핵심입니다.
Iceberg 컴팩션(compaction): RisingWave는 이제 Iceberg 테이블 엔진과 Iceberg 싱크에 대해 자동 컴팩션을 지원합니다.
enable_compaction=true와 같은 간단한 옵션을 통해 테이블 또는 싱크 설정에서 주기적 컴팩션과 스냅샷 만료를 직접 활성화할 수 있습니다. 이 중요한 유지보수 작업은 작은 데이터 파일을 더 크고 최적화된 파일로 병합해 읽기 성능을 크게 향상시키며, AWS Glue나 Spark와 같은 외부 서비스가 필요하지 않습니다.사용자 정의 데이터 파티셔닝: Iceberg 테이블 생성 시
partition_by절을 사용해 파티셔닝 전략을 정의할 수 있습니다. 이를 통해 데이터를 논리적인 구조로 조직하여 효율적인 파티션 프루닝과 더 빠른 쿼리 수행이 가능합니다.외부 설정 파일 지원: 새로운
enable_config_load옵션을 사용하면 Iceberg 속성을 호스트 시스템의 설정 파일에서 직접 로드할 수 있습니다. 이를 통해 DDL을 깔끔하게 유지하고, 싱크·소스·연결·테이블 엔진 전반에서 자격 증명 및 복잡한 설정을 쉽게 관리할 수 있습니다.
자세한 내용은 Iceberg와의 상호작용 문서를 참고하세요.
백필 순서 제어
이제 CREATE MATERIALIZED VIEW의 WITH 절에서 backfill_order 옵션을 사용할 수 있습니다. 이 기능은 조인 증폭(join amplification)이나 불필요한 업데이트와 같은 프로덕션 워크로드의 심각한 성능 문제를 완화하기 위해 설계되었습니다.
백필 순서를 제어하려면 WITH 절에 backfill_order = FIXED(...) 옵션을 사용합니다. -> 연산자는 의존성을 정의하며, 왼쪽 테이블의 백필이 완료된 후에 오른쪽 테이블의 백필이 시작되도록 보장합니다.
create table fact(k int, d1 int, d2 int, v int);
create table dim(k int);
create table dim2(k int);
-- fact 테이블 이전에 dim, dim2를 백필
explain (backfill, format dot) create materialized view m1 with (backfill_order=FIXED(dim->fact, dim2->fact)) as
select fact.v from fact join dim on fact.d1 = dim.k join dim2 on fact.d2 = dim2.k;
관측 가능성을 위해 DESCRIBE FRAGMENTS로 프래그먼트 단위 의존성 그래프를 확인하고, rw_catalog.rw_fragment_backfill_progress를 통해 진행 상황을 모니터링할 수 있습니다.
자세한 내용은 백필 동작 및 제어 문서를 참고하세요.
고증폭 조인(Isolate high-amplification joins) 격리
스트리밍 쿼리에서 높은 조인 증폭(high join amplification)이 발생하면 심각한 백프레셔(backpressure)가 걸려 전체 파이프라인이 느려질 수 있습니다. 이를 방지하기 위해 RisingWave v2.5에는 언얼라인드 조인(unaligned join) 이 도입되었습니다. 이 기능은 문제가 되는 조인을 다운스트림 연산자로부터 격리하는 강력한 최적화 기법입니다.
SET streaming_enable_unaligned_join = true;
이 기능을 활성화하면 조인 연산자 뒤에 자동으로 버퍼가 삽입됩니다. 조인은 출력 결과를 버퍼에 기록하고, 체크포인트 배리어(checkpoint barrier)가 느린 다운스트림 연산자가 데이터를 처리하기를 기다리지 않고 즉시 통과할 수 있도록 합니다.
다만, 버퍼링으로 인해 전체 처리 지연 시간이 소폭 증가하는 트레이드오프가 있습니다. 언얼라인드 조인은 배리어 지연에는 도움이 되지만, 데이터량이 많을 경우 클러스터 확장이 여전히 필요할 수 있습니다. 또한 버퍼에서 발생할 수 있는 데이터 지연을 모니터링하는 것이 좋습니다.
자세한 내용은 고증폭 조인 격리 문서를 참고하세요.
openai_embedding으로 임베딩 생성
RisingWave v2.5는 새로운 openai_embedding 함수를 사용해 SQL에서 직접 텍스트 임베딩을 생성하는 기능을 기본 제공합니다. 이를 통해 데이터베이스를 벗어나지 않고도 시맨틱 검색이나 추천 시스템 같은 AI 기반 워크플로를 쉽게 구현할 수 있습니다.
openai_embedding ( api_key constant text, model constant text, input text ) → real[]
이를 활용하면 RAG(Retrieval-Augmented Generation) 파이프라인을 간단히 구축할 수 있습니다. RisingWave에 임베딩을 저장하고 검색한 뒤, 가장 관련성이 높은 컨텍스트를 LLM에 다시 전달할 수 있습니다.
자세한 내용은 openai_embedding과 RisingWave로 RAG 시스템 구축 문서를 참고하세요.
ALTER DEFAULT PRIVILEGES 명령
스키마 내에서 테이블과 머티리얼라이즈드 뷰를 생성·삭제하려면 해당 스키마에 대한 usage 및 create 권한이 필요합니다. 새로 생성된 스키마에 대해 사용자에게 권한을 동적으로 부여하거나, 다른 사용자가 생성한 관계형 객체에 대해 작업할 수 있도록 하려면 기본 권한(default privileges) 기능이 필요합니다.
ALTER DEFAULT PRIVILEGES
[ FOR USER target_user [, ...] ]
[ IN SCHEMA schema_name [, ...] ]
abbreviated_grant_or_revoke
기본 권한은 자동 권한 부여 템플릿으로 작동하며, 새로 생성된 스키마·테이블·머티리얼라이즈드 뷰 등에만 적용됩니다. 기존 스키마 및 관계형 객체에 대해서는 여전히 수동으로 권한을 부여해야 합니다.
자세한 내용은 ALTER DEFAULT PRIVILEGES 문서를 참고하세요.
향상된 WINDOW 절
WINDOW 절은 명명된 윈도우 사양(window specification)을 한 번 정의한 뒤 동일한 쿼리 내에서 여러 윈도우 함수에 재사용할 수 있도록 합니다. 이를 통해 반복을 줄여 쿼리 가독성과 유지보수성을 크게 향상시킬 수 있습니다. 예를 들어, 동일한 윈도우(PARTITION BY col1 ORDER BY col2)에서 합계와 행 번호를 계산해야 하는 경우를 살펴봅니다.
WINDOW절이 없는 경우: 각 함수마다 윈도우 사양을 반복해야 합니다.
SELECT
sum(col2) OVER (PARTITION BY col1 ORDER BY col2),
row_number() OVER (PARTITION BY col1 ORDER BY col2)
FROM t;
WINDOW절을 사용하는 경우: 윈도우 사양을 한 번 정의해w라는 이름을 붙이고, 이를 여러 함수에서 재사용할 수 있습니다.
SELECT
sum(col2) OVER w,
row_number() OVER w
FROM t
WINDOW w AS (PARTITION BY col1 ORDER BY col2);
또한 v2.5부터 WINDOW는 예약어로 지정되어, 더 이상 인용 부호 없이 식별자(예: 테이블 별칭)로 사용할 수 없습니다. window를 별칭으로 사용해야 한다면 반드시 큰따옴표로 감싸야 합니다.
자세한 내용은 명명된 윈도우 문서를 참고하세요.
결론
이상으로 v2.5의 주요 기능을 살펴보았습니다. 소스 및 싱크 커넥터 개선 사항을 포함한 전체 업데이트 목록은 릴리스 노트에서 확인할 수 있습니다.
다음 달에도 새로운 기능으로 RisingWave를 지속적으로 발전시킬 예정이니 많은 관심 부탁드립니다. 최신 개발 사항과 향후 릴리스 계획은 RisingWave GitHub 저장소에서 확인할 수 있습니다.
RisingWave의 모든 소식을 받아보고 싶다면 월간 뉴스레터를 구독하세요. 또한 Twitter, LinkedIn에서 팔로우하시고, Slack 커뮤니티에 참여해 엔지니어와 전 세계 수백 명의 스트리밍 전문가들과 교류해 보세요.
