Ⅰ. Trino 란?
Trino (구 PrestoSQL) 는 페이스북에서 개발한 오픈소스 분산 SQL 쿼리 엔진입니다. 핵심 철학은 단 하나 데이터를 옮기지 않고 그 자리에서 바로 쿼리한다는 것입니다. S3, HDFS, MySQL, PostgreSQL, Kafka, Hive 등 어떤 저장소에 있든 표준 SQL로 즉시 분석할 수 있습니다. 이를 Federated Query(연합 쿼리)라고 부릅니다. ETL로 데이터를 한 곳에 모으는 기존 방식과 달리, Trino는 여러 데이터 소스를 하나의 SQL 문으로 동시에 JOIN할 수 있습니다.
| 기존 방식 (ETL 파이프라인) |
Trino 방식 (Federated Query) |
| 데이터를 중앙으로 이동 후 분석 | 데이터 이동 없이 원본에서 직접 쿼리 |
| 이동 시간 + 스토리지 비용 발생 | 스토리지 중복 비용 없음 |
| 실시간 분석 어려움 | 즉시 대화형 분석 가능 |
| 파이프라인 유지보수 필요 | 이기종 DB 동시 JOIN |
Ⅱ. Trino 주요 특징
ⅰ. 메모리 기반 처리
: 디스크 I/O 없이 메모리 파이프라인 방식으로 처리하여 Hive 대비 수십 배 빠른 쿼리 속도를 제공합니다.
ⅱ. 스토리지 추상화
: 저장소와 연산 엔진이 분리되어 S3, HDFS, RDBMS, NoSQL 등 이기종 소스를 단일 SQL로 동시 조회합니다.
ⅲ. 표준 SQL
: 복잡한 학습 없이 기존 SQL 지식만으로 빅데이터 분석이 가능합니다. 창 함수, CTE, JSON 함수도 지원합니다.
ⅳ. 선형 수평 확장
: Worker 노드를 추가하면 처리 능력이 선형적으로 향상됩니다. 수백 노드 규모의 클러스터도 안정적으로 운영됩니다.
Ⅲ. Trino 동작 방식
사용자가 SQL을 전송하면 Coordinator가 전체 실행을 지휘하고, 여러 Worker 노드가 병렬로 데이터를 처리합니다. 모든 연산은 메모리에서 수행됩니다.
ⅰ. SQL 수신 & 파싱 (Coordinator)
클라이언트가 SQL을 전송하면 Coordinator가 수신하여 문법을 분석하고 논리적 실행 계획(Logical Plan)을 수립합니다.
ⅱ. 쿼리 최적화 & 분할
옵티마이저가 실행 계획을 최적화하고, 이를 여러 개의 Stage와 Task로 분할합니다. 각 Task는 개별 Worker에게 배분됩니다.
ⅲ. 병렬 데이터 처리 (Worker)
각 Worker가 Connector를 통해 데이터 소스(S3, DB 등)로부터 데이터를 읽어 메모리에서 병렬 연산합니다. 중간 결과는 Worker 간에 네트워크로 교환됩니다.
ⅳ. 결과 집계 & 반환
모든 Worker의 처리 결과가 Coordinator로 모이고, 최종 집계 후 클라이언트에게 반환됩니다.
※ Trino는 메모리 기반 처리 엔진이므로 쿼리 도중 OOM(Out of Memory) 오류가 발생할 수 있습니다. 대용량 쿼리 시 query.max-memory 설정을 반드시 튜닝이 필요합니다.
Ⅳ. Trino 아키텍처 구성 및 흐름도
Trino 클러스터는 1개의 Coordinator와 N개의 Worker, 그리고 데이터 소스와 연결하는 Connector로 구성됩니다.

| 구성 요소 | 역할 | 비고 |
| Coordinator | SQL 파싱, 쿼리 플래닝, Worker 스케줄링, 결과 집계. 클러스터당 1개만 운영 | 단일 노드 |
| Worker | 실제 데이터 처리 및 연산 수행. 노드 추가로 선형 확장 가능 | 수평 확장 |
| Connector | 이기종 데이터 소스와 Trino를 연결하는 플러그인 어댑터 | Hive / MySQL 등 |
| Catalog | Connector 설정의 논리적 이름. SQL에서 catalog.schema.table 형태로 참조 | 논리적 이름 |
Ⅴ. Trino 설치 방법
가장 빠르게 시작하는 방법은 Docker입니다. 복잡한 JVM 환경 설정 없이 명령어 두 줄로 Trino를 실행할 수 있습니다.
| 전제 조건: Docker Desktop 설치, 메모리 4GB 이상 권장 (Trino는 메모리 집약적 엔진입니다) |
ⅰ. Docker로 Trino 실행
| # 최신 Trino 이미지 다운로드 docker pull trinodb/trino ![]() # 컨테이너 백그라운드 실행 (포트 8080 노출) docker run -d \ --name trino \ -p 8080:8080 \ trinodb/trino ![]() # 실행 상태 확인 (healthy 상태가 될 때까지 30~60초 소요) docker ps ![]() |
ⅱ. Web UI 접속 확인
브라우저에서 http://localhost:8080에 접속하면 Trino Web UI가 표시됩니다. 실행 중인 쿼리, 클러스터 상태, Worker 목록을 실시간으로 확인할 수 있습니다.
1) 로그인 화면(기본 계정 admin, 패스워드 없음)

2) 대시보드

Ⅵ. Trino 사용 방법
Trino는 CLI, DBeaver 같은 GUI 툴, 또는 Python/Java 라이브러리를 통해 접속합니다. 아래는 CLI를 통한 기본 사용 흐름입니다.
ⅰ. CLI 접속 & 기본 탐색
| # 실행 중인 Trino 컨테이너에 CLI로 접속 docker exec -it trino trino |
ⅱ. 데이터 소스 탐색
| -- 1. 연결된 모든 데이터 소스(Catalog) 확인 SHOW CATALOGS; -- 2. 특정 Catalog 내 Schema 목록 확인 SHOW SCHEMAS FROM tpch; -- 3. 테이블 목록 확인 SHOW TABLES FROM tpch.sf1; -- 4. 기본 제공 샘플 데이터 쿼리 SELECT * FROM tpch.sf1.nation LIMIT 10; |
ⅲ. Federated Query — 이기종 DB 동시 JOIN
| -- MySQL의 주문 데이터 + Hive의 로그 데이터를 단일 쿼리로 분석 SELECT o.order_id, o.customer_name, COUNT(l.event) AS page_views FROM mysql.orders_db.orders o JOIN hive.logs_db.web_logs l ON o.customer_id = l.user_id WHERE l.event_date = '2026-04-24' GROUP BY o.order_id, o.customer_name ORDER BY page_views DESC LIMIT 100; |
ⅳ. Python에서 Trino 연결
| # pip install trino import trino conn = trino.dbapi.connect( host="localhost", port=8080, user="admin", catalog="tpch", schema="sf1", ) cursor = conn.cursor() cursor.execute("SELECT * FROM nation LIMIT 5") for row in cursor.fetchall(): print(row) |
Ⅶ. Trino 자주 쓰는 명령어
Trino CLI와 SQL에서 실무적으로 자주 사용하는 명령어를 목적별로 정리했습니다.
| 명령어 | 설명 |
| SHOW CATALOGS; | 현재 Trino에 연결된 모든 데이터 소스(Catalog) 목록을 확인합니다. 탐색의 첫 단계입니다. |
| SHOW SCHEMAS FROM catalog; | 특정 Catalog 내의 Schema(데이터베이스) 목록을 조회합니다. |
| SHOW TABLES FROM cat.schema; | 특정 Schema 내의 테이블 목록을 확인합니다. |
| DESCRIBE table_name; | 테이블의 컬럼명, 데이터 타입, 파티션 정보 등 스키마 상세를 출력합니다. |
| EXPLAIN (TYPE DISTRIBUTED) sql; | 튜닝 분산 실행 계획을 출력합니다. 성능 병목 구간을 찾는 핵심 도구입니다. |
| SHOW SESSION; | 현재 세션에 적용된 모든 설정값을 확인합니다. 메모리, 타임아웃 등 튜닝 파라미터 조회에 사용합니다. |
| SET SESSION property=val; | 튜닝 특정 세션에 쿼리 설정을 적용합니다. Ex) SET SESSION query_max_memory='10GB'; |
Ⅷ. Trino 활용 방안
| 분류 | 주요 활용 사례 | 상세 내용 | 비고 |
| 데이터 레이크 | S3 / HDFS 직접 분석 | 대규모 로그·이벤트 데이터를 DW 이동 없이 SQL로 즉시 쿼리 | Iceberg, Delta Lake 연동 시 성능 강화 |
| 통합 리포팅 | 이기종 DB 통합 분석 | MySQL(서비스), Hive(분석), S3(레이크) 등 분산된 데이터를 단일 SQL로 JOIN | 통합 보고서 생성에 최적 |
| 데이터 탐색 | Ad-hoc 데이터 분석 | 복잡한 ETL 없이 원천 데이터 즉시 탐색 및 분석 | Jupyter + PyTrino 조합 활용 |
| BI 연동 | 대시보드 백엔드 | Superset, Grafana, Tableau 등과 연결하여 실시간 시각화 구현 | 대규모 데이터 시각화 엔진 |
'데이터베이스' 카테고리의 다른 글
| Redis 의 진정한 오픈소스 후계자, 인메모리 데이터스토어의 새로운 표준 Valkey 에 대해 알아보겠습니다. (0) | 2026.05.04 |
|---|---|
| B-Tree (Balanced Tree) 에 대해 알아보겠습니다. (0) | 2026.01.07 |
| 데이터베이스에서 사용되는 인덱스(Index)에 대해 알아보겠습니다. (0) | 2026.01.06 |
| Connection Pooling (데이터베이스 연결 풀) 에 대해 알아보겠습니다. (0) | 2025.12.29 |
| 데이터베이스 샤딩(Database Sharding)에 대해 알아보겠습니다. (0) | 2025.10.16 |


