본문으로 건너뛰기

Taipy — 파이썬으로 데이터·AI 앱을 만드는 오픈소스, 쓸까 말까

진짜 차별점은 성능이 아니라 시나리오 관리다. 카페 가격안 다섯 개를 비교하고 전력거래소 데이터 4만 점을 그려 봤다. 한국어로 쓰려면 반드시 손봐야 할 곳이 세 군데 있다.

파이썬만으로 데이터 앱을 만드는 도구로 Streamlit이 사실상 기본값이 됐다. 그 대안으로 자주 올라오는 게 Taipy다. "Streamlit보다 빠르고 프로덕션급"이라는 소개를 여러 번 봤다. 실제로 그런지 1차 자료를 확인했다.

결론부터 쓰면 이렇다. 기능은 실재하고 차별점도 분명한데, 그 차별점은 성능이 아니다. 그리고 지금 새로 도입하기에는 짚어야 할 게 있다.

무엇인가

Apache-2.0 오픈소스다. 2026년 9월 18일 기준 GitHub 스타 19,436개, 최신 버전은 2026년 2월에 나온 4.1.1이다. 두 부분으로 이뤄져 있다.

직접 띄워 봤다

공식 예제를 그대로 돌렸다. 아래가 그 화면이다.

Taipy 공식 예제를 로컬에서 띄운 화면 — 슬라이더와 차트
슬라이더를 움직이면 감쇠 계수가 바뀌고 차트가 다시 그려진다. 기본 테마가 다크이고 차트는 Plotly 기반이다. 2026-09-18, taipy 4.1.1.

설치에서 한 번 막혔다. 이 맥의 기본 파이썬이 3.14인데 그대로 pip install taipy 를 하면 의존성인 pyarrow 휠 빌드에서 실패한다. Taipy 가 3.13 미만만 지원하기 때문이다. python3.10 으로 가상환경을 만들어야 설치가 끝났다.

python3.10 -m venv .venv
./.venv/bin/pip install taipy      # taipy 4.1.1, taipy-gui 4.1.2
./.venv/bin/python main.py          # 127.0.0.1:5000 (포트 지정 가능)

Taipy GUI는 파이썬 변수와 화면을 묶는다. 마크다운을 확장한 문법이나 파이썬 빌더 API로 페이지를 정의한다.

from taipy.gui import Gui
from math import cos, exp

value = 10
page = """# Taipy *Getting Started*
Value: <|{value}|text|>
<|{value}|slider|on_change=slider_moved|>
<|{data}|chart|>"""

def slider_moved(state):
    state.data = compute_data(state.value)

def compute_data(decay:int)->list:
    return [cos(i/6) * exp(-i*decay/600) for i in range(100)]

data = compute_data(value)

if __name__ == "__main__":
    Gui(page).run(title="Dynamic chart")

pip install taipy 다음에 taipy run main.py로 띄운다. 기본 주소는 127.0.0.1:5000이고 내부 웹서버는 Flask다.

시나리오 관리가 나머지 절반이다. 데이터 노드(데이터 소스 추상화) → 태스크(파이썬 함수) → 시나리오 순으로 파이프라인을 정의하고, 입력을 바꿔 만든 여러 시나리오를 저장·비교·태깅한다.

january_scenario = tp.create_scenario(my_config.monthly_scenario_cfg,
                                      creation_date=datetime(2023, 1, 1),
                                      name="Scenario for January")
comparison_results = tp.compare_scenarios(january_scenario, february_scenario,
                                          data_node_config_id="sales_predictions")

화면 쪽에 scenario_selector, scenario_dag 같은 전용 컨트롤이 있어서 시나리오 목록과 파이프라인 그래프를 그대로 UI로 띄운다.

"Streamlit보다 빠르다"는 이제 반박당한다

Streamlit은 위젯을 건드릴 때마다 스크립트를 처음부터 끝까지 다시 실행한다. Taipy는 콜백과 클라이언트별 상태 객체로 바뀐 변수에 연결된 컨트롤만 갱신한다. 여기까지는 사실이다.

그런데 Streamlit도 1.37.0부터 st.fragment로 일부만 다시 실행한다. 공식 문서에 "프래그먼트 재실행 중에는 프래그먼트 함수만 다시 실행된다"고 적혀 있다. 즉 2023~2024년에 쓰인 "재실행 모델 대 부분 갱신" 비교는 지금 기준으로 유효하지 않다.

홈페이지가 내세우는 "리소스가 무거운 앱에서 10배 빠르다"는 주장도 벤치마크 방법이나 재현 코드를 찾지 못했다. 마케팅 문구로 보는 게 맞다.

문서로 확인되는 대용량 처리 장치는 세 개다.

  • 차트 데시메이터: LTTB, RDP, MinMax 방식으로 서버에서 점을 줄여 보낸다. 문서 예시가 50만 행을 500포인트로 줄인다.
  • 테이블 페이지네이션: 기본 100행, 보이는 영역만 불러오는 옵션이 있다.
  • 건너뛸 수 있는 태스크: 입력이 안 바뀐 단계를 건너뛴다. 문서 예시에서 74.49초가 5.084초로 줄어든다.

참고로 메모리보다 큰 데이터를 다루는 부분은 Taipy 자체가 아니라 Dask 연동이 담당한다.

그래서 진짜 차별점

UI와 파이프라인 오케스트레이션을 한 프레임워크에서 다룬다는 점이다.

입력 파라미터를 바꿔 여러 안을 만들고, 결과를 비교하고, 버전을 남겨야 하는 업무가 있다. 수요 예측, 생산 계획, 시나리오 기반 재무 모델이 그렇다. 보통 이런 건 Airflow로 파이프라인을 돌리고 Streamlit으로 화면을 붙인다. Taipy는 그 두 스택을 하나로 합친다. 이게 다른 도구에 없는 부분이다.

반대로 단순 대시보드나 데모라면 이 구조가 부담이다. 마크다운 확장 문법, 상태 객체 콜백, Config·DataNode·Task·Scenario·Cycle 개념을 다 익혀야 한다. Streamlit의 "위에서 아래로 읽으면 끝"과는 학습 비용이 다르다.

카페 가격 인상안을 시나리오로 비교해 봤다

공식 예제는 슬라이더와 차트 한 장이라 이 도구의 핵심이 안 보인다. 그래서 한국 소상공인 업무로 바꿔 만들었다. 동네 카페가 아메리카노 값을 올릴지 정하는 문제다.

입력은 네 개(인상폭, 가격탄력성, 원두 kg당 가격, 기본 가정), 계산은 두 단계(월별 손익 → 연간 합산). 안은 다섯 개를 만들었다. 동결, +300원, +500원, +500원인데 이탈이 큰 경우, +700원.

Taipy 시나리오 관리 화면 — 시나리오 선택기, 한글 이름의 데이터 노드, 파이프라인 DAG, 안별 비교 표와 월별 영업이익 차트
왼쪽 위가 시나리오 선택기, 가운데가 입력 노드와 파이프라인 그래프, 아래가 안별 비교 표다. 금액은 전부 가정값이다(기준가 4,500원, 월 6,000잔, 고정비 1,700만원). taipy 4.1.1, 2026-09-19.

파이프라인 정의가 이 도구의 전부다. 데이터 노드에 name 을 한글로 주면 화면에도 한글로 나온다.

price_up_cfg   = Config.configure_data_node("price_up", default_data=0, name="인상폭(원)")
elasticity_cfg = Config.configure_data_node("elasticity", default_data=-0.8, name="가격탄력성")
monthly_cfg    = Config.configure_data_node("monthly", name="월별 손익")

forecast_cfg = Config.configure_task("forecast", forecast,
                 [price_up_cfg, elasticity_cfg, bean_cfg, base_cfg], monthly_cfg,
                 skippable=True, name="수요·손익 계산")

cafe_cfg = Config.configure_scenario("cafe_price", [forecast_cfg, summarize_cfg],
                 comparators={summary_cfg.id: compare_profit})

결과는 이렇게 나왔다. 전부 가정값 위에서 나온 숫자다.

안판매잔수연 영업이익
동결72,000잔₩69,600,000
+300원68,376잔₩76,341,600
+500원66,180잔₩80,574,000
+500원 (이탈 큼)61,473잔₩60,333,900
+700원64,137잔₩84,616,500

탄력성 가정 하나만 바꾸면 +500원이 동결보다 나빠진다. 이 표가 이 도구를 쓰는 이유다. 가정을 바꿔 가며 안을 쌓고, 나중에 "그때 어떤 가정이었나"를 다시 열 수 있다.

돌려 보고 확인한 것 세 가지.

  • 화면에서 끝까지 된다. ADD SCENARIO로 "+700원"을 만들고, 입력값을 고치고, SUBMIT을 누르면 비교 표에 행이 추가된다. 제출부터 표 갱신까지 0.2~0.9초였다.
  • 입력이 그대로면 계산을 건너뛴다. skippable=True 를 준 태스크는 재제출 때 SKIPPED 로 끝난다.
  • 비교 전용 화면은 없다. 무료판이 주는 컨트롤은 시나리오 선택기, 시나리오, DAG, 데이터 노드, 작업 목록 여섯 개뿐이다. 위 비교 표는 데이터 노드를 읽어 직접 만들었다.

기본 UI 문구는 전부 영어다(ADD SCENARIO, SUBMIT, Create scenario). 한국어로 바꾸는 설정은 찾지 못했다.

공공데이터 4만 점을 그려 봤다

성능 장치가 실제로 얼마나 효과가 있는지도 봤다. 전력거래소가 공공데이터포털에 올린 시간대별 전력거래량을 키 없이 받아 그렸다. 2017~2021년 자료를 시간 단위로 펴면 43,824행, 2025년 지역별 자료는 148,920행이다.

전력거래량 대시보드 — 지역 선택, 2025년 8,760시간 차트, 데시메이터 적용 전후 차트, 14만 행 표
같은 데이터를 데시메이터 없이(위), MinMax 1000으로 줄여서(아래) 그린 화면. 표는 148,920행을 100행씩 넘긴다. 자료: 한국전력거래소, 이용허락범위 제한 없음.
차트 점 수웹소켓 전송량
데시메이터 없음43,8241,836,005바이트
MinMaxDecimator(n_out=1000)99742,079바이트

전송량이 44분의 1로 줄었다. 그림은 눈으로 구분되지 않는다. 확대하면 그 구간을 원래 해상도로 다시 보내 준다(5주 구간에서 870점). 다만 로컬에서 체감 속도 차이는 없었다. 원본 1.74.5초, 데시메이터 1.13.5초로 흩어짐 안에 묻힌다. 효과가 나는 곳은 속도가 아니라 네트워크다. 원격 접속이 많은 사내 대시보드라면 의미가 있다.

여기서 걸린 실무 문제도 적어 둔다. 공공데이터 파일은 인코딩이 제각각이다. 2017~2021년 파일은 CP949, 2025년 파일은 UTF-8 BOM이었다. 그리고 지역별 수치는 소비량이 아니라 발전소 소재지 기준 거래량으로 보인다. 서울이 연 3.36TWh로 나오고 곡선이 켜졌다 꺼진다. 대시보드를 만들 때 라벨을 "소비량"으로 달면 안 된다.

한국어로 쓰려면 손봐야 할 세 가지

한국어 사용성 점검 화면 — 차트 시각 9시간 밀림과 우회, 날짜 컨트롤, 숫자 형식, 한글 입력 중복, 줄바꿈 비교
왼쪽이 기본 상태, 오른쪽이 우회를 적용한 상태다. 같은 화면 안에서 표와 차트가 9시간 어긋나는 게 보인다.

1. 시각이 차트에서 9시간 밀린다. 시간대 정보가 없는 한국 시각을 그대로 넘기면, 1월 1일 0시 데이터가 차트에 12월 31일 15시부터 그려진다. Taipy가 서버 시간대로 보고 UTC로 바꿔 보내는데 차트는 그 값을 벽시계 시간처럼 그리기 때문이다. 표는 정상으로 나와서 같은 화면에서 표와 차트가 어긋난다. 2022년 10월에 열린 공식 이슈(#554)가 아직 열려 있다.

df["시각"] = df["시각"].dt.tz_localize("UTC")   # 벽시계 값을 UTC 로 선언하고
Gui(page).run(time_zone="UTC")                   # 표도 같은 기준으로 맞춘다

2. 빠르게 치면 한글 자모가 중복된다. 기본 입력칸에 "한글 입력"을 치면 ㅎ한ㄱ그글ㅇ이입려력 같은 값이 들어간다. 15회 중 8회만 정상이었다. 입력 중에도 300밀리초마다 서버로 보내고 그 응답이 입력칸을 덮어쓰는 구조 때문이다. 영문도 글자가 빠지니 한글만의 문제는 아닌데, 조합 중인 글자가 확정돼 버리는 한글에서 훨씬 심하게 드러난다. change_delay=-1 로 엔터를 칠 때만 보내게 하니 30회 모두 정상이었다. 단, 이 측정은 브라우저 조합 이벤트를 흉내 낸 것이고 실제 macOS 입력기로 친 결과는 확인하지 못했다.

3. 날짜와 숫자는 영어·미국식이다. 날짜 선택 달력이 "September 2026"에 요일 S M T W로 나오고, 입력 형식은 09/19/2026이다. 표의 숫자 형식에는 천 단위 콤마가 없다. 표는 format_fn 으로 열마다 ₩330,900,000 처럼 직접 만들어야 한다. 한글 줄바꿈도 기본은 단어 중간에서 끊겨서 word-break: keep-all 을 CSS로 넣어야 한다.

셋 다 우회는 있다. 다만 한국어 업무 화면을 만들 때 반드시 먼저 밟게 되는 지점이라 미리 알고 시작하는 게 낫다.

도입 전에 확인할 네 가지

개발이 멈춰 있다. 기본 브랜치의 마지막 커밋이 2026년 5월 7일이다. 넉 달 넘게 커밋이 없고, 열린 이슈가 196개, PR이 29개다. 정식 릴리스는 2월 이후로 없다.

파이썬 3.13 이상에서 설치되지 않는다. 지원 범위가 3.9 이상 3.13 미만이고, 3.14에서 시도하면 pyarrow 휠 빌드 실패로 끝난다. 위에서 직접 확인했다.

커뮤니티가 작다. 스타 19.4k는 Streamlit 45.8k, Gradio 43.6k, Dash 24.4k와 비교하면 절반 이하다. 다운로드는 월 5천 건 수준으로, Streamlit의 2100만 건과 자릿수가 다르다. 막혔을 때 검색으로 풀릴 확률이 그만큼 낮다.

README가 앞세우는 기능 일부가 유료다. 인증·권한·사용자 관리, 크론 스케줄링은 Enterprise 전용이다. 공식 문서에 "이 장은 Taipy Enterprise 에디션에만 해당한다"고 적혀 있다. 가격은 공개되지 않았고 문의해야 한다. 무료로 되는 범위는 GUI와 시나리오 코어까지다.

정리

시나리오 비교가 업무의 핵심이고 파이프라인과 화면을 한 곳에서 관리하고 싶다면 Taipy가 유일한 선택지에 가깝다. 사내 인증이 필요하면 유료 티어를 전제로 계산해야 한다.

한국어 화면을 만든다면 위 세 가지(시각 9시간, 한글 입력, 날짜·숫자 형식)를 먼저 처리하고 시작한다.

그 외의 경우, 특히 프로토타입과 사내 대시보드는 Streamlit이 낫다. 부분 갱신도 이제 되고, 예제와 배포 경로가 비교가 안 된다. 모델 데모만 필요하면 Gradio, 콜백을 세밀하게 통제하는 분석 앱이면 Dash다.

저장소: Avaiga/taipy · 문서: docs.taipy.io · 시간대 이슈: Avaiga/taipy#554 · 전력 데이터: 공공데이터포털 한국전력거래소 시간대별 전력거래량 · 공식 예제 확인 2026-09-18, 한국 시나리오 3종 직접 실행 2026-09-19

15초 요약

인스타그램 릴스로도 올린 영상입니다. HeyGen HyperFrames 로 이 글에서 바로 렌더했습니다.

CONTACT

컨설팅 · 강의 문의

회사 메일로 남겨 주시면 구성과 비용을 안내드립니다.

gmail·naver 같은 개인 메일은 받지 않습니다.