2026๋ Apache Superset: ๋์๋ณด๋, SQL Lab ๊ทธ๋ฆฌ๊ณ ๋ฉด์ ์ง๋ฌธ
Apache Superset ์ฌ์ธต ๋ถ์: ๋ฐ์ดํฐ ๋ถ์ ๋์๋ณด๋ ๊ตฌ์ถ, SQL Lab๊ณผ Jinja ํ ํ๋ฆฟ, Tableau์์ ๋น๊ต, ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ์ค์ํ ๋ฉด์ ์ง๋ฌธ.

Apache Superset๋ ์ข์๋น ๋ผ์ด์ ์ค ์์ด ๋ฐ์ดํฐ ๋ถ์ ๋์๋ณด๋๋ฅผ ์ํ๋ ํ์ ์ํ ๊ธฐ๋ณธ ์คํ์์ค ๋น์ฆ๋์ค ์ธํ ๋ฆฌ์ ์ค ํ๋ซํผ์ผ๋ก ์๋ฆฌ ์ก์์ต๋๋ค. 2026๋ ํ์ฌ ์ฌ์ฉ๋๋ 6.x ๋ฆด๋ฆฌ์ค ๋ผ์ธ์ ์์ ํ Ant Design v5 ๋ฆฌ๋์์ธ, ๋ค์ดํฐ๋ธ ๋คํฌ ๋ชจ๋, ๊ทธ๋ฆฌ๊ณ ์์ฉ ๋๊ตฌ์์ ๊ฒฉ์ฐจ๋ฅผ ์๋น ๋ถ๋ถ ์ขํ๋ ๊ณ์ธตํ ์๋งจํฑ ๋ ์ด์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ์ฌ์ธต ๋ถ์์์๋ Superset์ด ๋์๋ณด๋๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ์, SQL Lab๊ณผ Jinja ํ ํ๋ฆฟ์ด ๊ฐ๋ ฅํ ์ด์ , Tableau์์ ๋น๊ต, ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์์ฃผ ๋ฑ์ฅํ๋ Apache Superset ๋ฉด์ ์ง๋ฌธ์ ๋ค๋ฃน๋๋ค.
Apache Superset์ Apache Software Foundation์ด ์ ์ง ๊ด๋ฆฌํ๋ ์คํ์์ค ๋ฐ์ดํฐ ํ์ ๋ฐ ์๊ฐํ ํ๋ซํผ์ ๋๋ค. SQLAlchemy๋ฅผ ํตํด SQL์ ์ง์ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ณ , ๋ ธ์ฝ๋ ์ฐจํธ ๋น๋์ ์์ ํ SQL IDE๋ฅผ ํจ๊ป ์ ๊ณตํ๋ฉฐ, ์ฐจํธ๋ฅผ ๋ํํ ๋์๋ณด๋๋ก ์กฐํฉํฉ๋๋ค. ์ด ๋ชจ๋ ๊ณผ์ ์ ์ฌ์ฉ์๋น ๋ผ์ด์ ์ค ๋น์ฉ ์์ด ์์ฒด ํธ์คํ ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
๋ชจ๋ ๋ฐ์ดํฐ ์คํ์์ Apache Superset์ ์์น
Superset์ Flask, SQLAlchemy, ๊ทธ๋ฆฌ๊ณ React ํ๋ฐํธ์๋ ์์ ๊ตฌ์ถ๋ Python ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ์์ฒด ์ค์ , ์ฐจํธ, ๋์๋ณด๋๋ฅผ ๋ฉํ๋ฐ์ดํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค(Postgres ๋๋ MySQL)์ ์ ์ฅํ๊ณ , Celery ์์ปค๋ฅผ ํตํด ๋น๋๊ธฐ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉฐ, ๊ฒฐ๊ณผ๋ฅผ Redis์ ์บ์ํฉ๋๋ค. ๊ฒฐ์ ์ ์ผ๋ก ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒด ์คํ ๋ฆฌ์ง๋ก ๋ณต์ฌํ์ง ์์ต๋๋ค. ๋ชจ๋ ์ฐจํธ๋ ์ฐ๊ฒฐ๋ ์จ์ดํ์ฐ์ค์ ๋ํด ์ค์๊ฐ SQL์ ๋ฐํํ๋ฏ๋ก, Superset์ ์์ํ ํ๋ ์ ํ ์ด์ ๋ ์ด์ด๋ก ๋์ํฉ๋๋ค.
์ด๋ฌํ ์์น ์ค์ ์ ์ค์ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์คํ์์ Fivetran์ด๋ Airbyte ๊ฐ์ ์์ง ๋๊ตฌ๊ฐ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฌํ๊ณ , ๋ณํ ๋ ์ด์ด๊ฐ ์ด๋ฅผ ๋ชจ๋ธ๋งํ๋ฉฐ, Superset์ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํํฉ๋๋ค. ์ด๋ฏธ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ dbt๋ฅผ ์ฌ์ฉํ๋ ํ์ ๋งํธ ์์ Superset์ ์ง์ ์ฐ๊ฒฐํ๋๋ฐ, ๊นจ๋ํ๊ณ ํ ์คํธ๋ ์จ์ดํ์ฐ์ค๊ฐ ์ ํ์๋น์ค ๋์๋ณด๋๋ฅผ ์ ๋ขฐํ ์ ์๊ฒ ๋ง๋๋ ๊ธฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ํญ๋์ ๋ฐ์ดํฐ ๋ถ์ ์ญ๋์ ์์ผ๋ ค๋ ์ฌ๋์๊ฒ ์ด๋ฌํ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ฅผ ์ดํดํ๋ ๊ฒ์ ํํ ๋ฉด์ ์ฃผ์ ์ ๋๋ค.
Superset์ ๊ธฐ๋ณธ์ ์ผ๋ก 40๊ฐ๊ฐ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ ์ง์ํฉ๋๋ค. ๊ณต์ ๋ฌธ์๋ Snowflake, BigQuery, Postgres, Trino, ClickHouse, ๊ทธ๋ฆฌ๊ณ 2026๋ ๋ฆด๋ฆฌ์ค์์ ์๋กญ๊ฒ ์ถ๊ฐ๋ MongoDB(Atlas์ ์์ฒด ํธ์คํ ๋ชจ๋)์ ๋ํ ์ปค๋ฅํฐ๋ฅผ ๋์ดํ๊ณ ์์ต๋๋ค.
Explore ๋ทฐ๋ก ๋ฐ์ดํฐ ๋ถ์ ๋์๋ณด๋ ๊ตฌ์ฑํ๊ธฐ
Superset์ ๋ชจ๋ ์ฐจํธ๋ ๋ฐ์ดํฐ์ ์์ ์์ํฉ๋๋ค. ๋ฐ์ดํฐ์ ์ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฑ๋ก๋ ๋ฌผ๋ฆฌ ํ ์ด๋ธ์ด๊ฑฐ๋, Superset์ด ํ ์ด๋ธ์ฒ๋ผ ์ทจ๊ธํ๋ ์ ์ฅ๋ SQL ์ฟผ๋ฆฌ์ธ ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๋๋ค. ๊ฐ์ ๋ฐ์ดํฐ์ ์ ์ค์ฉ์ ์ธ ์ถ๋ฐ์ ์ธ๋ฐ, ๋ถ์๊ฐ๊ฐ ์จ์ดํ์ฐ์ค์ ๋ํ DDL ๊ถํ ์์ด๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ ์ ์๊ฒ ํด ์ฃผ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์๋ ์์๋ ์๊ฐ ํ์ฑ ์ฌ์ฉ์๋ฅผ ๋ฏธ๋ฆฌ ์ง๊ณํ๋ ๊ฐ์ ๋ฐ์ดํฐ์ ์ ์ ์ํฉ๋๋ค. ์ด ์ฟผ๋ฆฌ๋ฅผ ํ ๋ฒ ๋ฑ๋กํ๋ฉด ์ดํ์ ๋ชจ๋ ์ฐจํธ๊ฐ ํ์ฑ ์ฌ์ฉ์์ ๋ํ ๋์ผํ ์ ์๋ฅผ ์์ํ๋ฉฐ, ์ด๊ฒ์ด ๋ฐ๋ก ์๋งจํฑ ๋ ์ด์ด๊ฐ ํ ์ ๋ฐ์ ์งํ ํธ์ฐจ(metric drift)๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ์์ ๋๋ค.
-- monthly_active_users.sql (virtual dataset)
SELECT
date_trunc('month', event_date) AS activity_month,
plan_tier,
count(DISTINCT user_id) AS active_users,
count(*) AS total_events
FROM analytics.fct_events
WHERE event_date >= current_date - interval '24 months'
GROUP BY 1, 2
ORDER BY 1;๋ฐ์ดํฐ์
์ด ์์ฑ๋๋ฉด Explore ๋ทฐ๋ ์ปฌ๋ผ์ ์ฐจ์์ผ๋ก, ์ง๊ณ๋ฅผ ์งํ๋ก ๋ณํํฉ๋๋ค. ๋ถ์๊ฐ๋ x์ถ์ activity_month๋ฅผ, ์งํ๋ก active_users๋ฅผ, ์๋ฆฌ์ฆ๋ก plan_tier๋ฅผ ๋์ต๋๋ค. ์ฐจํธ ์์ฒด์๋ SQL์ด ์ ํ ํ์ํ์ง ์์ต๋๋ค. ์งํ๋ ๋ฐ์ดํฐ์
์์ค์์ ์ ์ฅ๋ SQL ํํ์์ผ๋ก ์ ์ํ ์๋ ์์ผ๋ฏ๋ก, count(DISTINCT user_id) ๊ฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ํ ๋ฒ๋ง ์์ฑํ๊ณ ์ด๋์๋ ์ฌ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ฐจํธ๋ฅผ ๋์๋ณด๋์ ๋ฐฐ์นํ๋ฉด ๋ค์ดํฐ๋ธ ํํฐ๊ฐ ๋ ์ง ๋ฒ์๋ ์ง์ญ ์ ํ๊ธฐ ๊ฐ์ ๋จ์ผ ์ปจํธ๋กค์ ํ์ด์ง์ ๋ชจ๋ ์ฐจํธ์ ์ ํํฉ๋๋ค. ํฌ๋ก์ค ํํฐ๋ง์ ์ฌ๊ธฐ์ ํ ๊ฑธ์ ๋ ๋์๊ฐ๋๋ค. ํ ์ฐจํธ์ ๋ง๋๋ฅผ ํด๋ฆญํ๋ฉด ๋๋จธ์ง ๋์๋ณด๋๊ฐ ํด๋น ๊ฐ์ผ๋ก ํํฐ๋ง๋์ด, ์ ์ ์ธ ๋ฆฌํฌํธ๋ฅผ ํ์ํ ๋๊ตฌ๋ก ๋ฐ๊ฟ๋๋ค. Superset์ ์๊ณ์ด๊ณผ ํผ๋ฒ ํ ์ด๋ธ๋ถํฐ deck.gl ์ง๋ฆฌ ๊ณต๊ฐ ๋ ์ด์ด๊น์ง 50๊ฐ์ง๊ฐ ๋๋ ์๊ฐํ ์ ํ์ ์ ๊ณตํ๋ฉฐ, ์ต๊ทผ ๋ฆด๋ฆฌ์ค์์ ๋์ ๋ ECharts ๊ธฐ๋ฐ ๋ ๋๋ฌ๋ ๋์ฉ๋ ๊ฒฐ๊ณผ ์งํฉ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ฉ์ถ์ง ์๊ณ ์ฒ๋ฆฌํฉ๋๋ค.
Superset 6.0์ ๋ฐ์ดํฐ์ ์ ์ํ ๊ณ์ธตํ ํด๋ ์์คํ ์ ์ถ๊ฐํ์ฌ, ํ๋ฉด ๋ชฉ๋ก์ ์คํฌ๋กคํ๋ ๋์ ๊ด๋ จ ์งํ์ ์ปฌ๋ผ์ ๊ทธ๋ฃนํํ ์ ์๊ฒ ํ์ต๋๋ค. ๋ํ ์ผ๊ธ ๋คํฌ ๋ชจ๋๋ฅผ ๊ฐ์ถ Ant Design v5 ๊ธฐ๋ฐ์ ์์ ํ ๋์์ธ ๊ฐํธ์ ์ ๊ณตํ๋๋ฐ, ์ด๋ ์ค๋๋ 3.x ๋ฐฐํฌํ์ ์ฐ๋ค๊ฐ ์ด ๋๊ตฌ๋ก ๋์์จ ์ฌ๋์๊ฒ ๊ฐ์ฅ ๋์ ๋๋ ๋ณํ์ ๋๋ค.
๋ชจ๋ ์ฐจํธ๊ฐ ์ค์๊ฐ SQL์ ์คํํ๊ธฐ ๋๋ฌธ์, ๋์๋ณด๋ ์ง์ฐ ์๊ฐ์ ์จ์ดํ์ฐ์ค์ ์บ์๊ฐ ์ง๋ฐฐํฉ๋๋ค. Superset์ ์ค์ ๊ฐ๋ฅํ ํ์์์๊ณผ ํจ๊ป ๊ฒฐ๊ณผ๋ฅผ Redis์ ์บ์ํ๋ฉฐ, ์ธ๋ค์ผ๊ณผ ๋์๋ณด๋ ์บ์ฑ์ด ์์ฃผ ์กฐํ๋๋ ํ์ด์ง๋ฅผ ์์ดํฉ๋๋ค. ๋ฐ์ดํฐ์ ๋ณ๋ก ์บ์ ํ์์์์ ์กฐ์ ํ๋ ๊ฒ(์ผ์ผ ์ค๋ ์์๋ ๊ธธ๊ฒ, ์ค์ค์๊ฐ ํ ์ด๋ธ์๋ ์งง๊ฒ)์ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋จ์ผ ์ฑ๋ฅ ์ง๋ ๋์ ๋๋ค.
SQL Lab๊ณผ Jinja ํ ํ๋ฆฟ: Superset์ ํต์ฌ ๊ฐ์
SQL Lab์ ๋ด์ฅ SQL IDE์ด๋ฉฐ, Superset์ด ํฌ์ธํธ ์ค ํด๋ฆญ ๋๊ตฌ์ ์ฐจ๋ณํ๋๋ ์ง์ ์ ๋๋ค. ์ฐ๊ฒฐ๋ ์คํค๋ง์ ๋ํ ์๋ ์์ฑ, ์ฅ์๊ฐ ์คํ๋๋ ์ฟผ๋ฆฌ๋ฅผ ์ํ ๋น๋๊ธฐ ์คํ, ์ฟผ๋ฆฌ ์ด๋ ฅ, ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๊ฒฐ๊ณผ ์งํฉ์ ์ํด๋ฆญ์ผ๋ก ์ฐจํธ๋ ๊ฐ์ ๋ฐ์ดํฐ์ ์ผ๋ก ๋ณํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ฉด์ ์์ ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ๋ ๊ธฐ๋ฅ์ Jinja ํ
ํ๋ฆฟ์
๋๋ค. Superset์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๊ธฐ ์ ์ ์ปจํ
์คํธ ์ธ์ ๋งคํฌ๋ก๋ฅผ ์ฃผ์
ํ์ฌ, ๋จ์ผ ์ฟผ๋ฆฌ๊ฐ ๋์๋ณด๋ ํํฐ, ํ์ฌ ์ฌ์ฉ์, ๋๋ ์๊ฐ ๋ฒ์์ ๋ง์ถฐ ์ ์ํ๋๋ก ํฉ๋๋ค. ์ฐ๋ฌธ์์ {{ current_username() }}์ด๋ {{ filter_values('country') }} ๊ฐ์ ํ
ํ๋ฆฟ ๋ณ์๋ฅผ ์ธ๊ธํ ๋๋ ์ฃผ์๊ฐ ํ์ํ์ง๋ง, ์ฟผ๋ฆฌ ๋ด๋ถ์์ ๋งคํฌ๋ก๋ ์คํ ์์ ์ ํ์ฅ๋ฉ๋๋ค.
-- revenue_by_segment.sql (SQL Lab with Jinja)
SELECT
segment,
sum(amount) AS revenue
FROM analytics.fct_orders
WHERE order_date BETWEEN '{{ from_dttm }}' AND '{{ to_dttm }}'
{% if filter_values('country') %}
AND country IN ({{ "'" + "','".join(filter_values('country')) + "'" }})
{% endif %}
GROUP BY segment
ORDER BY revenue DESC;์ฌ๊ธฐ์ from_dttm๊ณผ to_dttm์ ๋์๋ณด๋ ์๊ฐ ๋ฒ์์ ๋ฐ์ธ๋ฉ๋๊ณ , filter_values('country')๋ ์ฌ์ฉ์๊ฐ ๋ค์ดํฐ๋ธ ํํฐ์์ ์ ํํ ๊ฐ์ ์ฝ์ด ์ ํ์ด ์กด์ฌํ ๋๋ง ํด๋น ๊ฐ์ ์ฃผ์
ํฉ๋๋ค. ์ด๊ฒ์ด ํ๋์ ์ ์ฅ๋ ์ฟผ๋ฆฌ๊ฐ ์์ ํ ๋ํํ ๋์๋ณด๋๋ฅผ ๊ตฌ๋ํ๋ ๋ฐฉ์์
๋๋ค. ์ด ๋งคํฌ๋ก๋ ํ์ค Jinja ํ
ํ๋ฆฟ ์์ง์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ํ๋ก์ ํธ์ ๋ฌธ์ํ๋ Superset ์ ์ฉ ํฌํผ๋ก ํ์ฅ๋์ด ์์ต๋๋ค.
Jinja๋ ๋ํ ํ ์์ค ๋ณด์ ํํ์๊ณผ ์ค์ ์ ์ ์ฅ๋๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋งคํฌ๋ก๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ํ์ ๋งคํฌ๋ก๋ฅผ ํ ๋ฒ ์ ์ํ๊ณ (์: ํ์ค ํ๊ณ์ฐ๋ ๊ฒฝ๊ณ๋ ํ ๋ํธ ํํฐ) ์ด๋ค ์ฟผ๋ฆฌ์์๋ ํธ์ถํ์ฌ, ์์ญ ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๋ฐ์ ๊ฑธ์ณ ๋น์ฆ๋์ค ๊ท์น์ ์ผ๊ด๋๊ฒ ์ ์งํฉ๋๋ค. SQL Lab์ ์ฟผ๋ฆฌ ์ด๋ ฅ์ ๋ณด์กดํ๊ณ ์ด๋ค ๊ฒฐ๊ณผ๋ ์ ์ฅ๋ ์ฟผ๋ฆฌ๋ก ๋ง๋ค ์ ์์ผ๋ฏ๋ก, ๋ก์ง์ด ๊ฐ์ ๋ฐ์ดํฐ์ ์ผ๋ก ์น๊ฒฉ๋๊ฑฐ๋ ์จ์ดํ์ฐ์ค๋ก ํธ์๋๊ธฐ ์ ์ ๊ฐ๋ฒผ์ด ๋ฒ์ ๊ด๋ฆฌ ์คํฌ๋์นํจ๋ ์ญํ ๋ ๊ฒธํฉ๋๋ค. SQL ์๋์ฐ ํจ์์ ์ต์ํ ๋ถ์๊ฐ๋ SQL Lab์ด ๋์ค์ ๊ฐ์ ๋ฐ์ดํฐ์ ์ด ๋ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ํ๋กํ ํ์ดํํ๊ธฐ์ ์์ฐ์ค๋ฌ์ด ๊ณต๊ฐ์์ ์๊ฒ ๋ฉ๋๋ค.
Superset vs Tableau: ์คํ์์ค์ ์ํฐํ๋ผ์ด์ฆ BI์ ๋๊ฒฐ
๊ฐ์ฅ ํํ ํ๊ฐ ์ง๋ฌธ์ Superset vs Tableau์ ๋๋ค. ๋ ๋๊ตฌ๋ ์ ๋ฐ๋์ ์ฒ ํ์ผ๋ก ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. Tableau๋ ๋ฐ์คํฌํฑ ์ ์ ์ฑ๊ณผ ์ข์๋น ๊ฐ๊ฒฉ ์ ์ฑ ์ ๊ฐ์ถ ์ธ๋ จ๋ ์์ฉ ์ ํ์ธ ๋ฐ๋ฉด, Superset์ ๋ผ์ด์ ์ค ๋น์ฉ์ด ์๊ณ ์ ์ฒด ์์ค์ ์ ๊ทผํ ์ ์๋ ์์ฒด ํธ์คํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
| ํญ๋ชฉ | Apache Superset | Tableau | |-----------|-----------------|---------| | ๋ผ์ด์ ์ค | ๋ฌด๋ฃ, Apache 2.0 | ์ฌ์ฉ์๋น ๊ตฌ๋ | | ๋ฐฐํฌ | ์์ฒด ํธ์คํ (Docker, Kubernetes) | Cloud ๋๋ Server | | ๋ฐ์ดํฐ ๋ชจ๋ธ | ์ค์๊ฐ SQL, ์ถ์ถ ์์ง ์์ | ์ธ๋ฉ๋ชจ๋ฆฌ ์ถ์ถ์ ์ฌ์ฉํ๋ VizQL | | ์ปค์คํฐ๋ง์ด์ง | ์ ์ฒด ์์ค, ํ๋ฌ๊ทธ์ธ ์ฐจํธ | ํ์ํ, ํ์ฅ API | | ์คํ๋ผ์ธ ์ ์ | ๋ธ๋ผ์ฐ์ ์ ์ฉ | Tableau Desktop | | ๊ฑฐ๋ฒ๋์ค | RBAC, ํ ์์ค ๋ณด์ | ์ํฐํ๋ผ์ด์ฆ ๊ฑฐ๋ฒ๋์ค ์ ํ๊ตฐ |
Superset์ ๋น์ฉ, ํฌ๋ช ์ฑ, ์จ์ดํ์ฐ์ค ๋ค์ดํฐ๋ธ ์คํ์์ ์์๋ฉฐ, ์ด๋ SQL์ ๋ฅ์ํ๊ณ ์ต์ ํด๋ผ์ฐ๋ ์จ์ดํ์ฐ์ค๋ฅผ ๊ฐ์ถ ํ์ ์ ํฉํฉ๋๋ค. Tableau๋ ๋๋๊ทธ ์ค ๋๋กญ ์ ์, ์ด์ง์ ์ธ ์์ค์ ๋ธ๋ ๋ฉ, ์ฑ์ํ ์ํฐํ๋ผ์ด์ฆ ๊ฑฐ๋ฒ๋์ค์์ ์ฐ์๋ฅผ ์ ์งํฉ๋๋ค. ๋์ผํ ํธ๋ ์ด๋์คํ ๊ตฌ๋๊ฐ Power BI ๋ Tableau ๊ฒฐ์ ์๋ ์ ์ฉ๋ฉ๋๋ค. ๊ฐ๋ฐฉ์ ์ด๊ณ ์จ์ดํ์ฐ์ค ๋ค์ดํฐ๋ธ์ธ ๋๊ตฌ๋ SQL ์ค๋ ฅ์ ๋ณด์ํ๊ณ , ์์ฉ ์ ํ๊ตฐ์ ์์ฑ๋์ ์ง์์ ๋ณด์ํฉ๋๋ค. ์จ์ดํ์ฐ์ค ์ฐ์ ์กฐ์ง์๊ฒ Superset์ ์ข ์ข ๋ ๋์ ์ฅ๊ธฐ์ ์ ํ์ ๋๋ค.
Data Analytics ๋ฉด์ ์ค๋น๊ฐ ๋์ จ๋์?
์ธํฐ๋ํฐ๋ธ ์๋ฎฌ๋ ์ดํฐ, flashcards, ๊ธฐ์ ํ ์คํธ๋ก ์ฐ์ตํ์ธ์.
ํ๋ก๋์ ์ ์ํ Apache Superset ๊ตฌ์ฑ
Superset์ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ ์ํ๋ superset_config.py ํ์ผ์ ํตํด ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ธฐ๋ฅ ํ๋๊ทธ๊ฐ ๊ธฐ๋ฅ์ ์ผ๊ณ ๋๋ฉฐ, ์บ์ฑ๊ณผ ๋น๋๊ธฐ ์ฟผ๋ฆฌ ์ค์ ์ด ํด๋น ๋ฐฐํฌ๊ฐ ์ค์ ํธ๋ํฝ์ ๊ฒฌ๋๋์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์๋ ์ค๋ํซ์ ํ์ค์ ์ธ ํ๋ก๋์
๊ธฐ์ค์ ์ ๋ณด์ฌ ์ค๋๋ค.
# superset_config.py
import os
SECRET_KEY = os.environ["SUPERSET_SECRET_KEY"] # rotate, never commit
SQLALCHEMY_DATABASE_URI = os.environ["METADATA_DB_URI"]
FEATURE_FLAGS = {
"DASHBOARD_RBAC": True, # per-dashboard role access
"ALERT_REPORTS": True, # scheduled email/Slack reports
"EMBEDDED_SUPERSET": True, # embed dashboards via SDK
}
# Redis-backed result and metadata caching
CACHE_CONFIG = {
"CACHE_TYPE": "RedisCache",
"CACHE_DEFAULT_TIMEOUT": 300,
"CACHE_REDIS_URL": os.environ["REDIS_URL"],
}
# Celery handles async SQL Lab queries and alerts
class CeleryConfig:
broker_url = os.environ["REDIS_URL"]
result_backend = os.environ["REDIS_URL"]
CELERY_CONFIG = CeleryConfig๋ณด์์ ๊ณ์ธตํ๋์ด ์์ต๋๋ค. ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ฉฐ, Superset 6.0์ ์ฌ์ฉ์ ๊ทธ๋ฃน ๊ธฐ๋ฐ ์ ๊ทผ์ ์ถ๊ฐํ์ฌ ์ญํ ์ด ๊ฐ์ธ์ด ์๋ ๊ทธ๋ฃน์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ํ ์์ค ๋ณด์ ๊ท์น์ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ์ ์ ๋ํด ์คํํ๋ ๋ชจ๋ ์ฟผ๋ฆฌ์ WHERE ์ ์ ๋ง๋ถ์ฌ, ๋์๋ณด๋๋ฅผ ๋ณต์ ํ์ง ์๊ณ ๋ ํ ๋ํธ ๊ฒฉ๋ฆฌ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
์ต๊ทผ ๋ฒ์ ์ Superset์ SECRET_KEY๊ฐ ๋ฌธ์ํ๋ ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ๋จ์ ์์ผ๋ฉด ์์์ ๊ฑฐ๋ถํฉ๋๋ค. ํญ์ ๊ฐ๋ ฅํ ํ๊ฒฝ ์ฃผ์
ํค๋ฅผ ์ ๊ณตํ๊ณ superset re-encrypt-secrets ๋ช
๋ น์ผ๋ก ์ด๋ฅผ ๊ต์ฒดํ์ญ์์ค. ํค๊ฐ ์ ์ถ๋๋ฉด ๋ฉํ๋ฐ์ดํฐ ์คํ ์ด์ ์ ์ฅ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๊ฒฉ ์ฆ๋ช
์ด ๋
ธ์ถ๋ฉ๋๋ค.
๋ฐฐํฌ๋ ๋๊ฐ ๊ณต์ Docker ์ด๋ฏธ์ง๋ Kubernetes์ Helm ์ฐจํธ๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ฉฐ, ๋ฉํ๋ฐ์ดํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค, Redis, Celery ์์ปค๊ฐ ๋ณ๋์ ์๋น์ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์์ค ์ ์ฅ์์ 6.0 ๋ฆด๋ฆฌ์ค ๋ ธํธ๋ ์ฐธ์กฐ ์ํคํ ์ฒ์ ์ ๊ทธ๋ ์ด๋ ๊ฒฝ๋ก๋ฅผ ์์ธํ ๋ฌธ์ํํ๊ณ ์์ต๋๋ค.
Apache Superset ๋ฉด์ ์ง๋ฌธ
๋ฐ์ดํฐ ๋ถ์๊ฐ์ ๋ถ์ ์์ง๋์ด๋ง ๋ฉด์ ์ Superset์ ์ ์ ๋ ์ง์ ์ ์ผ๋ก ํ๊ณ ๋ญ๋๋ค. ์๋ ์ง๋ฌธ๋ค์ 2026๋ ์ ์ฑ์ฉํ์ด ์ค์ ๋ก ๋ฌป๋ ๋ด์ฉ์ ๋ฐ์ํฉ๋๋ค.
Superset์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ์ ํต์ ์ธ BI ๋๊ตฌ์ ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ์? Superset์ ์ฐจํธ๋ฅผ ๋ ๋๋งํ ๋๋ง๋ค ์์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค์๊ฐ์ผ๋ก ์ฟผ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ Redis์ ์บ์ํฉ๋๋ค. ๋ ์์ ์ธ ์ถ์ถ ์์ง์ด ์์ต๋๋ค. ์ด ๋ฐฉ์์ ๋์๋ณด๋๋ฅผ ํญ์ ์ต์ ์ํ๋ก ์ ์งํ์ง๋ง ๋ถํ๋ฅผ ์จ์ดํ์ฐ์ค๋ก ์ ๊ฐํ๋ฏ๋ก, ์ฑ๋ฅ์ ๊ธฐ๋ฐ ํ ์ด๋ธ๊ณผ ์บ์ฑ ์ ๋ต์ ๋ฌ๋ ค ์์ต๋๋ค.
๊ฐ์ ๋ฐ์ดํฐ์ ์ด๋ ๋ฌด์์ด๋ฉฐ ์ธ์ ์ฌ์ฉํด์ผ ํ๋์? ๊ฐ์ ๋ฐ์ดํฐ์ ์ ํ ์ด๋ธ์ฒ๋ผ ์ทจ๊ธ๋๋ ์ ์ฅ๋ SQL ์ฟผ๋ฆฌ์ ๋๋ค. ์จ์ดํ์ฐ์ค DDL ๊ถํ ์์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํด์ผ ํ๊ฑฐ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์งํ ์ ์๋ฅผ ์ํ๋ ๋ถ์๊ฐ์๊ฒ ์ ํฉํฉ๋๋ค. ๋ฌด๊ฑฐ์ด ๋ณํ์ ๊ฒฝ์ฐ, ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๋ชจ๋ ์ฟผ๋ฆฌ๋ง๋ค ์ ์ฒด SQL์ ์คํํ๋ฏ๋ก (dbt๋ก ๊ตฌ์ถํ) ๋ชจ๋ธ๋ง๋ ํ ์ด๋ธ์ด ๋ ๋ซ์ต๋๋ค.
Jinja ํ ํ๋ฆฟ์ ์ฟผ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๋์ ์ผ๋ก ๋ง๋๋์? ๋งคํฌ๋ก๋ ์คํ ์ ์ ํ์ฅ๋ฉ๋๋ค. ์๋ ์์๋ ์ธ์ ์ ์์ ๋ฐ์ธ๋ฉํ์ฌ ์ฌ์ฉ์๋ณ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋๋ฐ, ์ด ํจํด์ ํ ์์ค ๋ณด์์ ๊ธฐ๋ฐ์ด๊ธฐ๋ ํฉ๋๋ค.
-- user_scoped_orders.sql
SELECT order_id, amount, status
FROM analytics.fct_orders
WHERE owner_email = '{{ current_username() }}'
ORDER BY order_date DESC;๋ฉํฐํ ๋ํธ ๊ฒฉ๋ฆฌ๋ ์ด๋ป๊ฒ ๊ฐ์ ๋๋์? ํ ์์ค ๋ณด์ ๊ท์น์ด ์ญํ ๋ณ๋ก ๋ฐ์ดํฐ์ ์ ํํฐ ์ ์ ๋ถ์ด๋ฏ๋ก, ๋์ผํ ๋์๋ณด๋๊ฐ ๊ฐ ํ ๋ํธ์๊ฒ ์์ ์ ํ๋ง ๋ณด์ฌ ์ค๋๋ค. ๋์๋ณด๋ ์์ค RBAC์ ๊ฒฐํฉํ๋ฉด ๊ณ ๊ฐ๋ง๋ค ๋์๋ณด๋๋ฅผ ํ๋์ฉ ์ ์งํ ํ์๊ฐ ์์ต๋๋ค.
๋๋ฆฐ ๋์๋ณด๋๋ ์ด๋ป๊ฒ ์ง๋จํ๋์? ๋จผ์ SQL Lab์์ ๊ฐ์ฅ ๋๋ฆฐ ์ฐจํธ๋ฅผ ๋ถ๋ฆฌํ๊ณ ์จ์ดํ์ฐ์ค์์ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ํ์ธํฉ๋๋ค. ํํ ์์ธ์ ๋ ๋๋งํ ๋๋ง๋ค ๋ฌด๊ฑฐ์ด ์กฐ์ธ์ ์คํํ๋ ๊ฐ์ ๋ฐ์ดํฐ์ , ๋๋ฝ๋ ์จ์ดํ์ฐ์ค ํํฐ์ , ๊ทธ๋ฆฌ๊ณ ๋๋ฌด ๋ฎ๊ฒ ์ค์ ๋ ์บ์ ํ์์์์ ๋๋ค. ํด๊ฒฐ์ฑ ์ dbt๋ก ๋ฐ์ดํฐ์ ์ ์๋ฅ์์ ๊ตฌ์ฒดํ(materialize)ํ๋ ๊ฒ๋ถํฐ ์บ์ ํ์์์์ ๋์ด๊ณ ์จ์ดํ์ฐ์ค ์ธ๋ฑ์ค๋ ํด๋ฌ์คํฐ๋ง ํค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๊น์ง ๋ค์ํฉ๋๋ค.
Alert์ Report ๊ธฐ๋ฅ์ ๋ฌด์์ ์ฌ์ฉ๋๋์? ALERT_REPORTS ํ๋๊ทธ์ Celery beat๋ฅผ ์ฌ์ฉํ๋ฉด Superset์ด ์ด๋ฉ์ผ์ด๋ Slack์ผ๋ก ์์ฝ๋ ๋์๋ณด๋ ์ค๋ ์์ ์ ์กํ๊ณ , ์งํ๊ฐ ์๊ณ๊ฐ์ ๋์ผ๋ฉด ์๋ฆผ์ด ๋ฐ์ํฉ๋๋ค. ์ด๋ ๋ณ๋์ ๋๊ตฌ ์์ด ๋๋ถ๋ถ์ ์ด์ ๋ชจ๋ํฐ๋ง์ ์ฒ๋ฆฌํ๋ฉฐ, ๋์๋ณด๋๊ฐ ๊ตฌ์ถ๋ ๋ค ์์ฃผ ์ด์ด์ง๋ ํ์ ์ฃผ์ ์ ๋๋ค.
Superset์ด ์๋ชป๋ ์ ํ์ธ ๊ฒฝ์ฐ๋ ์ธ์ ์ธ๊ฐ์? ํ์ SQL ์ญ๋์ด ์ ํ ์๊ฑฐ๋, ์คํ๋ผ์ธ ๋ฐ์คํฌํฑ ์ ์์ด ํ์ํ๊ฑฐ๋, ์ํฐํ๋ผ์ด์ฆ ์ ํ๊ตฐ์ ๊ฑฐ๋ฒ๋์ค์ ๋ฒค๋ ์ง์์ด ํ์ํ ๊ฒฝ์ฐ์ ๋๋ค. Superset์ SQL์ ๋ฅ์ํ ํ๊ณผ ์ฟผ๋ฆฌํ ๊ฐ์น๊ฐ ์๋ ์จ์ดํ์ฐ์ค๋ฅผ ์ ์ ๋ก ํฉ๋๋ค.
๊ฒฐ๋ก
2026๋ ์ Apache Superset์ SQL ์ค๋ ฅ์ ๋น์ฉ ์๋ ์์ ์ปค์คํฐ๋ง์ด์ฆ ๊ฐ๋ฅํ ๋ถ์์ผ๋ก ๋ณด์ํ๋ ์ฑ์ํ ์จ์ดํ์ฐ์ค ๋ค์ดํฐ๋ธ BI ํ๋ซํผ์ ๋๋ค. ํต์ฌ ์์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Superset์ ์์ฒด ๋ฐ์ดํฐ ์ ์ฅ์๊ฐ ์๋๋ผ ์ ๋ชจ๋ธ๋ง๋ ์จ์ดํ์ฐ์ค ์์ ํ๋ ์ ํ ์ด์ ๋ ์ด์ด๋ก ๋ค๋ฃจ์ญ์์ค.
- ๊ฐ์ ๋ฐ์ดํฐ์ ๊ณผ ๋ฐ์ดํฐ์ ์์ค ์งํ๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ํ ๋ฒ ์ ์ํ๊ณ ์ฌ๋ฌ ์ฐจํธ์์ ์ฌ์ฌ์ฉํ์ญ์์ค.
- SQL Lab๊ณผ Jinja ํ ํ๋ฆฟ์ ์๋ฌํ์ญ์์ค. ๋์ ์ฟผ๋ฆฌ์ ํ ์์ค ๋ณด์์ ๊ฐ์ฅ ๋ ๋ฒ๋ฆฌ์ง๊ฐ ํฐ Superset ์ญ๋์ ๋๋ค.
- SQL ๋ฅ์๋, ์จ์ดํ์ฐ์ค ๋ค์ดํฐ๋ธ ์คํ, ๋ฌด๋น์ฉ ๋ผ์ด์ ์ค๊ฐ ๋๋๊ทธ ์ค ๋๋กญ ์ ์๋ณด๋ค ์ค์ํ ๋ Tableau ๋์ Superset์ ์ ํํ์ญ์์ค.
- ๋์๋ณด๋๋ฅผ ๋
ธ์ถํ๊ธฐ ์ ์ ์ฃผ์
๋
SECRET_KEY, Redis ์บ์ฑ, Celery ์์ปค, ๊ทธ๋ฃน ๊ธฐ๋ฐ RBAC๋ก ํ๋ก๋์ ์ ์ ๊ทธ์ญ์์ค.
์ฐ์ต์ ์์ํ์ธ์!
๋ฉด์ ์๋ฎฌ๋ ์ดํฐ์ ๊ธฐ์ ํ ์คํธ๋ก ์ง์์ ํ ์คํธํ์ธ์.
ํ๊ทธ
๊ณต์
๊ด๋ จ ๊ธฐ์ฌ

Pandas 3.0 ์๋ฒฝ ๊ฐ์ด๋(2026): ์๋ก์ด API, ์ฃผ์ ๋ณ๊ฒฝ์ฌํญ, ๋ฉด์ ์ง๋ฌธ ์ด์ ๋ฆฌ
Pandas 3.0์ Copy-on-Write, PyArrow ๋ฌธ์์ด ๋ฐฑ์๋, pd.col() ํํ์ ๋น๋ ๋ฑ ํต์ฌ ๋ณ๊ฒฝ์ฌํญ์ ์์ธํ ๋ถ์ํฉ๋๋ค. ๋ฐ์ดํฐ ๋ถ์ ์์ง๋์ด ๋ฉด์ ์์ ์ถ์ ๋๋ ํต์ฌ ์ง๋ฌธ๋ ํจ๊ป ๋ค๋ฃน๋๋ค.

2026๋ ๋ฐ์ดํฐ ๋ถ์๊ฐ๋ฅผ ์ํ dbt ์๋ฒฝ ๊ฐ์ด๋: ๋ชจ๋ธ๋ง, ํ ์คํธ, ๋ฉด์ ์ง๋ฌธ
dbt ํ๋ก์ ํธ ๊ตฌ์กฐ, ๋จธํฐ๋ฆฌ์ผ๋ผ์ด์ ์ด์ ์ ๋ต, ๋ฐ์ดํฐ ํ์ง ํ ์คํธ, Jinja ๋งคํฌ๋ก, ๊ทธ๋ฆฌ๊ณ ์ค๋ฌด ๋ฉด์ ์์ ์์ฃผ ๋ฑ์ฅํ๋ ์ง๋ฌธ๊น์ง ํฌ๊ด์ ์ผ๋ก ๋ค๋ฃน๋๋ค.

Power BI vs Tableau 2026๋ ์๋ฒฝ ๋น๊ต: ๋ฐ์ดํฐ ๋ถ์๊ฐ๊ฐ ๋ฐฐ์์ผ ํ ๋๊ตฌ๋?
2026๋ Power BI์ Tableau๋ฅผ ๊ฐ๊ฒฉ, AI ๊ธฐ๋ฅ, ์๊ฐํ ์ฑ๋ฅ, ์ปค๋ฆฌ์ด ๊ฐ์น ์ธก๋ฉด์์ ๋น๊ต ๋ถ์ํฉ๋๋ค. ๋ฐ์ดํฐ ๋ถ์ ์ ๋ฌธ๊ฐ๋ฅผ ์ํ BI ๋๊ตฌ ์ ํ ๊ฐ์ด๋์ ๋๋ค.