# ๐Ÿค– OpenAPI ๋ช…์„ธ ์กฐํšŒ ์ฑ—๋ด‡ (LLM-Gateway Spec Chatbot) ์ด ํ”„๋กœ์ ํŠธ๋Š” ํŠน์ • URL์—์„œ ์ œ๊ณตํ•˜๋Š” OpenAPI ๋ช…์„ธ(Specification) ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•˜๋Š” Streamlit ๊ธฐ๋ฐ˜์˜ ์ฑ—๋ด‡ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค. Gemini AI ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜์—ฌ ์ž์—ฐ์–ด ์งˆ๋ฌธ์„ ์ดํ•ดํ•˜๊ณ , API ๋ช…์„ธ์— ๊ทผ๊ฑฐํ•œ ์ •ํ™•ํ•œ ์ •๋ณด๋ฅผ ํ•œ๊ตญ์–ด๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Docker ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด, ๊ฐ„ํŽธํ•˜๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## โœจ ์ฃผ์š” ๊ธฐ๋Šฅ - **OpenAPI ๋ช…์„ธ ๊ธฐ๋ฐ˜ ๋‹ต๋ณ€**: ๋กœ์ปฌ์— ์ €์žฅ๋œ `api_spec.json` ํŒŒ์ผ์„ ๋ถ„์„ํ•˜์—ฌ API์˜ ์—”๋“œํฌ์ธํŠธ, ํŒŒ๋ผ๋ฏธํ„ฐ, ์š”์•ฝ ์ •๋ณด ๋“ฑ์— ๋Œ€ํ•ด ๋‹ต๋ณ€ํ•ฉ๋‹ˆ๋‹ค. - **์ž์—ฐ์–ด ์งˆ์˜์‘๋‹ต**: Google์˜ Gemini ๋ชจ๋ธ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์ž์—ฐ์–ด ์งˆ๋ฌธ์„ ์ดํ•ดํ•˜๊ณ  ์ง€๋Šฅ์ ์ธ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. - **๋™์  ๋ช…์„ธ ์ƒˆ๋กœ๊ณ ์นจ**: UI์˜ ๋ฒ„ํŠผ ํด๋ฆญ ํ•œ ๋ฒˆ์œผ๋กœ ์ตœ์‹  API ๋ช…์„ธ๋ฅผ ์›๊ฒฉ URL์—์„œ ๋‹ค์‹œ ๊ฐ€์ ธ์™€ ์•ฑ์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - **ํ•œ๊ตญ์–ด ์ง€์›**: ๋ชจ๋“  ๋‹ต๋ณ€์€ ํ•œ๊ตญ์–ด๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. - **์ง๊ด€์ ์ธ UI**: Streamlit์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ์›น ๊ธฐ๋ฐ˜ ์ฑ„ํŒ… ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๏ฟฝ๏ฟฝ๏ฟฝ๊ณ  ๋ฐ ์ปค์Šคํ…€ ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. - **์ปจํ…Œ์ด๋„ˆํ™”**: Docker ๋ฐ Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ์ผ๊ด€๋œ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ## ๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ - **์–ธ์–ด**: Python 3.9 - **ํ”„๋ ˆ์ž„์›Œํฌ**: Streamlit - **AI ๋ชจ๋ธ**: Google Gemini 1.5 Flash - **์ปจํ…Œ์ด๋„ˆ**: Docker, Docker Compose - **์ฃผ์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ**: `google-generativeai`, `requests`, `pandas` ## ๐Ÿ“‚ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ``` chatbot_app/ โ”œโ”€โ”€ static/ โ”‚ โ”œโ”€โ”€ api_spec.json # API ๋ช…์„ธ ํŒŒ์ผ โ”‚ โ””โ”€โ”€ logo.png # UI์— ํ‘œ์‹œ๋  ๋กœ๊ณ  ์ด๋ฏธ์ง€ โ”œโ”€โ”€ .env.chatbot # ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ (API ํ‚ค ์ €์žฅ) โ”œโ”€โ”€ docker-compose.yml # Docker Compose ์„ค์ • ํŒŒ์ผ โ”œโ”€โ”€ Dockerfile # Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ ํŒŒ์ผ โ”œโ”€โ”€ main.py # Streamlit ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฉ”์ธ ์ฝ”๋“œ โ”œโ”€โ”€ README.md # ํ”„๋กœ์ ํŠธ ์„ค๋ช… ํŒŒ์ผ (ํ˜„์žฌ ํŒŒ์ผ) โ””โ”€โ”€ requirements.txt # Python ์˜์กด์„ฑ ๋ชฉ๋ก ``` ## ๐Ÿš€ ์„ค์น˜ ๋ฐ ์‹คํ–‰ ๋ฐฉ๋ฒ• ### ์‚ฌ์ „ ์ค€๋น„ ์‚ฌํ•ญ - [Docker](https://www.docker.com/get-started)๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. - [Docker Compose](https://docs.docker.com/compose/install/)๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์ตœ์‹  ๋ฒ„์ „์˜ Docker Desktop์—๋Š” ๊ธฐ๋ณธ ํฌํ•จ) ### ์„ค์น˜ ์ ˆ์ฐจ 1. **ํ”„๋กœ์ ํŠธ ์ค€๋น„**: ์ด `chatbot_app` ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. 2. **์ •์  ํŒŒ์ผ ๋ฐฐ์น˜**: `chatbot_app/static/` ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ๋‹ค์Œ ๋‘ ํŒŒ์ผ์„ ์œ„์น˜์‹œํ‚ต๋‹ˆ๋‹ค. - `api_spec.json`: ์กฐํšŒํ•  ๋Œ€์ƒ์˜ OpenAPI ๋ช…์„ธ ํŒŒ์ผ - `logo.png`: UI ์‚ฌ์ด๋“œ๋ฐ”์— ํ‘œ์‹œํ•  ๋กœ๊ณ  ์ด๋ฏธ์ง€ 3. **ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •**: `chatbot_app/.env.chatbot` ํŒŒ์ผ์„ ์—ด๊ณ , `YOUR_GEMINI_API_KEY` ๋ถ€๋ถ„์„ ์‹ค์ œ ๋ฐœ๊ธ‰๋ฐ›์€ Google Gemini API ํ‚ค๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค. ```env # YOUR_GEMINI_API_KEY๋ฅผ ์‹ค์ œ ํ‚ค๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”. GOOGLE_API_KEY="YOUR_GEMINI_API_KEY" ``` 4. **์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰**: ํ„ฐ๋ฏธ๋„์—์„œ `chatbot_app` ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•œ ํ›„, ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ```bash docker-compose up --build -d ``` - `--build`: ์ด๋ฏธ์ง€๋ฅผ ์ƒˆ๋กœ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. (์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ํ•„์š”) - `-d`: ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. 5. **์ฑ—๋ด‡ ์ ‘์†**: ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜๋ฉด, ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด๊ณ  ๋‹ค์Œ ์ฃผ์†Œ๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. - **URL**: `http://localhost:8501` ## ๐Ÿ’ก ์‚ฌ์šฉ ๋ฐฉ๋ฒ• - **์งˆ๋ฌธํ•˜๊ธฐ**: ํ™”๋ฉด ํ•˜๋‹จ์˜ ์ž…๋ ฅ์ฐฝ์— API ๋ช…์„ธ์™€ ๊ด€๋ จ๋œ ์งˆ๋ฌธ์„ ์ž…๋ ฅํ•˜๊ณ  Enter ํ‚ค๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค. - **API ๋ช…์„ธ ์ƒˆ๋กœ๊ณ ์นจ**: ์‚ฌ์ด๋“œ๋ฐ”์˜ '๐Ÿ”„ API ๋ช…์„ธ ์ƒˆ๋กœ๊ณ ์นจ' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด `API_SPEC_URL`์— ์ง€์ •๋œ ์ฃผ์†Œ์—์„œ ์ตœ์‹  ๋ช…์„ธ๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. - **API ์ƒ์„ธ์ •๋ณด ํ™•์ธ**: ์‚ฌ์ด๋“œ๋ฐ”์˜ '๐Ÿ“˜ API ์ƒ์„ธ์ •๋ณด ๋ณด๊ธฐ'๋ฅผ ํŽผ์น˜๋ฉด API์˜ ์ œ๋ชฉ, ๋ฒ„์ „ ๋ฐ ์ „์ฒด ์—”๋“œํฌ์ธํŠธ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.