Blog
trinobisupersettableaujdbcdata-platform

Trino + BI 도구 연동 — Superset, Tableau, 그리고 JDBC/Python 클라이언트

Trino 를 BI 도구·애플리케이션과 연결하는 실전 가이드. JDBC/ODBC 드라이버와 연결 URL, Superset·Tableau 연동, Python(trino, SQLAlchemy) 클라이언트, 인증(LDAP/OAuth2) 연결, 그리고 대시보드 폭주로부터 클러스터를 보호하는 운영 패턴까지.

Data Dynamics2026년 6월 5일10 min read

Trino 를 아무리 잘 튜닝해도, 사용자는 결국 BI 도구나 애플리케이션을 통해 만납니다. 연결 설정이 어긋나면 "느리다", "끊긴다", "인증이 안 된다"는 민원으로 돌아옵니다. 반대로 연결·인증·운영 패턴만 제대로 잡으면, Trino 는 Superset·Tableau 같은 도구의 강력한 백엔드가 됩니다.

이 글은 Trino 를 BI 도구·클라이언트와 연결하는 실전 방법을 정리합니다 — JDBC/ODBC 드라이버, Superset·Tableau 연동, Python 클라이언트, 인증 연결, 그리고 대시보드 트래픽으로부터 클러스터를 지키는 운영 패턴까지.

1. 연결의 기본 — 드라이버와 URL

Trino 클라이언트는 모두 코디네이터의 HTTP(S) 엔드포인트로 연결합니다.

클라이언트연결 방식
BI 도구(Superset, Tableau, DBeaver 등)JDBC 또는 ODBC 드라이버
애플리케이션Python/Go/Node 클라이언트, JDBC
CLItrino CLI

JDBC URL 구조

jdbc:trino://<host>:<port>/<catalog>/<schema>?<속성>
# 평문 (PoC)
jdbc:trino://trino:8080/iceberg/analytics
 
# TLS + LDAP 인증 (프로덕션)
jdbc:trino://trino:8443/iceberg/analytics?SSL=true&user=alice&password=...
속성의미
SSL=trueHTTPS 연결
user / passwordLDAP/파일 비밀번호 인증
SSLTrustStorePath사내 CA 인증서 신뢰
source클라이언트 식별(중요 — 아래 6장)
clientTagsResource Group 셀렉터용 태그

핵심 팁: sourceclientTags 를 반드시 설정하세요. Resource Group 셀렉터가 이 값으로 쿼리를 분류하므로, "대시보드 트래픽을 dashboard 그룹에 격리"하는 운영이 여기서 시작됩니다. (Resource Group 은 별도 글 "Trino 메모리 관리와 Resource Groups"에서 다뤘습니다.)

2. Apache Superset 연동

Superset 은 SQLAlchemy 기반이라 Trino 방언(sqlalchemy-trino/trino 패키지)으로 연결합니다.

연결 문자열(SQLAlchemy URI)

# 기본
trino://alice@trino:8080/iceberg
 
# TLS + 비밀번호 인증
trino://alice:password@trino:8443/iceberg?protocol=https

설정 흐름:

  1. Superset 의 Database Connections 에서 위 URI 입력.
  2. iceberg 처럼 카탈로그를 기본 DB 로 지정하면, 스키마/테이블이 자동 탐색됩니다.
  3. 여러 카탈로그를 쓰려면 DB 커넥션을 카탈로그별로 추가하거나, 쿼리에서 카탈로그.스키마.테이블 로 명시합니다.

Superset 운영 팁

  • 결과 캐시: Superset 자체 캐시(Redis 등)를 켜면 동일 차트 재조회 시 Trino 를 안 때립니다. Trino 에 결과 캐시가 없으므로(별도 글 "Trino 캐싱 전략" 참고), BI 도구 캐시가 사실상의 결과 캐시 역할을 합니다.
  • Async 쿼리: Celery 워커로 비동기 실행을 구성하면 긴 쿼리가 웹 워커를 묶지 않습니다.
  • Row limit: 차트의 기본 행 제한을 합리적으로 둬서 실수성 대용량 fetch 를 막습니다.

3. Tableau 연동

Tableau 는 Starburst/Trino 커넥터 또는 JDBC/ODBC 로 연결합니다.

  • Live vs Extract: Live 연결은 매 조작마다 Trino 를 때립니다. 대시보드 사용자가 많으면 부하가 큽니다. Extract(추출) 로 주기적 스냅샷을 Tableau 서버에 두면 Trino 부하가 크게 줄어듭니다.
  • 인증: TLS + LDAP/OAuth2 를 드라이버 옵션으로 설정. SSO 환경이면 OAuth2 연결을 구성합니다.
  • 사용자 정보 전달: 연결 시 source/clientTags 를 지정해 Tableau 트래픽을 식별·격리합니다.
모드Trino 부하신선도적합
Live높음(매 조작)실시간소수 사용자·실시간 필요
Extract낮음(주기 추출)추출 시점다수 사용자·대시보드

일반 원칙: 사용자가 많은 운영 대시보드는 사전 집계 테이블 + Extract 조합이, 소수 분석가의 탐색적 분석은 Live 가 적합합니다.

4. Python 클라이언트

애플리케이션·데이터 파이프라인에서는 공식 trino 파이썬 패키지를 씁니다.

import trino
 
conn = trino.dbapi.connect(
    host="trino",
    port=8443,
    user="alice",
    catalog="iceberg",
    schema="analytics",
    http_scheme="https",
    auth=trino.auth.BasicAuthentication("alice", "password"),  # LDAP
    source="etl-pipeline",                 # Resource Group 식별
    client_tags=["batch"],
)
 
cur = conn.cursor()
cur.execute("""
    SELECT event_type, count(*) AS cnt
    FROM events
    WHERE event_time >= TIMESTAMP '2026-06-01 00:00:00 UTC'
    GROUP BY event_type
""")
for row in cur.fetchall():
    print(row)

SQLAlchemy / pandas

from sqlalchemy import create_engine
import pandas as pd
 
engine = create_engine("trino://alice@trino:8443/iceberg?protocol=https")
df = pd.read_sql("SELECT * FROM analytics.daily_active_users", engine)

주의: pd.read_sql("SELECT * FROM huge_table") 처럼 거대 결과를 통째로 메모리에 올리지 마세요. WHERE·LIMIT 으로 줄이거나, 서버사이드 집계 후 작은 결과만 가져오는 것이 원칙입니다.

5. 인증 연결 정리

클러스터에 켜둔 인증 방식(별도 글 "Trino 보안 완전 가이드" 참고)에 맞춰 클라이언트를 설정합니다.

클러스터 인증JDBCPython
LDAP/파일 (PASSWORD)user+password, SSL=trueBasicAuthentication
OAuth2 / OIDC브라우저 또는 외부 토큰OAuth2Authentication
KerberosKerberosPrincipalKerberosAuthentication
mTLS(인증서)클라이언트 키스토어인증서 옵션

거의 모든 인증이 TLS 를 전제로 하므로(평문 비밀번호 금지), 클라이언트에서 SSL=true/http_scheme=https 와 트러스트스토어(사내 CA)를 함께 설정해야 합니다.

6. 대시보드 트래픽으로부터 클러스터 보호하기

BI 연동에서 가장 흔한 사고는 대시보드 자동 새로고침·동시 사용자 폭증이 클러스터를 마비시키는 것입니다. 방어책:

6.1 source/clientTags 로 격리

Superset  → source=superset   → Resource Group: global.dashboard
Tableau   → source=tableau     → Resource Group: global.dashboard
ETL       → source=etl-pipeline→ Resource Group: global.batch
분석가 CLI→ (기본)             → Resource Group: global.adhoc

대시보드 그룹에 동시성·메모리·큐 한도를 두면, 대시보드가 아무리 몰려도 배치·임시분석 자원을 침범하지 못합니다.

6.2 BI 도구 캐시 + 사전 집계

  • Superset/Tableau 의 캐시를 켜서 동일 조회 반복을 흡수.
  • 무거운 집계는 Materialized View 나 일배치 요약 테이블로 미리 계산해, 대시보드는 작은 테이블만 조회. (별도 글 "Trino 캐싱 전략" 참고.)

6.3 가드레일

  • 클러스터: query.max-scan-physical-bytes 로 실수성 대용량 스캔 차단.
  • BI 도구: 차트 row limit, 쿼리 timeout 설정.

7. 연동 체크리스트

  • 프로덕션은 TLS(SSL=true/https) + 사내 CA 트러스트스토어
  • 인증 방식에 맞는 클라이언트 설정(LDAP/OAuth2/Kerberos)
  • 모든 클라이언트에 source/clientTags 지정
  • source 기반 Resource Group 셀렉터로 dashboard/batch/adhoc 격리
  • BI 도구 결과 캐시 활성화
  • 무거운 집계는 사전 집계 테이블/Materialized View
  • Tableau 다수 사용자는 Extract 모드 검토
  • 차트 row limit·timeout, 클러스터 스캔 가드레일

8. 정리

대상연결운영 포인트
SupersetSQLAlchemy trino://자체 캐시 + async + source 태그
TableauTrino 커넥터/JDBCExtract vs Live, source 식별
Python 앱trino dbapi / SQLAlchemy대용량 fetch 금지, source 지정
모든 클라이언트JDBC/ODBC + TLS인증·트러스트스토어·clientTags

Trino 와 BI 도구 연동의 핵심은 두 가지입니다. 첫째, TLS + 인증을 클라이언트까지 일관되게 설정하는 것. 둘째, source/clientTags 로 트래픽을 식별해 Resource Group 으로 격리하고, BI 캐시·사전 집계로 클러스터 부하를 흡수하는 것. 이 운영 패턴이 갖춰지면, 대시보드 사용자가 늘어도 분석·배치 워크로드를 안정적으로 지키면서 Trino 를 전사 BI 백엔드로 확장할 수 있습니다.


이 글은 Trino 440번대 기준으로 작성되었습니다. BI 도구 연동이나 대시보드 백엔드 아키텍처 설계가 필요하시면 언제든 문의해 주세요.

— Data Dynamics 엔지니어링 팀