๐คDify (Synology๐พ, Docker๐ณ) ์ค์นํ๊ธฐ
Dify๋ ๋ฐ์ด๋ธ์ฝ๋ฉ?์ผ๋ก ์ ๋ช ํด์ง ํด๋ก ๋ ธ๋ ๊ธฐ๋ฐ LLM ์ํฌํ๋ก์ฐ๋ฅผ GUIํ๊ฒฝ์์ ์์ฝ๊ฒ ์ ์์ด ๊ฐ๋ฅํฉ๋๋ค.
๋๊ท๋ชจ ์๋ฒํ๊ฒฝ์ด ์๋๋๋ผ๋ ์ต์ ์ฌ์์ด ๋ฎ์ ํ๋ ์์ํฌ์ด๊ธฐ ๋๋ฌธ์ Synology DSM๋ Unraid ๊ฐ์ ํ๊ฒฝ์์ Docker๋ฅผ ํตํด Dify๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
๐ ์ฃผ์ AI ์ํฌํ๋ก์ฐ ํ๋ซํผ 4์ข ๋น๊ต
| ํญ๋ชฉ | Dify | Flowise | Langflow | n8n |
| ์ฃผ์ ๋ชฉ์ | LLM ์ฑ ๊ฐ๋ฐ ํ๋ซํผ | LLM ์ฑ๋ด/์์ด์ ํธ ๋น๋ | LLM ํ์ดํ๋ผ์ธ ๋น๋ | ๋ฒ์ฉ ์ํฌํ๋ก์ฐ ์๋ํ |
| UI ๋ฐฉ์ | GUI + ์ฝ๋ ํผํฉ | ๋ ธ๋ ๊ธฐ๋ฐ GUI | ๋ ธ๋ ๊ธฐ๋ฐ GUI | ๋ ธ๋ ๊ธฐ๋ฐ GUI |
| ๋ผ์ด์ ์ค ์ ์ฑ | Apache 2.0 (์คํ์์ค) | Apache 2.0 (์คํ์์ค) | MIT License (์คํ์์ค) | Fair-code (Sustainable Use) |
| ์์ ์ ์ด์ฉ | โ ๊ฐ๋ฅ (์์ ๋ก์) | โ ๊ฐ๋ฅ (์์ ๋ก์) | โ ๊ฐ๋ฅ (๋งค์ฐ ์์ ๋ก์) | โ ๏ธ ์กฐ๊ฑด๋ถ (์ํฐํ๋ผ์ด์ฆ ์ ๋ฃ) |
| ๋ผ์ด์ ์ค ํน์ด์ฌํญ | ์์ค ์์ ๋ฐ ์ฌ๋ฐฐํฌ ๊ฐ๋ฅ | ์์ค ์์ ๋ฐ ์ฌ๋ฐฐํฌ ๊ฐ๋ฅ | DataStax ์ธ์ ํ์๋ ์ ์ง | ์์ฉ SaaS(ํธ์คํ ) ๋ฑ ์ฌํ๋งค ์ ํ |
| LLM ํนํ๋ | โญโญโญโญโญ | โญโญโญโญ | โญโญโญโญ | โญโญ |
| ๋นLLM ์๋ํ | โ ์ ํ์ | โ ์ ํ์ | โ ์ ํ์ | โ ๋งค์ฐ ๊ฐ๋ ฅ |
| RAG ์ง์ | โ ๋ด์ฅ (Knowledge Base) | โ ์ง์ | โ ์ง์ | โ ๏ธ ์ง์ ๊ตฌ์ฑ ํ์ |
| ๋ฉํฐ ์์ด์ ํธ | โ ๊ฐ๋ ฅ | โ ๏ธ ๊ธฐ๋ณธ ์์ค | โ ์ง์ | โ ๏ธ ์ ํ์ |
| ๋ฐฑ์๋ ์ธ์ด | Python | Node.js | Python | Node.js |
| LangChain ์์กด | โ ๋ ์ ํ๋ ์์ํฌ | โ ๊ธฐ๋ฐ | โ ๊ธฐ๋ฐ | โ |
| Self-host | โ Docker | โ Docker/npm | โ Docker/pip | โ Docker/npm |
| ํด๋ผ์ฐ๋ SaaS | โ dify.ai | โ | โ ๏ธ DataStax ํธ์คํ | โ n8n.cloud |
| API ์๋น | โ ์๋ ์์ฑ | โ ๏ธ ๊ธฐ๋ณธ ์ ๊ณต | โ ์ง์ | โ Webhook ๋ฐฉ์ |
| ๋ชจ๋ธ ํ๋ก๋ฐ์ด๋ | ๋งค์ฐ ๋ค์ | ๋ค์ | ๋ค์ | ์ ํ์ |
| ๋ก์ปฌ LLM (Ollama) | โ | โ | โ | โ ๏ธ HTTP ๋ ธ๋๋ก ๊ฐ๋ฅ |
| ํ๋กฌํํธ ๊ด๋ฆฌ | โ ๋ด์ฅ ๋ฒ์ ๊ด๋ฆฌ | โ | โ ๏ธ ๊ธฐ๋ณธ ์์ค | โ |
| ๋ชจ๋ํฐ๋ง/๋ก๊น | โ ๋ด์ฅ | โ | โ ๏ธ ๊ธฐ๋ณธ ์์ค | โ ๏ธ ์คํ ๋ก๊ทธ ์์ค |
| ํ์ต ๋์ด๋ | ์ค๊ฐ | ์ฌ์ | ์ค๊ฐ | ์ค๊ฐ |
| ์ํฐํ๋ผ์ด์ฆ ๊ธฐ๋ฅ | โ (์ ๋ฃ ํ๋) | โ | โ ๏ธ | โ (์ ๋ฃ ํ๋) |
A. Dify ์ค์นํ๊ธฐ(Synology) - ๊ณต์๊ฐ์ด๋ ์ค์นx, ์ปค์คํ ์ธํ
Git ์ค์น
๋จผ์ ์๋๋ก์ง์ git ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
DSM ๊ณต์ ํจํค์ง ์ผํฐ์๋ ํฌํจ๋์ง ์์, ์ปค๋ฎค๋ํฐ ๋ฒ์ ์ผ๋ก ์ค์น๋ฅผ ํ์์ต๋๋ค.
์๋๋ก์ง ํจํค์ง ์์ค
- ํจํค์ง ์ผํฐ - ์ค์ ๋ฒํผ - ํจํค์ง ์์ค

์ถ๊ฐ ๋ฒํผ์ ํด๋ฆญํ์ฌ https://packages.synocommunity.com ๋ฅผ ์ถ๊ฐ ํฉ๋๋ค.

ํจํค์ง ์ผํฐ์ ์ปค๋ฎค๋ํฐ ๋ฉ๋ด๊ฐ ์๊ฒผ์ต๋๋ค.

git์ ์ค์นํฉ๋๋ค.

ํฐ๋ฏธ๋์ ์ด์ด์ ์ ๋์ํ๋ ์ง ํ ์คํธ ํด๋ด ๋๋ค.

Dify ์ค์น
์ค์น๊ฐ ์๋ฃ๋์์ผ๋ฉด, Dify ์ค์น ๊ฐ์ด๋๋ฅผ ๋ฐ๋ผ ์งํํด ๋ด ์๋ค.
cd /volume1/docker/
git clone https://github.com/langgenius/dify.git
cd dify
cd docker
cp .env.example .env
docker compose up -d
๊ณต์ Dify ๊นํ๋ธ์์ ์๋ดํ๋ ์ค์น๋ฒ์ ๋๋ค.
์ ์ปค๋งจ๋๋ก ์ค์น๋ฅผ ์๋๋ก์ง ์์์ ์งํํ๋ฉด docker compose ์ ๋ฌด์ํ ๋ง์ ์๋ฌ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๐
์ปค์คํ ์ธํ (docker-compose, .env) ์ค์น
# compose ์คํจ ์ ์ทจ์/์ ๊ฑฐ ํ๊ธฐ
sudo docker compose down --remove-orphans์๋๋ก์ง์์ ์ ์์ ์ธ ์ค์น๋ฅผ ์ํด, ๋จผ์ ์คํ๋ ๋์ปค ์ปจํ ์ด๋๋ค์ ์ ๊ฑฐํด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฏธ๋ฆฌ ํด๋๋ค์ ์์ฑํด์ค์๋ค.
# Dify ๋์ปค ํด๋๋ก ์ด๋
cd /volume1/docker/dify/docker
# ๋๋ฝ๋๊ธฐ ์ฌ์ด ๋ชจ๋ ๋ณผ๋ฅจ ํด๋๋ฅผ ํ ๋ฒ์ ์์ฑํฉ๋๋ค.
sudo mkdir -p volumes/db/data
sudo mkdir -p volumes/redis/data
sudo mkdir -p volumes/sandbox/dependencies
sudo mkdir -p volumes/app/storage
sudo mkdir -p volumes/plugin_daemon
sudo mkdir -p volumes/certbot/conf
sudo mkdir -p volumes/certbot/conf/live
sudo mkdir -p volumes/certbot/conf/archive
sudo mkdir -p volumes/certbot/www
sudo mkdir -p volumes/qdrant # weaviate ๋์ฒด ๋ฒกํฐ DB !
sudo mkdir -p volumes/storage
sudo mkdir -p volumes/weaviate/data # AVX ๋ช
๋ น์ด ์์ผ๋ฉด ์ฌ์ฉ ๋ถ๊ฐ !
# ๋ชจ๋ ๋ณผ๋ฅจ ํด๋์ ๋ํด ์ฐ๊ธฐ ๊ถํ ๋ถ์ฌ
sudo chmod -R 777 /volume/

๊ณต์ ๊ฐ์ด๋์์ ์ค์น๋๋ ๋ฒกํฐDB์ธ Weaviate๋ CPU์์ AVX ๋ช ๋ น์ด๋ฅผ ์ง์ํด์ผ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ์ ์๋๋ก์ง๋ ๋๋ถ๋ถ(?) AVX ๋ช ๋ น์ด๊ฐ ์๋ CPU๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋์ฒด ๋ฐฉ์์ผ๋ก Qdrant๋ฅผ ์ค์นํด ์ค๋๋ค. (Dify๋ ๋ค์ํ DB๋ฅผ ์ง์ํฉ๋๋ค ๐)
(์ mkdir๋ก qdrant ๋๋ ํ ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ์ต๋๋ค !)
/volume1/docker/dify/ ํด๋์๋ Dify ๋์ปค ์ค์น๋ฅผ ์ํ docker-compose์ .env๊ฐ ์์ต๋๋ค.
Dify๋ ์ฆ์(?) ์ ๋ฐ์ดํธ๋ก ๋ค์ค ๋์ปค ์ปจํ ์ด๋๋ค์ ์ฐ๊ฒฐํ์ฌ ๋์ํ๊ธฐ ๋๋ฌธ์ ์ค์ ์ด ๊ฝค๋ ๋ณต์กํฉ๋๋ค.
๋๊ตฐ๋ค๋, ์๋๋ก์ง๋ผ๋ ํ์๋ ์์คํ ์์์ ์ ์ฝ์ฌํญ๋ค์ด ๋ฐ๋ผ ๋ถ์ต๋๋ค.
์ด์ฌํ ์ ๋ฏธ๋์ด์ ์คํํด๋ก(์ ฌ๋ง)๋ฅผ ๊ฐ๊ตฌ๋ฉฐ ์ปค์คํฐ๋ง์ด์งํ docker-compose์ ๋๋ค.
- ์ ์ฝ์ฌํญ
- docker ๋คํธ์ํฌ๋ฅผ Dify_bridge๋ก ๋ฌถ์
- [api port] 5001:5001 -> 18080:5001
- [web ui port] 3000:3000 -> 18081:3000
- [plug-in daemon] 5002:5002 -> 15002:5002
env.yaml์ dify์ ๋ํ ์ค์ ๋ค์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์๋๋ก์ง๋ ์ข(?) ๋๋ฆฐ ํธ์ด๊ธฐ ๋๋ฌธ์ Timeout ์๊ฐ๋๋ฅผ ๋ํญ ๋๋ฆฌ๊ณ , ์์ ๋งํ ๋ฒกํฐDB๋ฅผ Qdrant๋ก ๋ณ๊ฒฝ, docker-compose์์ ์์ ํ port ๋ฑ์ ๋ฐ์ํ์์ต๋๋ค.
- ์์ ํญ๋ชฉ
- ์๋๋ก์ง์ IP ๋ฐ docker-compose์ ์ ์ฉํ Port ๋ฒํธ๋ฅผ ์ค์ ํฉ๋๋ค.
WEB๊ณผ API๋ฅผ ๊ตฌ๋ถํด์ URL๊ณผ Port๋ฅผ ์ง์ ํฉ๋๋ค.
CONSOLE_API_URL=http://SynologyIP or Domain:18080
CONSOLE_WEB_URL=http://SynologyIP or Domain:18081
SERVICE_API_URL=http://SynologyIP or Domain:18080
APP_API_URL=http://SynologyIP or Domain:18080
APP_WEB_URL=http://SynologyIP or Domain:18081
NEXT_PUBLIC_SOCKET_URL=ws://SynologyIP or Domain:18080 - ํน์๋ CORS ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, IP์ Domain์ ์ถ๊ฐํฉ๋๋ค.
CONSOLE_CORS_ALLOW_ORIGINS=IP:18081,http://Domain:18081
WEB_API_CORS_ALLOW_ORIGINS=IP:18081,http://Domain:18081
- ์๋๋ก์ง์ IP ๋ฐ docker-compose์ ์ ์ฉํ Port ๋ฒํธ๋ฅผ ์ค์ ํฉ๋๋ค.
- ๊ฐ API๋ค์ ํค๋ฅผ ์ค์ ํฉ๋๋ค.
- ํธํ๊ฒ GPT๋ Gemini์๊ฒ ์์ฑํด ๋ฌ๋ผ๊ณ ํฉ๋๋ค.
SECRET_KEY=[32~64chars]
PLUGIN_DAEMON_KEY=[32~64chars]
PLUGIN_DIFY_INNER_API_KEY=[32~64chars] - ์๋๋ก์ง์ฒ๋ผ ๋ฎ์ ์ฌ์์ ๋ง๊ฒ ํ์์์์ ๋๋ ธ์ต๋๋ค.
FILES_ACCESS_TIMEOUT=600
API_WEBSOCKET_GUNICORN_TIMEOUT=600
GUNICORN_TIMEOUT=600
SQLALCHEMY_POOL_TIMEOUT=300
REDIS_SOCKET_TIMEOUT=600
REDIS_SOCKET_CONNECT_TIMEOUT=600
QDRANT_CLIENT_TIMEOUT=600
PLUGIN_PYTHON_ENV_INIT_TIMEOUT=300
PLUGIN_MAX_EXECUTION_TIMEOUT=600 - API ํค ์์ฑ ๋ฐฉ๋ฒ
# SECRET_KEY (48 chars)
openssl rand -hex 24
# PLUGIN_DAEMON_KEY (56 chars)
openssl rand -hex 28
# PLUGIN_DIFY_INNER_API_KEY (56 chars)
openssl rand -hex 28
import secrets
# SECRET_KEY (48 chars)
secret_key = secrets.token_hex(24) # 48 hex chars
print("SECRET_KEY=", secret_key)
# PLUGIN_DAEMON_KEY (56 chars)
plugin_daemon_key = secrets.token_hex(28) # 56 hex chars
print("PLUGIN_DAEMON_KEY=", plugin_daemon_key)
# PLUGIN_DIFY_INNER_API_KEY (56 chars)
plugin_dify_key = secrets.token_hex(28) # 56 hex chars
print("PLUGIN_DIFY_INNER_API_KEY=", plugin_dify_key)
์ env.yaml ํ์ผ์ .env๋ก ๋ณ๊ฒฝํด์ค๋๋ค. Dify ์คํ ์ .env ์ค์ ๊ฐ์ด ์ ์ฉ๋ฉ๋๋ค.
cp env.yaml .env์ด์ compose๋ฅผ ์งํํด์ค๋๋ค.
# Docker Compose
sudo docker compose up -d
์ค์น๊ฐ ์๋ฃ๋๋ฉด ์ปจํ ์ด๋๋ค์ผ ์คํ๋ฉ๋๋ค.

์ปจํ ์ด๋ ๋งค๋์ ์์๋ ๋์ํํฉ์ ํ์ธํ ์ ์์ต๋๋ค.

ํน์ฌ๋ ๋ก๊ทธ๋ ์๋์ฐฝ์ ํตํด ๋ฌธ์ ๋ฅผ ๋ฐ์ํ๋ฉด ์คํ์ ์ค๋จํ๊ณ ์ค์ ์ ์์ ํฉ๋๋ค.


# ํน์๋ compose ์คํจ ์
sudo docker compose down --remove-orphans
# ๋ก๊ทธ๋ฅผ ํตํด ๊ถํ ๋ฌธ์ ์์ ํ์ธ
sudo chown -R 1000:1000 /volume1/docker/dify/
sudo chmod -R 777 /volume1/docker/dify/
sudo docker compose up -d์์์ ์ค์ ํ๋ http://SynologyIP:18081 ์ฃผ์๋ก ์ ์ํด ๋ด ๋๋ค.
์ ์ ๊ธฐ๋ค๋ฆฌ๋ฉด ์ค์น ์์ ์ด ๋๋ฉ๋๋ค. (?)

๊ด๋ฆฌ์ ๊ณ์ ์ค์ ํ์ด์ง๊ฐ ๋ํ๋๋ฉด ์ฑ๊ณต์ ๋๋ค! ๐๐

โ ๏ธ์ ์ธํ ๋ค์ ์ปค์คํ ๋์๊ธฐ ๋๋ฌธ์ ์ผ๋ถ ๋์์ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค...?
-> ์ค์ ๊ฐ๋ค์ ํ์ธํด ์ฃผ์ธ์!! ๐ผ
B. Dify ์ค์นํ๊ธฐ (Unraid)
์ ์๋๋ก์ง ์ค์น๊ณผ์ ์ ๋นํ๋ฉด ๋งค์ฐ ์ ๋ ์ ๋๋ค ๐ฅน
Apps์ ๋ฑ๋ก๋ Dify-aio๋ฅผ ํด๋ฆญํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด ๋ฐ์ต๋๋ค.

Unraid๋ Apps์์ ๋ค์ด๋ฐ์ ์ด๋ฏธ์ง์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ธ Docker Template๋ค์ด ์ ๊ณต๋๊ธฐ ๋๋ฌธ์ ํฌ๊ฒ ์ด๋ ค์์ ์์ต๋๋ค.
dify-aio์ ๊ฒฝ์ฐ ํ๊ฒฝ๋ณ์๋ก MAIL_TYPE๊ณผ RESEND_API_KEY ์ ๋๋ง ์ถ๊ฐํ์ฌ smtp, bypass๋ก ์ค์ ํ๋ฉด ๋๋ฉ๋๋ค!!

๋๋จธ์ง ๊ธฐ๋ณธ์ ์ธ Web UI Port, Initial Admin Password (์ ํ), Timezone๊ณผ ๋ ํ์ํ ํญ๋ชฉ๋ค์ด ์์ผ๋ฉด ์ถ๊ฐํ์ฌ ๋ง๋ฌด๋ฆฌํฉ๋๋ค.

Dify ์ฌ์ฉํ๊ธฐ
Dify ์ค์น๊ฐ ์๋ฃ๋์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์ฌ ๊ฒ ์
๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก LLM ๋ชจ๋ธ์ ์ธํ
ํด ๋ด
๋๋ค.

Dify - LLM Provider ์ฐ๊ฒฐํ๊ธฐ
์ฐ์ธก ์๋จ ๊ณ์ - ์ค์ ํด๋ฆญ

์ค์ - ๋ชจ๋ธ ์ ๊ณต์(Model Provider) ํด๋ฆญ

์๋ง์ ๋ชจ๋ธ ๊ณต๊ธ์๋ฅผ ์ค์นํ๊ณ ์์คํ ๋ชจ๋ธ ์ค์ ์์ ์ฌ์ฉํ ๋ชจ๋ธ ์ค์ ์ ์งํํฉ๋๋ค.

์์๋ก ์ ๋ฏธ๋์ด๋ฅผ ์ค์นํด๋ณด๊ฒ ์ต๋๋ค.


์ํด๋ฆญ์ผ๋ก ๊ธ๋ฐฉ ์ค์น๊ฐ ์๋ฃ๋์์ต๋๋ค. ์ด์ LLM์ ์ค์ ๋์์ํค๊ธฐ ์ ์ APIํค๋ฅผ ์ถ๊ฐํ์ฌ ์ธ์ฆ์ ํด์ผํฉ๋๋ค.
API ํค ์ถ๊ฐ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

Google AI Studio์์ API ํค๋ฅผ ๋ฐ๊ธ ๋ฐ์ต๋๋ค.

๋ฐ๊ธ๋ฐ์ API ํค๋ฅผ ๋ณต์ฌํ์ฌ Dify์ ์ธ์ฆ ๊ตฌ์ฑ ์ฐฝ์ ์ ๋ ฅํ๊ณ ์ ์ฅํฉ๋๋ค.

Gemini ๋ชจ๋ธ์ด ๋ฑ๋ก๋๋ฉด Gemini์์ ์ฌ์ฉํ ์์คํ ๋ชจ๋ธ ์ค์ ์ ์งํํฉ๋๋ค.

์์๋ก Gemini์ 3.1 Flash-Lite ๋ชจ๋ธ์ ๋ฑ๋กํด ๋ณด์์ต๋๋ค.

์ฑ ์์ฑํ๊ธฐ
Dify์์๋ ์ฑ์ด๋ผ๋ ๊ฐ๋ ์ผ๋ก ์ฌ์ฉ์๊ฐ ์ํ๋ ๋ค์ํ ์ํฌํ๋ก์ฐ ํ ํ๋ฆฟ๋ค์ ์ ๊ณตํฉ๋๋ค. ๋น ์ํ์์ ์ฒ์๋ถํฐ ์ง์ ๋ง๋ค์ด๊ฐ ์๋ ์๊ณ , ์ ๊ณต๋ ํ ํ๋ฆฟ์ ์ ๋ง์ ๋ง๊ฒ ์์ ํ์ฌ LLM์ ๋ชฉ์ ์ ๋ง๊ฒ ๋์์ํค๋ ํ๋ฆ๋๋ฅผ GUI๋ก ์์ฝ๊ฒ ๊ตฌ์ฑ ๊ฐ๋ฅํฉ๋๋ค.


ํ ์คํธ์ฉ์ผ๋ก ํ ํ๋ฆฟ ํ๋๋ฅผ ์ ํํ์ฌ ์ฑ์ ์์ฑํ์์ต๋๋ค.

์ฌ์ฉ ๋ชฉ์ ์ ๋ง๊ฒ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ๋ ธ๋๊ตฌ์ฑ๋ค์ ์์ ํ์์ต๋๋ค.

LLM ๋ ธ๋์์ ๊ธฐ๋ณธ ์ธํ ์ด gpt๋ก ๋์ด์์ด ํธํ๋์ง ์์์ด๋ผ๋ ๊ฒฝ๊ณ ํ์โ ๏ธ๊ฐ ์์ฑ๋์ด ์์ต๋๋ค.

๋ชจ๋ธ ์ ํ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์์์ ์ค์ ํ Gemini ๋ชจ๋ธ ๋ฆฌ์คํธ๊ฐ ๋ํ๋ฉ๋๋ค. ์ฌ์ฉํ ๋ชจ๋ธ์ ์ ํํ๊ณ ๋ชจ๋ธ์ ๋งค๊ฐ๋ณ์๋ค์ ์ค์ ํ๋ฉด ์๋ฆผํ์โ ๏ธ๊ฐ ์ฌ๋ผ์ง๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค!

๋ ธ๋๋ค์ ๋ฐฐ์น์ ์ํฌํ๋ก์ฐ ์ธํ ์ ๋ง์น ํ, ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ์์๋ ธ๋์์ ์ค์ ํ ํญ๋ชฉ๋ค์ ๊ธฐ์ค์ผ๋ก ์ฑํ ์ฐฝ์ด ํ์ฑํ๋ฉ๋๋ค.

์ค์ ์ฑ ๊ตฌ๋์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ํตํด์ ํ ์คํธํ ๋ค, ์์ฑ๋ ์ฑ์ ๊ฒ์ํ์ฌ Web, API ๋ฑ์ ํตํด ๋ฐฐํฌ๋ฅผ ์์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.

