๊ณต๊ณต์๋ ๊ฒ์ ํตํฉ ํ๋ซํผ

**์ง์ฐฉ(Jibchack)**์ ๊ณต๊ณต์๋ ์ ๋ณด๋ฅผ ์ง๊ด์ ์ผ๋ก ํ์ํ ์ ์๋
Streamlit ๊ธฐ๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์
์
๋๋ค.
-
์ข์ธก ์ฌ์ด๋๋ฐ์์
โ ์ฑํ (Chat) โ ๊ณต๊ณต์๋ ๊ด๋ จ ์ง๋ฌธ์ AI๊ฐ ๋ต๋ณ
โ ๊ณต๊ณ ๊ฒ์(Search) โ ์ง๋ ๊ธฐ๋ฐ ๊ณต๊ณต์๋ ๊ณต๊ณ ์กฐํ
๋ฅผ ์์ ๋กญ๊ฒ ์ ํํ ์ ์์ต๋๋ค. -
๋ฐฑ์๋ API์ ์ฐ๋๋์ด
โ ๋ํ ์คํธ๋ฆฌ๋ฐ
โ ๊ณต๊ณ ๋ฐ์ดํฐ fetch
โ ์ง๋ ํ์์ฉ ์ขํ ๊ธฐ๋ฐ ๋ ๋๋ง
์ ์ ๊ณตํฉ๋๋ค.
- Streamlit Chat UI ๊ธฐ๋ฐ
- ์ฌ์ฉ์์ ์ง๋ฌธ(์ง์ญ/์์ฐ/์กฐ๊ฑด)์ ๋ง๋ ๊ณต๊ณ ์ ๋ณด ์ถ๋ ฅ
- ์ถํ LLM ์ฐ๊ฒฐ ๊ฐ๋ฅ ๊ตฌ์กฐ
- Folium + Leaflet ๊ธฐ๋ฐ ์ธํฐ๋ํฐ๋ธ ์ง๋
- ์ง์ญ๋ณ ๊ณต๊ณ ์๋ฅผ ํด๋ฌ์คํฐํ ๋ฐ์ค ์์ด์ฝ์ผ๋ก ํ์
- ๋ฐ์ค๋ฅผ ํด๋ฆญํ๋ฉด ํด๋น ์ง์ญ์ผ๋ก ์ง๋ ์ด๋ ๋ฐ ๊ฐ๋ณ ๊ณต๊ณ ํ์ฑํ
- ํด๋ฆญ ์ ์ฐ์ธก ํจ๋์ ์์ธ ์ ๋ณด ํ์
(๊ณต๊ธ๋์, ์๋์กฐ๊ฑด, ์ผ์ , ๋จ์ง ์ ๋ณด ๋ฑ) - '๊ณต๊ณ ์๋ฌธ๋ณด๊ธฐ' ๋ฒํผ ํฌํจ
- ์ง์ญ ํํฐ, ์ ํ ํํฐ(ํ๋ณต์ฃผํ/์ฒญ๋ /๊ณต๊ณต์๋ ๋ฑ)
- ๊ฐ๊ฒฉ ๋ฒ์ ์ฌ๋ผ์ด๋
- ๋ฉด์ ํํฐ
- ํ์ด์ง๋ค์ด์ ์ ์ฉ
- Frontend: Streamlit, HTML/CSS Custom Styling
- Map: Folium, Leaflet.js
- API: Kakao Local API (์ฃผ์ โ ์ขํ ๋ณํ)
- Language: Python 3.x
project/
โโโ .streamlit/ # Streamlit ํ๊ฒฝ ์ค์
โโโ pages/ # Streamlit ํ์ด์ง ๊ตฌ์ฑ
โ โโโ chat_page.py # ์ฑํ
UI ๋ฐ AI ์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ
โ โโโ search_page.py # ๊ณต๊ณต์๋ ํํฐ + ์ง๋ ๊ฒ์ ํ์ด์ง
โโโ api.py # ๋ฐฑ์๋ API ํธ์ถ ๋ํผ
โโโ app.py # ์ฑ ์ํธ๋ฆฌํฌ์ธํธ (์ฌ์ด๋๋ฐ + ๋ผ์ฐํ
)
โโโ config.py # ํ๊ฒฝ ๋ณ์, ์ต์
์์ ์ค์
โโโ homepage.py # (๊ตฌ๋ฒ์ ๋๋ ์๋น UI)
โโโ styles.py # ์ ์ฒด CSS ๊ด๋ฆฌ
โโโ utils.py # HTML ๋ณํ, formatting, ์ง์ญ ์ฒ๋ฆฌ ํจ์
โโโ logo.png # ํ๋ก์ ํธ ๋ก๊ณ
โโโ README.md # ์ค๋ช
๋ฌธ์
โ ํ์ด์ง ์ค์
โ ์ฌ์ด๋๋ฐ ๊ตฌ์ฑ
โ Query Parameter ๊ธฐ๋ฐ ๋ผ์ฐํ
(?page=home, ?page=search)
โ CSS ๋ก๋ฉ
โ ํด๋น ํ์ด์ง ๋ ๋๋ง ํธ์ถ
โ Streamlit session_state ๊ธฐ๋ฐ ๋ฉ์์ง ๊ด๋ฆฌ
โ AI ๋ฐฑ์๋์์ ์คํธ๋ฆฌ๋ฐ ํต์ (/chat/stream)
โ ์ฌ์ฉ์/AI ๋งํ์ ํํ UI ๋ ๋๋ง
โ ๋ก๋ฉ ์ํ ์ฒ๋ฆฌ ๋ฐ ์๋ rerun
โ ๊ฒ์ ํํฐ (์ง์ญ/๊ธฐ๊ด/์ฃผํ์ ํ/๊ฐ๊ฒฉ/๋ฉด์ )
โ ์ ์ฒด ๊ณต๊ณ ๋ฐ์ดํฐ ๋ก๋ฉ ํ ํ๋ก ํธ ๋จ ํํฐ๋ง
โ folium ์ง๋ ๋ ๋๋ง
โ ์ค ๋ ๋ฒจ ๋ณํ์ ๋ฐ๋ฅธ
- ์ง์ญ ๋ง์ปค
- ๊ฐ๋ณ ๊ณต๊ณ ๋ง์ปค
ํ ๊ธ ํ์
โ ํ์ด์ง๋ค์ด์ ๊ตฌํ
โ ๋ง์ปค ํด๋ฆญ ์ ์ฐ์ธก ์์ธ ํจ๋ ํ์
โ Streamlit ๊ธฐ๋ณธ UI ์์ ์จ๊น
โ ์ปค์คํ
์ฌ์ด๋๋ฐ ์คํ์ผ
โ ๊ฒ์ ํ์ด์ง ์ ์ฉ ์คํ์ผ
โ ์์ธ ํจ๋ ์คํ์ผ
โ ๋ฐ์ํ ๋ ์ด์์ ์ผ๋ถ ์ง์
โ ๋ฐฑ์๋๋ก HTTP ์์ฒญ์ ๋ณด๋ด๋ ๋ํผ
โ fetch_all_listings() ๋ฑ ๋ฐ์ดํฐ ํธ์ถ ๊ธฐ๋ฅ ์ ๊ณต
โ ์ง์ญ ์ขํ
โ ์ ํ ์ต์
๋ฆฌ์คํธ (์ง์ญ/๊ธฐ๊ด/์ ํ ๋ฑ)
โ ํ์ด์ง๋ค์ด์
์์
โ ๋ฐฑ์๋ URL
โ ๊ณต๊ณ HTML ๋ณํ ํจ์
โ ์๋๋ฃ formatting
โ ์ฃผ์์์ ์ง์ญ ์ถ์ถ
โ ์ง๋ ๋ผ๋ฒจ ์ฒ๋ฆฌ
streamlit run app.py ์คํ โ Streamlit์ด UI ์์ฑ
URL Query Parameter ์ฝ๊ธฐ
โ "home" ๋๋ "search"
๋ฒํผ ํด๋ฆญ โ Query Parameter ๋ณ๊ฒฝ โ st.rerun()
์
๋ ฅ โ session_state์ ์ ์ฅ โ
๋ฐฑ์๋๋ก ์คํธ๋ฆฌ๋ฐ ์์ฒญ โ
๋ฌธ์ ๋จ์๋ก ์๋ต ํ์
- ๊ณต๊ณ ๋ฐ์ดํฐ fetch
- ํํฐ ์ ์ฉ
- ๋ฆฌ์คํธ + ์ง๋ ๋ ๋๋ง
- ์ข์ธก ๋ฆฌ์คํธ ํด๋ฆญํ๋ฉด ์ฐ์ธก ์์ธ ํจ๋ ํ์
- ์ง๋ ์ค์ ๋ฐ๋ผ ๋ง์ปค ์๋ ์ ํ
pip install -r requirements.txtstreamlit run app.pyhttp://localhost:8501/
POST /chat/streamGET /listings