๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง

์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถ„์„ ํ™˜๊ฒฝ ๊ตฌ์ถ• - 10. Streamlit, Clickhouse๋กœ ์‹ค์‹œ๊ฐ„ ๋Œ€์‹œ๋ณด๋“œ ๊ตฌํ˜„ ๐Ÿ”จ(part. 1)

Tempo 2025. 4. 10. 13:00

๋ฐ์ดํ„ฐ ๋ถ„์„ ํ™˜๊ฒฝ ๊ตฌ์ถ• - 10. Streamlit, Clickhouse๋กœ ์‹ค์‹œ๊ฐ„ ๋Œ€์‹œ๋ณด๋“œ ๊ตฌํ˜„ ๐Ÿ”จ(part. 1)

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๊ตฌ์ถ•ํ–ˆ๋˜ Clickhouse ์ธํ”„๋ผ์™€ Streamlit์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ฒซ๋ฒˆ์งธ ํŒŒํŠธ๋กœ Streamlit ๋‚ด Clickhouse ์—ฐ๊ฒฐ ํŒจํ‚ค์ง€ ์„ค์น˜์™€ ๋ฐ์ดํ„ฐ ์กฐํšŒ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

- Clickhouse ์‹ค์‹œ๊ฐ„ ๋ถ„์„ ํ…Œ์ด๋ธ” ์ƒ์„ฑ(https://jongwho.tistory.com/26)

 

๋ฐ์ดํ„ฐ ๋ถ„์„ ํ™˜๊ฒฝ ๊ตฌ์ถ• - 05. Clickhouse ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถ„์„ ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•˜๊ธฐ

๐Ÿš€ ์ด ๊ธ€์—์„œ ๋‹ค๋ฃฐ ๋‚ด์šฉ1๏ธโƒฃ Kafka์™€ ์—ฐ๊ฒฐ๋œ ClickHouse ํ…Œ์ด๋ธ” ์ƒ์„ฑ (ํ™˜๊ฒฝ์„ค์ • ํฌํ•จ)2๏ธโƒฃ ์‹ค์Šต์šฉ ๋ฐ์ดํ„ฐ์…‹ kafka produce3๏ธโƒฃ Kafka ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ์…‹ ํ™•์ธ ๋ฐฉ๋ฒ•1. Kafka์™€ ์—ฐ๊ฒฐ๋œ ClickHouse ํ…Œ์ด๋ธ” ์ƒ

jongwho.tistory.com

- Streamlit ์†Œ๊ฐœ ๋ฐ ์„ค์น˜(https://jongwho.tistory.com/31)

 

๋ฐ์ดํ„ฐ ๋ถ„์„ ํ™˜๊ฒฝ ๊ตฌ์ถ• - 09. Streamlit ์†Œ๊ฐœ ๋ฐ ์„ค์น˜, ์‹ค์ œ ํ˜„์—… ์‚ฌ์šฉ๊ธฐ

์ด์ „์— ์†Œ๊ฐœํ–ˆ๋˜ Clickhouse์—์„œ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์œ„ํ•ด๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” Streamlit ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ํ˜„์—…์—์„œ Streamlit์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ–ˆ๋˜ ํ›„๊ธฐ

jongwho.tistory.com

 

1๏ธโƒฃ ์„ค์น˜ ์ค€๋น„ํ•˜๊ธฐ

์šฐ์„  Streamlit๊ณผ Clickhouse-connect๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

pip install streamlit
pip install clickhouse-connect
  • streamlit: ๋Œ€์‹œ๋ณด๋“œ ํ”„๋ ˆ์ž„์›Œํฌ
  • clickhouse-connect: Python์—์„œ ClickHouse์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋“œ๋ผ์ด๋ฒ„

โœ… ClickHouse ์„œ๋ฒ„๋Š” ๋กœ์ปฌ์ด๋“ , Docker๋“ , ํด๋Ÿฌ์Šคํ„ฐ๋“  ์ƒ๊ด€์—†์–ด์š”. ๋‹จ, HTTP ํฌํŠธ(๊ธฐ๋ณธ 8123) ๊ฐ€ ์—ด๋ ค ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!

๊ธฐ์กด์— kubernetes์— ์„ค์น˜ํ•œ clickhouse ์„œ๋น„์Šค์— ๋Œ€ํ•ด port-forward ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํฌํŠธ๋ฅผ ์—ด์–ด์ค๋‹ˆ๋‹ค.

kubectl port-forward svc/clickhouse 8123:8123 -n clickhouse

 

2๏ธโƒฃStreamlit์—์„œ ClickHouse ์—ฐ๊ฒฐํ•˜๊ธฐ

์•„๋ž˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ClickHouse ์—ฐ๊ฒฐ ์ฝ”๋“œ์˜ˆ์š”.

# clickhouse_demo.py
import streamlit as st
from clickhouse_connect import get_client
import pandas as pd

# ClickHouse ์ ‘์† ์ •๋ณด
client = get_client(
    host="localhost",  # ๋˜๋Š” EC2, ๋„์ปค ๋‚ด๋ถ€ IP
    port=8123,
    username="admin",
    password="",
    secure=False,  # https๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด False
)

# SQL ์‹คํ–‰
query = """
select *
from regular_db.distributed_replicated_table
LIMIT 100
"""
data = client.query_df(query)

# Streamlit UI
st.title("๐Ÿ“Š ์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ ๋กœ๊ทธ (ClickHouse)")
st.dataframe(data)
streamlit run clickhouse_demo.py

โœ… ์‹คํ–‰ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ”๋กœ ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ๋œน๋‹ˆ๋‹ค! (๊ธฐ๋ณธ ํฌํŠธ๋Š” localhost:8501์ด์—์š”.)

 

ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์กฐํšŒ ์˜ˆ์‹œ

 

3๏ธโƒฃ ์–ด๋–ค ๋Œ€์‹œ๋ณด๋“œ๋กœ ํ™•์žฅํ•ด๋ณผ ์ˆ˜ ์žˆ์„๊นŒ?

์ผ๋‹จ ์ง€๊ธˆ์€ ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ–ˆ์ง€๋งŒ, Streamlit๊ณผ ClickHouse๋ฅผ ๋ถ™์ด๋ฉด ์ •๋ง ๋‹ค์–‘ํ•˜๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์‹œ๊ฐ„ ํ•„ํ„ฐ (๊ธฐ๊ฐ„๋ณ„ ์กฐํšŒ)
  • ์ด๋ฒคํŠธ ์œ ํ˜• ํ•„ํ„ฐ
  • ์ฐจํŠธ(Line, Bar)๋กœ ์‹œ๊ฐํ™”
  • ์‹ค์‹œ๊ฐ„ ์ž๋™ ์ƒˆ๋กœ๊ณ ์นจ
  • ์‚ฌ์šฉ์ž ์„ธ์…˜ ๋ถ„์„

๋‹ค์Œ ํŽธ์ธ Part 2์—์„œ๋Š”
๐Ÿ‘‰ Kafka๋กœ ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ClickHouse์— ์ €์žฅํ•˜๊ณ 
๐Ÿ‘‰ ๊ทธ๊ฑธ Streamlit์—์„œ ๊ฑฐ์˜ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‹œ๊ฐํ™”ํ•˜๋Š” ํ๋ฆ„์„ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•