-
Notifications
You must be signed in to change notification settings - Fork 570
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
๐ [i18n-KO] Translated
guides/webhooks_server.md
to Korean (#2145)
* docs: ko: guides/webhooks_server.md * feat: nmt draft * fix: manual edits * fix: resolve suggestions Co-authored-by: ๊น์ค์ฌ <55151385+junejae@users.noreply.github.com> Co-authored-by: Harheem Kim <49297157+harheem@users.noreply.github.com> --------- Co-authored-by: ๊น์ค์ฌ <55151385+junejae@users.noreply.github.com> Co-authored-by: Harheem Kim <49297157+harheem@users.noreply.github.com> Co-authored-by: Lucain <lucainp@gmail.com>
- Loading branch information
1 parent
c28d154
commit 8f5795a
Showing
2 changed files
with
201 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,199 @@ | ||
<!--โ ๏ธ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be | ||
rendered properly in your Markdown viewer. | ||
--> | ||
|
||
# ์นํ ์๋ฒ[[webhooks-server]] | ||
|
||
์นํ ์ MLOps ๊ด๋ จ ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ํน์ ์ ์ฅ์์ ์๋ก์ด ๋ณ๊ฒฝ ์ฌํญ์ ์์ ํ๊ฑฐ๋, | ||
๊ด์ฌ ์๋ ํน์ ์ฌ์ฉ์/์กฐ์ง์ ์ํ ๋ชจ๋ ์ ์ฅ์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์๋ณผ ์ ์์ต๋๋ค. | ||
์ด ๊ฐ์ด๋์์๋ `huggingface_hub`๋ฅผ ํ์ฉํ์ฌ ์นํ ์ ์์ ํ๋ ์๋ฒ๋ฅผ ๋ง๋ค๊ณ Space์ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. | ||
์ด๋ฅผ ์ํด์๋ Huggingface Hub์ ์นํ ๊ฐ๋ ์ ๋ํด ์ต์ํด์ผ ํฉ๋๋ค. | ||
์นํ ์์ฒด์ ๋ํด ๋ ์์ธํ ์์๋ณด๋ ค๋ฉด ์ด [๊ฐ์ด๋](https://huggingface.co/docs/hub/webhooks)๋ฅผ ๋จผ์ ์ฝ์ด๋ณด์ธ์. | ||
|
||
์ด ๊ฐ์ด๋์์ ์ฌ์ฉํ ๊ธฐ๋ณธ ํด๋์ค๋ [`WebhooksServer`]์ ๋๋ค. | ||
์ด ํด๋์ค๋ Huggingface Hub์์ ์นํ ์ ๋ฐ์ ์ ์๋ ์๋ฒ๋ฅผ ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์๋ฒ๋ [Gradio](https://gradio.app/) ์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. | ||
์ด ์๋ฒ์๋ ์ฌ์ฉ์๋ฅผ ์ํ ์ง์นจ์ ํ์ํ๋ UI์ ์นํ ์ ์์ ํ๋ API๊ฐ ์์ต๋๋ค. | ||
|
||
<Tip> | ||
|
||
์นํ ์๋ฒ์ ์คํ ์์๋ฅผ ๋ณด๋ ค๋ฉด [Spaces CI Bot](https://huggingface.co/spaces/spaces-ci-bot/webhook)์ ํ์ธํ์ธ์. | ||
์ด๊ฒ์ Space์ PR์ด ์ด๋ฆด ๋๋ง๋ค ์์ ํ๊ฒฝ์ ์คํํ๋ Space์ ๋๋ค. | ||
|
||
</Tip> | ||
|
||
<Tip warning={true}> | ||
|
||
์ด๊ฒ์ [์คํ์ ๊ธฐ๋ฅ](../package_reference/environment_variables#hfhubdisableexperimentalwarning)์ ๋๋ค. | ||
๋ณธ API๋ ํ์ฌ ๊ฐ์ ์์ ์ค์ด๋ฉฐ, ํฅํ ์ฌ์ ํต์ง ์์ด ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋์ ๋ ์ ์์ต๋๋ค. | ||
requirements์์ `huggingface_hub`์ ๋ฒ์ ์ ๊ณ ์ ํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. | ||
|
||
</Tip> | ||
|
||
|
||
## ์๋ํฌ์ธํธ ์์ฑ[[create-an-endpoint]] | ||
|
||
์นํ ์๋ํฌ์ธํธ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ํจ์์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋งํผ ๊ฐ๋จํฉ๋๋ค. | ||
์ฃผ์ ๊ฐ๋ ์ ์ค๋ช ํ๊ธฐ ์ํด ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค: | ||
|
||
```python | ||
# app.py | ||
from huggingface_hub import webhook_endpoint, WebhookPayload | ||
|
||
@webhook_endpoint | ||
async def trigger_training(payload: WebhookPayload) -> None: | ||
if payload.repo.type == "dataset" and payload.event.action == "update": | ||
# ๋ฐ์ดํฐ ์ธํธ๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด ํ์ต ์์ ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. | ||
... | ||
``` | ||
|
||
์ด ์ฝ๋ ์ค๋ํซ์ `'app.py'`๋ผ๋ ํ์ผ์ ์ ์ฅํ๊ณ `'python app.py'`๋ก ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฉ์์ง๊ฐ ํ์๋ ๊ฒ์ ๋๋ค: | ||
|
||
```text | ||
Webhook secret is not defined. This means your webhook endpoints will be open to everyone. | ||
To add a secret, set `WEBHOOK_SECRET` as environment variable or pass it at initialization: | ||
`app = WebhooksServer(webhook_secret='my_secret', ...)` | ||
For more details about webhook secrets, please refer to https://huggingface.co/docs/hub/webhooks#webhook-secret. | ||
Running on local URL: http://127.0.0.1:7860 | ||
Running on public URL: https://1fadb0f52d8bf825fc.gradio.live | ||
This share link expires in 72 hours. For free permanent hosting and GPU upgrades (NEW!), check out Spaces: https://huggingface.co/spaces | ||
Webhooks are correctly setup and ready to use: | ||
- POST https://1fadb0f52d8bf825fc.gradio.live/webhooks/trigger_training | ||
Go to https://huggingface.co/settings/webhooks to setup your webhooks. | ||
``` | ||
|
||
์ถํํฉ๋๋ค! ์นํ ์๋ฒ๋ฅผ ์คํํ์ต๋๋ค! ์ ํํ ์ด๋ค ์ผ์ด ์ผ์ด๋ฌ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค: | ||
|
||
1. [`webhook_endpoint`]๋ก ํจ์์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋์์ [`WebhooksServer`] ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค. | ||
๋ณผ ์ ์๋ฏ์ด ์ด ์๋ฒ๋ http://127.0.0.1:7860 ์์ ์คํ๋๋ Gradio ์ฑ์ ๋๋ค. | ||
์ด URL์ ๋ธ๋ผ์ฐ์ ์์ ์ด๋ฉด ๋ฑ๋ก๋ ์นํ ์ ๋ํ ์ง์นจ์ด ์๋ ๋๋ฉ ํ์ด์ง๋ฅผ ๋ณผ ์ ์์ต๋๋ค. | ||
2. Gradio ์ฑ์ ๋ด๋ถ์ ์ผ๋ก FastAPI ์๋ฒ์ ๋๋ค. ์๋ก์ด POST ๊ฒฝ๋ก `/webhooks/trigger_training`์ด ์ถ๊ฐ๋์์ต๋๋ค. | ||
์ด ๊ฒฝ๋ก๋ ์นํ ์ ์์ ํ๊ณ ํธ๋ฆฌ๊ฑฐ๋ ๋ `trigger_training` ํจ์๋ฅผ ์คํํฉ๋๋ค. | ||
FastAPI๋ ์๋์ผ๋ก ํ์ด๋ก๋๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ [`WebhookPayload`] ๊ฐ์ฒด๋ก ํจ์์ ์ ๋ฌํฉ๋๋ค. | ||
์ด `pydantic` ๊ฐ์ฒด์๋ ์นํ ์ ํธ๋ฆฌ๊ฑฐํ ์ด๋ฒคํธ์ ๋ํ ๋ชจ๋ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. | ||
3. Gradio ์ฑ์ ์ธํฐ๋ท์์ ์์ฒญ์ ๋ฐ์ ์ ์๋ ํฐ๋๋ ์ด์์ต๋๋ค. | ||
์ด๊ฒ์ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ผ๋ก, https://huggingface.co/settings/webhooks ์์ ๋ก์ปฌ ๋จธ์ ์ ๊ฐ๋ฆฌํค๋ ์นํ ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. | ||
์ด๋ฅผ ํตํด ์นํ ์๋ฒ๋ฅผ ๋๋ฒ๊น ํ๊ณ Space์ ๋ฐฐํฌํ๊ธฐ ์ ์ ๋น ๋ฅด๊ฒ ๋ฐ๋ณตํ ์ ์์ต๋๋ค. | ||
4. ๋ง์ง๋ง์ผ๋ก ๋ก๊ทธ์๋ ์๋ฒ๊ฐ ํ์ฌ ๋น๋ฐ๋ก ๋ณดํธ๋์ง ์๋๋ค๊ณ ์๋ ค์ค๋๋ค. | ||
์ด๊ฒ์ ๋ก์ปฌ ๋๋ฒ๊น ์๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง ๋์ค์ ๊ณ ๋ คํด์ผ ํ ์ฌํญ์ ๋๋ค. | ||
|
||
<Tip warning={true}> | ||
|
||
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฒ๋ ์คํฌ๋ฆฝํธ ๋์์ ์์๋ฉ๋๋ค. | ||
์ฃผํผํฐ ๋ ธํธ๋ถ์์ ์คํ ์ค์ด๋ผ๋ฉด `decorated_function.run()`์ ํธ์ถํ์ฌ ์๋ฒ๋ฅผ ์๋์ผ๋ก ์์ํ ์ ์์ต๋๋ค. | ||
๊ณ ์ ํ ์๋ฒ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์๋ํฌ์ธํธ๊ฐ ์๋๋ผ๋ ์๋ฒ๋ฅผ ํ ๋ฒ๋ง ์์ํ๋ฉด ๋ฉ๋๋ค. | ||
|
||
</Tip> | ||
|
||
|
||
## ์นํ ์ค์ ํ๊ธฐ[[configure-a-webhook]] | ||
|
||
์นํ ์๋ฒ๋ฅผ ์คํํ๊ณ ์์ผ๋ฏ๋ก, ์ด์ ๋ฉ์์ง๋ฅผ ์์ ํ๊ธฐ ์ํด ์นํ ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. | ||
https://huggingface.co/settings/webhooks ๋ก ์ด๋ํ์ฌ "Add a new webhook"์ ํด๋ฆญํ๊ณ ์นํ ์ ๊ตฌ์ฑํ์ธ์. | ||
๋ชจ๋ํฐ๋งํ ๋์ ์ ์ฅ์์ ์นํ URL `https://1fadb0f52d8bf825fc.gradio.live/webhooks/trigger_training`์ ์ค์ ํ์ธ์. | ||
|
||
<div class="flex justify-center"> | ||
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/hub/configure_webhook.png"/> | ||
</div> | ||
|
||
์ด๊ฑธ๋ก ๋์ ๋๋ค! ์ด์ ๋์ ์ ์ฅ์๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ์นํ ์ ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด, ์ปค๋ฐ ํธ์๊ฐ ๊ทธ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค. | ||
์นํ ์ Activity ํญ์์ ํธ๋ฆฌ๊ฑฐ๋ ์ด๋ฒคํธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ์ด์ ์๋ํ๋ ๊ตฌ์ฑ์ด ์์ผ๋ฏ๋ก ํ ์คํธํ๊ณ ๋น ๋ฅด๊ฒ ๋ฐ๋ณตํ ์ ์์ต๋๋ค. | ||
์ฝ๋๋ฅผ ์์ ํ๊ณ ์๋ฒ๋ฅผ ๋ค์ ์์ํ๋ฉด ๊ณต๊ฐ URL์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. | ||
ํ์ํ ๊ฒฝ์ฐ Hub์์ ์นํ ๊ตฌ์ฑ์ ์ ๋ฐ์ดํธํ์ธ์. | ||
|
||
## Space์ ๋ฐฐํฌํ๊ธฐ[[deploy-to-a-space]] | ||
|
||
์ด์ ์๋ํ๋ ์นํ ์๋ฒ๊ฐ ๋ง๋ จ๋์์ผ๋ฏ๋ก, ๋ค์ ๋ชฉํ๋ ์ด๋ฅผ Space์ ๋ฐฐํฌํ๋ ๊ฒ์ ๋๋ค. https://huggingface.co/new-space ์ ๊ฐ์ Space๋ฅผ ์์ฑํฉ๋๋ค. | ||
์ด๋ฆ์ ์ง์ ํ๊ณ , Gradio SDK๋ฅผ ์ ํํ ๋ค์ "Create Space"๋ฅผ ํด๋ฆญํฉ๋๋ค. ์ฝ๋๋ฅผ `app.py` ํ์ผ๋ก Space์ ์ ๋ก๋ํฉ๋๋ค. | ||
Space๊ฐ ์๋์ผ๋ก ์์๋ฉ๋๋ค! | ||
Space์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ด [๊ฐ์ด๋](https://huggingface.co/docs/hub/spaces-overview)๋ฅผ ์ฐธ์กฐํ์ธ์. | ||
|
||
์นํ ์๋ฒ๊ฐ ์ด์ ๊ณต๊ฐ Space์์ ์คํ ์ค์ ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋น๋ฐ๋ฒํธ๋ก ๋ณด์์ ์ค์ ํ๊ณ ์ถ์ ๊ฒ์ ๋๋ค. | ||
Space ์ค์ > "Repository secrets" ์น์ > "Add a secret" ๋ก ์ด๋ํฉ๋๋ค. `WEBHOOK_SECRET` ํ๊ฒฝ ๋ณ์์ ์ํ๋ ๊ฐ์ ์ค์ ํฉ๋๋ค. | ||
[Webhooks ์ค์ ](https://huggingface.co/settings/webhooks)์ผ๋ก ๋์๊ฐ์ ์นํ ๊ตฌ์ฑ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ํฉ๋๋ค. | ||
์ด์ ์ฌ๋ฐ๋ฅธ ๋น๋ฐ๋ฒํธ๊ฐ ์๋ ์์ฒญ๋ง ์๋ฒ์์ ํ์ฉ๋ฉ๋๋ค. | ||
|
||
์ด๊ฒ ์ ๋ถ์ ๋๋ค! Space๊ฐ ์ด์ Hub์ ์นํ ์ ์์ ํ ์ค๋น๊ฐ ๋์์ต๋๋ค. | ||
๋ฌด๋ฃ ํ๋์จ์ด์ธ 'cpu-basic'์์ Space๋ฅผ ์คํ ์, 48์๊ฐ ๋์ ๋นํ์ฑํ๋๋ฉด ์ข ๋ฃ๋๋ค๋ ์ ์ ์ ๋ ํ์ธ์. | ||
์๊ตฌ์ ์ธ Space๊ฐ ํ์ํ ๊ฒฝ์ฐ [์ ๊ทธ๋ ์ด๋๋ ํ๋์จ์ด](https://huggingface.co/docs/hub/spaces-gpus#hardware-specs)๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค. | ||
|
||
## ๊ณ ๊ธ ์ฌ์ฉ๋ฒ[[advanced-usage]] | ||
|
||
์์ ๊ฐ์ด๋์์๋ [`WebhooksServer`]๋ฅผ ์ค์ ํ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํ์ต๋๋ค. | ||
์ด ์น์ ์์๋ ์ด๋ฅผ ๋์ฑ ์ฌ์ฉ์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. | ||
|
||
### ๋ค์ค ์๋ํฌ์ธํธ[[multiple-endpoints]] | ||
|
||
๋์ผํ ์๋ฒ์ ์ฌ๋ฌ ์๋ํฌ์ธํธ๋ฅผ ๋ฑ๋กํ ์ ์์ต๋๋ค. | ||
์๋ฅผ ๋ค์ด, ํ๋์ ์๋ํฌ์ธํธ๋ ํ์ต ์์ ์ ํธ๋ฆฌ๊ฑฐํ๊ณ ๋ค๋ฅธ ์๋ํฌ์ธํธ๋ ๋ชจ๋ธ ํ๊ฐ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋๋ก ํ ์ ์์ต๋๋ค. | ||
์ด๋ฅผ ์ํด ์ฌ๋ฌ ๊ฐ์ `@webhook_endpoint` ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค: | ||
|
||
```python | ||
# app.py | ||
from huggingface_hub import webhook_endpoint, WebhookPayload | ||
|
||
@webhook_endpoint | ||
async def trigger_training(payload: WebhookPayload) -> None: | ||
if payload.repo.type == "dataset" and payload.event.action == "update": | ||
# ๋ฐ์ดํฐ ์ธํธ๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด ํ์ต ์์ ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. | ||
... | ||
|
||
@webhook_endpoint | ||
async def trigger_evaluation(payload: WebhookPayload) -> None: | ||
if payload.repo.type == "model" and payload.event.action == "update": | ||
# ๋ชจ๋ธ์ด ์ ๋ฐ์ดํธ๋๋ฉด ํ๊ฐ ์์ ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. | ||
... | ||
``` | ||
|
||
์ด๋ ๊ฒ ํ๋ฉด ๋ ๊ฐ์ ์๋ํฌ์ธํธ๊ฐ ์์ฑ๋ฉ๋๋ค: | ||
|
||
```text | ||
(...) | ||
Webhooks are correctly setup and ready to use: | ||
- POST https://1fadb0f52d8bf825fc.gradio.live/webhooks/trigger_training | ||
- POST https://1fadb0f52d8bf825fc.gradio.live/webhooks/trigger_evaluation | ||
``` | ||
|
||
### ์ฌ์ฉ์ ์ ์ ์๋ฒ[[custom-server]] | ||
|
||
๋ ๋ง์ ์ ์ฐ์ฑ์ ์ป๊ธฐ ์ํด [`WebhooksServer`] ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ ์๋ ์์ต๋๋ค. | ||
์ด๊ฒ์ ์๋ฒ์ ๋๋ฉ ํ์ด์ง๋ฅผ ์ฌ์ฉ์ ์ ์ํ๊ณ ์ ํ ๋ ์ ์ฉํฉ๋๋ค. | ||
๊ธฐ๋ณธ ํ์ด์ง๋ฅผ ๋ฎ์ด์ธ [Gradio UI](https://gradio.app/docs/#blocks)๋ฅผ ์ ๋ฌํ์ฌ ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค. | ||
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๋ฅผ ์ํ ์ง์นจ์ ์ถ๊ฐํ๊ฑฐ๋ ์นํ ์ ์๋์ผ๋ก ํธ๋ฆฌ๊ฑฐํ๋ ์์์ ์ถ๊ฐํ ์ ์์ต๋๋ค. | ||
[`WebhooksServer`]๋ฅผ ์์ฑํ ๋, [`~WebhooksServer.add_webhook`] ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ์นํ ์ ๋ฑ๋กํ ์ ์์ต๋๋ค. | ||
|
||
์ ์ฒด ์์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: | ||
|
||
```python | ||
import gradio as gr | ||
from fastapi import Request | ||
from huggingface_hub import WebhooksServer, WebhookPayload | ||
|
||
# 1. UI ์ ์ | ||
with gr.Blocks() as ui: | ||
... | ||
|
||
# 2. ์ฌ์ฉ์ ์ ์ UI์ ์ํฌ๋ฆฟ์ผ๋ก WebhooksServer ์์ฑ | ||
app = WebhooksServer(ui=ui, webhook_secret="my_secret_key") | ||
|
||
# 3. ๋ช ์์ ์ด๋ฆ์ผ๋ก ์นํ ๋ฑ๋ก | ||
@app.add_webhook("/say_hello") | ||
async def hello(payload: WebhookPayload): | ||
return {"message": "hello"} | ||
|
||
# 4. ์์์ ์ด๋ฆ์ผ๋ก ์นํ ๋ฑ๋ก | ||
@app.add_webhook | ||
async def goodbye(payload: WebhookPayload): | ||
return {"message": "goodbye"} | ||
|
||
# 5. ์๋ฒ ์์ (์ ํ ์ฌํญ) | ||
app.run() | ||
``` | ||
|
||
1. Gradio ๋ธ๋ก์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ UI๋ฅผ ์ ์ํฉ๋๋ค. ์ด UI๋ ์๋ฒ์ ๋๋ฉ ํ์ด์ง์ ํ์๋ฉ๋๋ค. | ||
2. ์ฌ์ฉ์ ์ ์ UI์ ์ํฌ๋ฆฟ์ผ๋ก [`WebhooksServer`] ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. | ||
์ํฌ๋ฆฟ์ ์ ํ ์ฌํญ์ด๋ฉฐ `WEBHOOK_SECRET` ํ๊ฒฝ ๋ณ์๋ก ์ค์ ํ ์ ์์ต๋๋ค. | ||
3. ๋ช ์์ ์ด๋ฆ์ผ๋ก ์นํ ์ ๋ฑ๋กํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด `/webhooks/say_hello` ์๋ํฌ์ธํธ๊ฐ ์์ฑ๋ฉ๋๋ค. | ||
4. ์์์ ์ด๋ฆ์ผ๋ก ์นํ ์ ๋ฑ๋กํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด `/webhooks/goodbye` ์๋ํฌ์ธํธ๊ฐ ์์ฑ๋ฉ๋๋ค. | ||
5. ์๋ฒ๋ฅผ ์์ํฉ๋๋ค. ์ด๊ฒ์ ์ ํ ์ฌํญ์ด๋ฉฐ ์คํฌ๋ฆฝํธ ๋์์ ์๋์ผ๋ก ์๋ฒ๊ฐ ์์๋ฉ๋๋ค. |