# ๐Ÿฆ™ Windows PC Ollama ์—ฐ๋™ ๊ฐ€์ด๋“œ NAS(Docker)์— ์žˆ๋Š” `stock-lab` ์„œ๋น„์Šค๊ฐ€ ๊ณ ์„ฑ๋Šฅ Windows PC์˜ Ollama๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AI ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ## 1. Windows PC ์„ค์ • (AI ์„œ๋ฒ„) ๊ณ ์„ฑ๋Šฅ PC(9800X3D + 3070 Ti)์—์„œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ### 1-1. Ollama ์„ค์น˜ ๋ฐ ์ค€๋น„ 1. [Ollama ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€](https://ollama.com/)์—์„œ Windows์šฉ Ollama๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. 2. ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ(CMD)๋‚˜ PowerShell์„ ์—ด๊ณ  ๋ชจ๋ธ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ```powershell ollama pull llama3.1 # ๋˜๋Š” gemma2 (9B) ollama pull gemma2 ``` ### 1-2. ์™ธ๋ถ€ ์ ‘์† ํ—ˆ์šฉ ์„ค์ • (์ค‘์š” โญ๏ธ) ๊ธฐ๋ณธ์ ์œผ๋กœ Ollama๋Š” ๋กœ์ปฌ(localhost)์—์„œ๋งŒ ์ ‘์† ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. NAS์—์„œ ์ ‘์†ํ•˜๋ ค๋ฉด ์ด๋ฅผ ๋ชจ๋“  IP(`0.0.0.0`)์—์„œ ์ ‘์† ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 1. **์ž‘์—… ๊ด€๋ฆฌ์ž**๋ฅผ ์—ด๊ณ  'Ollama' ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด **์ž‘์—… ๋๋‚ด๊ธฐ**๋กœ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. (ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜ ์šฐํด๋ฆญ -> Quit) 2. **์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŽธ์ง‘**์„ ์—ฝ๋‹ˆ๋‹ค. (์œˆ๋„์šฐ ํ‚ค ๋ˆ„๋ฅด๊ณ  "ํ™˜๊ฒฝ ๋ณ€์ˆ˜" ๊ฒ€์ƒ‰) 3. **์‹œ์Šคํ…œ ๋ณ€์ˆ˜(S)** ์„น์…˜์—์„œ `์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ(W)...`๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. * ๋ณ€์ˆ˜ ์ด๋ฆ„: `OLLAMA_HOST` * ๋ณ€์ˆ˜ ๊ฐ’: `0.0.0.0` 4. ํ™•์ธ์„ ๋ˆŒ๋Ÿฌ ์ €์žฅํ•˜๊ณ , Ollama๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ### 1-3. ๋ฐฉํ™”๋ฒฝ ํฌํŠธ ๊ฐœ๋ฐฉ Windows Defender ๋ฐฉํ™”๋ฒฝ์ด ์™ธ๋ถ€ ์ ‘์†์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1. Powershell์„ **๊ด€๋ฆฌ์ž ๊ถŒํ•œ**์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. 2. ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ 11434 ํฌํŠธ๋ฅผ ์—ฝ๋‹ˆ๋‹ค. ```powershell New-NetFirewallRule -DisplayName "Ollama API" -Direction Inbound -LocalPort 11434 -Protocol TCP -Action Allow ``` (๋˜๋Š” `์ œ์–ดํŒ > Windows Defender ๋ฐฉํ™”๋ฒฝ > ๊ณ ๊ธ‰ ์„ค์ •`์—์„œ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์œผ๋กœ TCP 11434 ํฌํŠธ ํ—ˆ์šฉ์„ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.) ### 1-4. IP ์ฃผ์†Œ ํ™•์ธ CMD์—์„œ `ipconfig`๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Windows PC์˜ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: `192.168.0.5`) ### 1-5. Windows AI ์„œ๋ฒ„ ์‹คํ–‰ (ํŒŒ์ด์ฌ ์ค‘๊ณ„ ์„œ๋ฒ„) โญ๏ธ NAS๊ฐ€ Windows์˜ Ollama๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋” ๋ณต์žกํ•œ ๋กœ์ง(๋‰ด์Šค+์ž”๊ณ  ๊ฒฐํ•ฉ ๋ถ„์„ ๋“ฑ)์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•œ `windows_ai_server.py`๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 1. **Python ์„ค์น˜**: Windows์— Python์ด ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์—†๋‹ค๋ฉด [python.org](https://www.python.org/)์—์„œ ์„ค์น˜) 2. **ํ”„๋กœ์ ํŠธ ํด๋” ์ค€๋น„**: * ๋ฐ”ํƒ•ํ™”๋ฉด ๋“ฑ์— ์ ๋‹นํ•œ ํด๋”(์˜ˆ: `stock-ai`)๋ฅผ ๋งŒ๋“ค๊ณ , ์•ž์„œ ์ž‘์„ฑํ•œ `windows_ai_server.py` ํŒŒ์ผ์„ ๋„ฃ์Šต๋‹ˆ๋‹ค. 3. **๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜**: * ํ•ด๋‹น ํด๋”์—์„œ Shift+์šฐํด๋ฆญ -> "PowerShell ์ฐฝ ์—ด๊ธฐ" * ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ```powershell pip install fastapi uvicorn requests pydantic ``` 4. **์„œ๋ฒ„ ์‹คํ–‰**: * ๊ฐ™์€ PowerShell ์ฐฝ์—์„œ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ```powershell # NAS์˜ ์ฃผ์†Œ๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„ค์ • (๋ณธ์ธ์˜ NAS IP๋กœ ์ˆ˜์ •ํ•˜์„ธ์š”) $env:NAS_API_URL="http://192.168.0.2:18500" # ์„œ๋ฒ„ ์‹คํ–‰ (0.0.0.0์€ ๋ชจ๋“  IP ์ ‘์† ํ—ˆ์šฉ์„ ์˜๋ฏธ) python -m uvicorn windows_ai_server:app --host 0.0.0.0 --port 8000 --reload ``` * **์„ฑ๊ณต ์‹œ**: `Application startup complete.` ๋ฉ”์‹œ์ง€๊ฐ€ ๋œจ๋ฉฐ ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ฐฝ์„ ๋‹ซ์ง€ ๋งˆ์„ธ์š”. --- ## 2. NAS ์„ค์ • (Client) Synology NAS์˜ `web-page-backend` ํ”„๋กœ์ ํŠธ์—์„œ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ### 2-1. .env ํŒŒ์ผ ์ˆ˜์ • `.env` ํŒŒ์ผ์— Windows PC์˜ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ```bash # .env ํŒŒ์ผ # ... ๊ธฐ์กด ์„ค์ •๋“ค ... # ์œˆ๋„์šฐ PC์˜ IP๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š” (http:// ํฌํ•จ, ํฌํŠธ 8000 ํฌํ•จ) # ์ฃผ์˜: Ollama(11434)๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ฐฉ๊ธˆ ๋„์šด Python ์„œ๋ฒ„(8000)๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ ํ•ด๋„ ๋˜๊ณ , # ๋‹จ์ˆœ Ollama ํ˜ธ์ถœ๋งŒ ํ•„์š”ํ•˜๋‹ค๋ฉด 11434๋กœ ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. # ์—ฌ๊ธฐ์„œ๋Š” AI ์„œ๋ฒ„(8000)๋ฅผ ํ†ตํ•ด ๋ถ„์„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. WINDOWS_AI_SERVER_URL=http://192.168.0.5:8000 ``` ### 2-2. ์ปจํ…Œ์ด๋„ˆ ์žฌ๋ฐฐํฌ ๋ณ€๊ฒฝ๋œ ์„ค์ •์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด `stock-lab` ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ```bash # NAS ํ„ฐ๋ฏธ๋„ (ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๊ฒฝ๋กœ) docker-compose up -d --build stock-lab ``` --- ## 3. ํ…Œ์ŠคํŠธ ๋ธŒ๋ผ์šฐ์ €๋‚˜ API ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ NAS์˜ ์ฃผ์†Œ๋กœ ๋ถ„์„ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. * **์š”์ฒญ**: `POST http://192.168.0.5:8000/analyze/portfolio` (Windows PC์—์„œ ์ง์ ‘ ํ…Œ์ŠคํŠธ) * **๊ฒฐ๊ณผ**: Windows PC์˜ ํ„ฐ๋ฏธ๋„์— ๋กœ๊ทธ๊ฐ€ ์ฐํžˆ๋ฉฐ GPU๊ฐ€ ์ž‘๋™ํ•˜๊ณ , JSON ์‘๋‹ต์ด ์˜ต๋‹ˆ๋‹ค.