๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿ“Š Open WebUI ๋ชจ๋‹ˆํ„ฐ๋ง

๋ชจ๋‹ˆํ„ฐ๋ง์œผ๋กœ Open WebUI ๊ฑด๊ฐ• ์œ ์ง€ ๐Ÿฉบโ€‹

Open WebUI ์ธ์Šคํ„ด์Šค๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๊ฒƒ์€ ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ , ์„ฑ๋Šฅ์ด ์ข‹์œผ๋ฉฐ, ๋ฌธ์ œ๋ฅผ ์‹ ์†ํžˆ ์‹๋ณ„ํ•˜๊ณ  ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ๊ธฐ๋ณธ ๊ฐ€์šฉ์„ฑ ํ™•์ธ์—์„œ ์‹ฌ์ธต์ ์ธ ๋ชจ๋ธ ์‘๋‹ต ํ…Œ์ŠคํŠธ์— ์ด๋ฅด๋Š” ์„ธ ๊ฐ€์ง€ ๋ชจ๋‹ˆํ„ฐ๋ง ์ˆ˜์ค€์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์™œ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ• ๊นŒ์š”?

  • ๊ฐ€๋™ ์‹œ๊ฐ„ ๋ณด์žฅ: ์ค‘๋‹จ ๋ฐ ์„œ๋น„์Šค ์ค‘๋‹จ์„ ์‚ฌ์ „์— ํƒ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ฑ๋Šฅ ํ†ต์ฐฐ: ์‘๋‹ต ์‹œ๊ฐ„์„ ์ถ”์ ํ•˜๊ณ  ์ž ์žฌ์ ์ธ ๋ณ‘๋ชฉํ˜„์ƒ์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • ์ดˆ๊ธฐ ๋ฌธ์ œ ํƒ์ง€: ๋ฌธ์ œ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹ฌ๊ฐํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ์ „์— ํฌ์ฐฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์Œ์˜ ํ‰ํ™”: Open WebUI ์ธ์Šคํ„ด์Šค๊ฐ€ ์›ํ™œํ•˜๊ฒŒ ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค๋Š” ์ž์‹ ๊ฐ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๐Ÿšฆ ๋ชจ๋‹ˆํ„ฐ๋ง ์ˆ˜์ค€โ€‹

์„ธ ๊ฐ€์ง€ ์ˆ˜์ค€์˜ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ๋ถ€ํ„ฐ ๋” ํฌ๊ด„์ ์ธ ๊ฒƒ๊นŒ์ง€ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  1. ๊ธฐ๋ณธ ์ƒํƒœ ํ™•์ธ: Open WebUI ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์‘๋‹ต ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ชจ๋ธ ์—ฐ๊ฒฐ์„ฑ ํ™•์ธ: Open WebUI๊ฐ€ ๊ตฌ์„ฑ๋œ ๋ชจ๋ธ์— ์—ฐ๊ฒฐํ•˜๊ณ  ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ชจ๋ธ ์‘๋‹ต ํ…Œ์ŠคํŠธ (์‹ฌ์ธต ์ƒํƒœ ํ™•์ธ): ๋ชจ๋ธ์ด ์‹ค์ œ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ๋ฒจ 1: ๊ธฐ๋ณธ ์ƒํƒœ ํ™•์ธ ์—”๋“œํฌ์ธํŠธ โœ…โ€‹

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ์ˆ˜์ค€์€ /health ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์—”๋“œํฌ์ธํŠธ๋Š” ๊ณต๊ฐœ์ ์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฉฐ (์ธ์ฆ ๋ถˆํ•„์š”), Open WebUI ์„œ๋น„์Šค๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ 200 OK ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•:

curl ๋˜๋Š” HTTP ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

   # ๊ธฐ๋ณธ ์ƒํƒœ ํ™•์ธ - ์ธ์ฆ ๋ถˆํ•„์š”
curl https://your-open-webui-instance/health

๊ธฐ๋Œ€ ์ถœ๋ ฅ: ์„ฑ๊ณต์ ์ธ ์ƒํƒœ ํ™•์ธ์€ 200 OK HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ƒํƒœ ํ™•์ธ์˜ ๊ฒฝ์šฐ ์‘๋‹ต ๋ณธ๋ฌธ์˜ ๋‚ด์šฉ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Uptime Kuma๋ฅผ ์‚ฌ์šฉํ•œ ๊ธฐ๋ณธ ์ƒํƒœ ํ™•์ธ ๐Ÿปโ€‹

Uptime Kuma๋Š” ํ™˜์ƒ์ ์ด๊ณ  ์˜คํ”ˆ์†Œ์Šค์ด๋ฉด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ์…€ํ”„ ํ˜ธ์ŠคํŒ… ์—…ํƒ€์ž„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Open WebUI ๋ชจ๋‹ˆํ„ฐ๋ง์— ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

Uptime Kuma ์„ค์ • ๋‹จ๊ณ„:

  1. ์ƒˆ ๋ชจ๋‹ˆํ„ฐ ์ถ”๊ฐ€: Uptime Kuma ๋Œ€์‹œ๋ณด๋“œ์—์„œ "์ƒˆ ๋ชจ๋‹ˆํ„ฐ ์ถ”๊ฐ€"๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ชจ๋‹ˆํ„ฐ ์„ค์ • ๊ตฌ์„ฑ:
    • ๋ชจ๋‹ˆํ„ฐ ์œ ํ˜•: "HTTP(s)"๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฆ„: ๋ชจ๋‹ˆํ„ฐ์— ์„ค๋ช…์ ์ธ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: "Open WebUI ์ƒํƒœ ํ™•์ธ"
    • URL: ์ƒํƒœ ํ™•์ธ ์—”๋“œํฌ์ธํŠธ URL ์ž…๋ ฅ: http://your-open-webui-instance:8080/health (์—ฌ๊ธฐ์„œ your-open-webui-instance:8080์„ ์‹ค์ œ Open WebUI ์ฃผ์†Œ ๋ฐ ํฌํŠธ๋กœ ๋Œ€์ฒด).
    • ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ„๊ฒฉ: ํ™•์ธ ๋นˆ๋„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: 60์ดˆ๋Š” ๋งค ๋ถ„ ๋‹จ์œ„).
    • ์žฌ์‹œ๋„ ํšŸ์ˆ˜: ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ธฐ ์ „ ์žฌ์‹œ๋„ ํšŸ์ˆ˜ ์„ค์ • (์˜ˆ: 3ํšŒ ์žฌ์‹œ๋„).

์ด ํ™•์ธ์ด ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ:

  • ์›น ์„œ๋ฒ„ ๊ฐ€์šฉ์„ฑ: ์›น ์„œ๋ฒ„(Nginx, Uvicorn ๋“ฑ)๊ฐ€ ์š”์ฒญ์— ์‘๋‹ตํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์ƒํƒœ: Open WebUI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด๊ฐ€ ์‹คํ–‰ ์ค‘์ด๊ณ  ์ดˆ๊ธฐํ™” ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ฑ: ์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ธฐ๋ณธ ์ฒดํฌ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ๋ฒจ 2: Open WebUI ๋ชจ๋ธ ์—ฐ๊ฒฐ ๐Ÿ”—โ€‹

๊ธฐ๋ณธ ๊ฐ€์šฉ์„ฑ์„ ๋„˜์–ด /api/models ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์—”๋“œํฌ์ธํŠธ๋Š” ์ธ์ฆ์ด ํ•„์š”ํ•˜๋ฉฐ, Open WebUI๊ฐ€ ๊ตฌ์„ฑ๋œ ๋ชจ๋ธ ์ œ๊ณต์ž (์˜ˆ: Ollama, OpenAI)์™€ ์„ฑ๊ณต์ ์œผ๋กœ ํ†ต์‹ ํ•˜๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ ๋ชฉ๋ก์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ ์—ฐ๊ฒฐ์„ฑ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•˜๋Š” ์ด์œ ?

  • ๋ชจ๋ธ ์ œ๊ณต์ž ๋ฌธ์ œ: ๋ชจ๋ธ ์ œ๊ณต์ž ์„œ๋น„์Šค ๋ฌธ์ œ (์˜ˆ: API ์ค‘๋‹จ, ์ธ์ฆ ์‹คํŒจ)๋ฅผ ํƒ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ์„ฑ ์˜ค๋ฅ˜: Open WebUI ๋‚ด ๋ชจ๋ธ ์ œ๊ณต์ž ์„ค์ •์˜ ๊ตฌ์„ฑ ์˜ค๋ฅ˜๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋ธ ๊ฐ€์šฉ์„ฑ ๋ณด์žฅ: ์˜ˆ์ƒํ–ˆ๋˜ ๋ชจ๋ธ์ด ์‹ค์ œ๋กœ Open WebUI์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

API ์—”๋“œํฌ์ธํŠธ ์„ธ๋ถ€์‚ฌํ•ญ:

Open WebUI API ๋ฌธ์„œ์—์„œ /api/models ์—”๋“œํฌ์ธํŠธ์™€ ์‘๋‹ต ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ „์ฒด ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

curl์„ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ• (์ธ์ฆ ํ•„์š”):

์ด ์—”๋“œํฌ์ธํŠธ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด API ํ‚ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ "์ธ์ฆ ์„ค์ •" ์„น์…˜์—์„œ API ํ‚ค ์ƒ์„ฑ ์ง€์นจ์„ ํ™•์ธํ•˜์„ธ์š”.

   # ์ธ์ฆ๋œ ๋ชจ๋ธ ์—ฐ๊ฒฐ ํ™•์ธ
curl -H "Authorization: Bearer YOUR_API_KEY" https://your-open-webui-instance/api/models

(YOUR_API_KEY๋ฅผ ์‹ค์ œ API ํ‚ค๋กœ, your-open-webui-instance๋ฅผ Open WebUI ์ฃผ์†Œ๋กœ ๋Œ€์ฒดํ•˜์„ธ์š”.)

๊ธฐ๋Œ€ ์ถœ๋ ฅ: ์„ฑ๊ณต์ ์ธ ์š”์ฒญ์€ 200 OK ์ƒํƒœ ์ฝ”๋“œ์™€ ๋ชจ๋ธ ๋ชฉ๋ก์ด ํฌํ•จ๋œ JSON ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

API ํ‚ค ์ธ์ฆ ์„ค์ • ๐Ÿ”‘โ€‹

๋จผ์ € Open WebUI์—์„œ API ํ‚ค๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ•ด์•ผ /api/models ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. API ํ‚ค ํ™œ์„ฑํ™” (๊ด€๋ฆฌ์ž ํ•„์š”):

    • ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ Open WebUI์— ๋กœ๊ทธ์ธํ•˜์„ธ์š”.
    • ๊ด€๋ฆฌ์ž ์„ค์ • (์ผ๋ฐ˜์ ์œผ๋กœ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ ๋ฉ”๋‰ด์—์„œ) > ์ผ๋ฐ˜ ์„ค์ •์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    • "API ํ‚ค ์‚ฌ์šฉ" ์„ค์ •์„ ์ฐพ์•„ ์ผœ๊ธฐ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  2. API ํ‚ค ์ƒ์„ฑ (์‚ฌ์šฉ์ž ์„ค์ •):

    • ์‚ฌ์šฉ์ž ์„ค์ • (์ผ๋ฐ˜์ ์œผ๋กœ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ ํ”„๋กœํ•„ ์•„์ด์ฝ˜ ํด๋ฆญ)์„ ์—ฝ๋‹ˆ๋‹ค.
    • ๊ณ„์ • ์„น์…˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    • ์ƒˆ API ํ‚ค ์ƒ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    • API ํ‚ค์— ์„ค๋ช…์ด ํฌํ•จ๋œ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: "๋ชจ๋‹ˆํ„ฐ๋ง API ํ‚ค").
    • ์ƒ์„ฑ๋œ API ํ‚ค๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ํ‚ค๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ์„ค์ •์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    (์„ ํƒ ์‚ฌํ•ญ์ด์ง€๋งŒ ๊ถŒ์žฅ) ๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์œ„ํ•ด ๋น„๊ด€๋ฆฌ์ž ์‚ฌ์šฉ์ž ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ API ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์„ธ์š”. ์ด๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง API ํ‚ค๊ฐ€ ์œ ์ถœ๋˜์—ˆ์„ ๊ฒฝ์šฐ์˜ ์ž ์žฌ์  ์˜ํ–ฅ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

    ์„ค์ •์—์„œ API ํ‚ค ์ƒ์„ฑ ์˜ต์…˜์ด ๋ณด์ด์ง€ ์•Š์œผ๋ฉด Open WebUI ๊ด€๋ฆฌ์ž๊ฐ€ API ํ‚ค๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Uptime Kuma๋ฅผ ์‚ฌ์šฉํ•œ ๋ชจ๋ธ ์—ฐ๊ฒฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๐Ÿปโ€‹

  1. Uptime Kuma์—์„œ ์ƒˆ ๋ชจ๋‹ˆํ„ฐ ์ƒ์„ฑ:

    • ๋ชจ๋‹ˆํ„ฐ ์œ ํ˜•: "HTTP(s) - JSON Query".
    • ์ด๋ฆ„: "Open WebUI ๋ชจ๋ธ ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ".
    • URL: http://your-open-webui-instance:8080/api/models (URL์„ ๋ณ€๊ฒฝํ•˜์„ธ์š”).
    • ๋ฉ”์„œ๋“œ: "GET".
    • ์˜ˆ์ƒ ์ƒํƒœ ์ฝ”๋“œ: 200.
  2. JSON Query ์„ค์ • (๋ชจ๋ธ ๋ชฉ๋ก ํ™•์ธ):

    • JSON Query: $count(data[*])>0
      • ์„ค๋ช…: ์ด JSONata ์ฟผ๋ฆฌ๋Š” API ์‘๋‹ต์˜ data ๋ฐฐ์—ด(๋ชจ๋ธ ๋ชฉ๋ก์„ ํฌํ•จ)์ด 0๋ณด๋‹ค ํฐ ํ•ญ๋ชฉ์„ ํฌํ•จํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ชจ๋ธ์ด ๋ฐ˜ํ™˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์ƒ ๊ฐ’: true (์ฟผ๋ฆฌ๋Š” ๋ชจ๋ธ์ด ๋‚˜์—ด๋œ ๊ฒฝ์šฐ true๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ).
  3. ์ธ์ฆ ํ—ค๋” ์ถ”๊ฐ€:

    • Uptime Kuma ๋ชจ๋‹ˆํ„ฐ ์„ค์ •์˜ "ํ—ค๋”" ์„น์…˜์—์„œ "ํ—ค๋” ์ถ”๊ฐ€"๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    • ํ—ค๋” ์ด๋ฆ„: Authorization
    • ํ—ค๋” ๊ฐ’: Bearer YOUR_API_KEY (YOUR_API_KEY๋ฅผ ์ƒ์„ฑ๋œ API ํ‚ค๋กœ ๋Œ€์ฒด).
  4. ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ„๊ฒฉ ์„ค์ •: ๊ถŒ์žฅ ๊ฐ„๊ฒฉ: 300์ดˆ (5๋ถ„) ์ด์ƒ. ๋ชจ๋ธ ๋ชฉ๋ก์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ€์ฒด JSON Query (๊ณ ๊ธ‰):

๋” ํŠน์ •ํ•œ JSONata ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋ชจ๋ธ ๋˜๋Š” ์ œ๊ณต์ž๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค:

  • ์ ์–ด๋„ ํ•˜๋‚˜์˜ Ollama ๋ชจ๋ธ ํ™•์ธ: $count(data[owned_by=ollama])>0
  • ํŠน์ • ๋ชจ๋ธ์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ (์˜ˆ: gpt-4o): $exists(data[id=gpt-4o])
  • ์—ฌ๋Ÿฌ ํŠน์ • ๋ชจ๋ธ์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ (์˜ˆ: gpt-4o์™€ gpt-4o-mini): $count(data[id in [gpt-4o, gpt-4o-mini]]) = 2

JSONata ์ฟผ๋ฆฌ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋ ค๋ฉด jsonata.org์—์„œ ์ƒ˜ํ”Œ API ์‘๋‹ต์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

3๋‹จ๊ณ„: ๋ชจ๋ธ ์‘๋‹ต ํ…Œ์ŠคํŠธ (์‹ฌ์ธต ์ƒํƒœ ์ ๊ฒ€) ๐Ÿค–โ€‹

๊ฐ€์žฅ ํฌ๊ด„์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด ๋ชจ๋ธ์ด ์‹ค์ œ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” /api/chat/completions ์—”๋“œํฌ์ธํŠธ์— ๊ฐ„๋‹จํ•œ ์ฑ„ํŒ… ์™„๋ฃŒ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋ธ ์‘๋‹ต ํ…Œ์ŠคํŠธ ์ด์œ 

  • ์—”๋“œ-ํˆฌ-์—”๋“œ ํ™•์ธ: API ์š”์ฒญ์—์„œ ๋ชจ๋ธ ์‘๋‹ต๊นŒ์ง€ ์ „์ฒด ๋ชจ๋ธ ํŒŒ์ดํ”„๋ผ์ธ์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ.
  • ๋ชจ๋ธ ๋กœ๋”ฉ ๋ฌธ์ œ: ํŠน์ • ๋ชจ๋ธ์ด ๋กœ๋“œ๋˜๊ฑฐ๋‚˜ ์‘๋‹ตํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ ๊ฐ์ง€.
  • ๋ฐฑ์—”๋“œ ์ฒ˜๋ฆฌ ์˜ค๋ฅ˜: ๋ชจ๋ธ์ด ์‘๋‹ต์„ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฑ์—”๋“œ ๋…ผ๋ฆฌ ์˜ค๋ฅ˜ ๊ฐ์ง€.

curl์„ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ (์ธ์ฆ๋œ POST ์š”์ฒญ):

์ด ํ…Œ์ŠคํŠธ๋Š” API ํ‚ค๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ์ฑ„ํŒ… ์™„๋ฃŒ ์—”๋“œํฌ์ธํŠธ์— ๊ฐ„๋‹จํ•œ ๋ฉ”์‹œ์ง€๋ฅผ POST ์š”์ฒญ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

# ์ธ์ฆ๋œ POST ์š”์ฒญ์œผ๋กœ ๋ชจ๋ธ ์‘๋‹ต ํ…Œ์ŠคํŠธ
curl -X POST https://your-open-webui-instance/api/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d {
"messages": [{"role": "user", "content": "Respond with the word HEALTHY"}],
"model": "llama3.1", # ์‚ฌ์šฉํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๋ชจ๋ธ๋กœ ๋Œ€์ฒด
"temperature": 0 # ์ผ๊ด€๋œ ์‘๋‹ต์„ ์œ„ํ•ด ์˜จ๋„๋ฅผ 0์œผ๋กœ ์„ค์ •
}

(YOUR_API_KEY, your-open-webui-instance, llama3.1 ๊ฐ’์„ ์‹ค์ œ ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•˜์„ธ์š”.)

์˜ˆ์ƒ ์ถœ๋ ฅ: ์„ฑ๊ณต์ ์ธ ์š”์ฒญ์€ 200 OK ์ƒํƒœ ์ฝ”๋“œ์™€ ์ฑ—๋ด‡ ์‘๋‹ต์ด ํฌํ•จ๋œ JSON ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต์ด "HEALTHY"๋ผ๋Š” ๋‹จ์–ด๋ฅผ ํฌํ•จํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค (๋˜๋Š” ํ”„๋กฌํ”„ํŠธ์— ๋”ฐ๋ผ ์œ ์‚ฌํ•œ ์˜ˆ์ƒ ์‘๋‹ต).

Uptime Kuma์—์„œ 3๋‹จ๊ณ„ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์„ค์ •ํ•˜๋ ค๋ฉด POST ์š”์ฒญ, JSON ๋ณธ๋ฌธ, ์ธ์ฆ ํ—ค๋” ๋ฐ ์‘๋‹ต ๋‚ด์šฉ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ JSON ์ฟผ๋ฆฌ๋ฅผ ํฌํ•จํ•œ HTTP(s) ๋ชจ๋‹ˆํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋” ๊ณ ๊ธ‰ ์„ค์ •์œผ๋กœ, ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋‹ˆํ„ฐ๋ง ๋‹จ๊ณ„๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด Open WebUI ์ธ์Šคํ„ด์Šค์˜ ์ƒํƒœ, ์‹ ๋ขฐ์„ฑ ๋ฐ ์„ฑ๋Šฅ์„ ์ ๊ทน์ ์œผ๋กœ ๋ณด์žฅํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ผ๊ด€๋œ ๊ธ์ •์  ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.