본문 바로가기
web/AI

[AI] Trino(트리노) 의 개념 이해하기

by 뽀리님 2025. 12. 30.

프로젝트를 위해 이것저것 알아보다 Trino라는 처음들어보는 녀석이 등장했다.

처음들어보는디... 싶어 보니 원래 이전에 PrestoSQL이라고 페이스북에 있던 사람들이 개발한 엔진이 리브랜딩 된것이라 한다.

 


✔️ 엥 그래서 이게 뭐하는 놈인데?

트리노는 여러 이기종 데이터 소스를 하나의 SQL(ANSI 쿼리)로 빠르게 분석해주는 오픈소스 분산 SQL 쿼리 엔진(미들웨어)이다.
이 녀석은 100% JAVA로 만들어져있고, 그렇기에 JVM 위에서 돌아가므로 호환성이 매우 좋다.

또 이녀석은 모든 데이터를 RAM에다가 올려놓고 처리한다. 램이 주 무대다.
(그만큼 고사양을 요구하고 리소스 관리가 아주 중요한 놈이다.)

램에서 일하기때문에 여기서 열심히 지지고 볶은뒤 결과를 전달하고 나서 램을 싹다 비운다.

트리노는 분산 엔진이므로 기본적으로 클러스터로 구성한다.

출처 : 나노바나나


작업반장놈이 사용자에게 요청을 받아 일꾼들에게 일을 나눠주며 채찍질하는 구조로 되어있다.


네~ 좋은건 알겠어요, 근데 이걸 내가 어떤 순간에 써야 효율을 뽑을 수 있을까? 하는 의문이 생긴다.

 

✅ 어떤 경우에 쓰는게 좋지?

 

1. 데이터 가상화가 필요할때
가상화는 또 뭐냐? 싶을 것이다. 가상화는 흩뿌려진 데이터들을 실제 물리적으로 이동시키지 않고 접근하여 갖고오는 방법이다. 즉, 원본데이터는 그 장소 고대로 있고 논리적으로 접근하여 갖고 오는 방식이다.

과거에는 MySQL, Oracle을 합쳐 보려면 뭔가 한곳으로 다 옮겨서 봤어야 했다.(ETL)
그러나 Trino를 이용하면 얜 어떤 이기종 DB이든지에 따라 빨대 꽂아서 쇽쇽 갖고 와 램에서 처리한 뒤 줄수 있다. (그만큼 시간과 리소스를 절약할 수 있다.)

 


EX) 데이터가 너무 여기저기 흩어져 있어 빡칠 때 -> 이 녀석을 쓰면 해결이다.

 

 

 

2. 분산 처리 성능
트리노는 기본적으로 분산 처리 구조(MPP)로 되어있다. (MPP: Massively Parallel Processing 대규모 병렬처리)


아까 위에 그림과 같이 쿼리가 들어오면 반장놈이 일꾼에게,
"너는 A를 하고 , 너는 B를 하거라!!!"  하며 일을 분산 시킨다.

일반 DB였다면 1시간 걸릴 페타바이트(PB)급 쿼리를 단 몇 초 만에 끝낼 수 있다.

 


EX) 데이터가 너무 많아서 기존 DB가 자주 뻗을 때 -> 이 녀석을 쓰면 해결이다.

 

 

 


3. 분석속도 개빠름
사실 이녀석(Trino)의 탄생 배경이다.
과거에 쿼리 하나 던지면 1시간정도 티타임을 갖고 와야 했었다.
하지만 RAM에서 춤추는 트리노는 순식간에 끝내버린다.
즉, 빠르게 제공받아야 하는 데이터들을 대화형(인터랙티브)으로 가능하게 해준다.

 


EX) 결과 기다리다가 퇴근시간 다 됬을때 -> 이 녀석을 쓰면 해결이다.

 

 

 


와 그럼 이렇게 좋으니까 무조건 써야겠군!!! 이라고 생각했지만 이 녀석이 가지고있는 치명적인 약점도 있다.

 

 

✅ 주의해서 써야하는 점

 

1. RAM에서 돌리는게 곧 약점
아니 ㅋㅋㅋ 여기에서 돌려서 빠른거라며.....(-.-)
하지만 이게 곧 약점이 될 수 있다.
메모리가 무족하면 걍 사망이다.

오라클 같은 애들은 메모리가 부족하더라도 디스크를 써서 끝까지 노오오력을 하지만,
트리노는 어 뭐야? 램이 부족해?? 아! 나 일 안해!!! 파업!!!

(일꾼10명중 1명만 부족해도 Kill...)

하고 걍 취소해버린다.(건방진 놈...)

 


2. 데이터를 저장하지 않는다.
이녀석은 가져와서 램에서 끄적대다 주는 녀석이기에 데이터가 저장되지 않는다.
데이터가 많아지면 그 데이터 저장소만 늘리면 되기에 독립적으로 관리할 수 있다.(데이터 저장 따로 읽는놈 따로)

 


3. 읽는거만 잘함!!
2랑 연관이 있다.
읽어와서 분석하는데 최적화 되어있기 떄문에 데이터를 저장시키는건 아예 안되진 않지만
생각보다 까다롭고 제약이 많다.(하지 말란소리다.)

 


4. 커넥터 중심이므로 항상 감시해야함.
트리노는 각각 이기종 DB들을 위한 전용 커넥터(플러그인)을 가지고 있다.
트리노를 쓸때는 DB를 연결한다라고 하기보단 이 커넥터를 꼽는다라고 표현을 한다.
  
이게 있기 때문에 ANSI SQL을 이용해서 MySQL이든 Oracle이든 데이터를 갖고 올 수 있는것이다.

이 커넥터들은 푸쉬 다운도 알아서 해준다.(푸쉬다운 : 일 떠넘기기)
즉, 상세 조건을 트리노가 걸러내는게 아니라 애초에 조건을(age > 30) 같이 떠넘겨서
이미 필터링된 데이터를 갖고 오도록 해주는게 요 커넥터의 핵심 역할이라 보면 된다.

 

하지만 이 커넥터가 항상 100% 작동하는게 아니기 때문에 사용자가 쿼리를 날릴 때 잘 날려야 한다.

DB 내부 함수나 복잡한 쿼리를 써도 "아 나 또 고생시키네.. 일못하겄다!!" 하고 바로 트리노로 다 넘겨버려 네트워크 마비가 발생할 수 있다.

 

그맇게 때문에 항상 EXPLAIN 명령어로 "커넥터가 지금 푸시다운을 제대로 하고 있나?"를 감시하며 써야한다.

 

 

 

 

 

하... 램을 쓰는애라 그런가 엄청 예민한 녀석인거 같다.

 

이녀석 쓸땐 걍 고가용의 RAM을 빵빵하게 쓰는게 정신건강에 이로울 듯 하다. 여건상 그게 안된다면 메모리 Limit 설정은 필수이며, 램 제약이 있을 경우 램 용량을 업그레이드 하는거 보다 그냥 서버 하나 옆에 더 붙여서 하는것이 훨씬 효율적이다.(MPP 가 트리노의 사상 및 철학이다)

(MPP : "비싼 슈퍼컴퓨터 한 대보다, 싼 컴퓨터 10대가 낫다.")

 

-끝-

'web > AI' 카테고리의 다른 글

[AI] MinIO(미니오)의 개념  (0) 2026.01.09
[AI] Hive Metastore  (0) 2026.01.08
[AI] 로컬에 LLM 설치하기  (1) 2025.12.23
[AI] RAG 똑똑하게 만들기(1)  (1) 2025.12.22
[AI] 챗봇만들기 프로젝트 (2)  (0) 2025.12.19