Rocket.Chat์์ ์๊ฐ์ ๋ฐ์ ๋ง๋ ์ค์๊ฐ ๋ฉ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
- ์ค์๊ฐ ์ฑํ : WebSocket์ ์ฌ์ฉํ ์ค์๊ฐ ๋ฉ์์ง ์ ์ก
- ๋ค์ค ์ฑ๋: ์ฌ๋ฌ ์ฑ๋์ ์์ฑํ๊ณ ์ ํํ ์ ์์ต๋๋ค
- ์ฌ์ฉ์ ๊ด๋ฆฌ: ์จ๋ผ์ธ ์ฌ์ฉ์ ๋ชฉ๋ก ํ์ธ
- ์ง๊ด์ ์ธ UI: Rocket.Chat ์คํ์ผ์ ๋ชจ๋ํ ์ธํฐํ์ด์ค
- ์์คํ ๋ฉ์์ง: ์ฌ์ฉ์ ์ ์ฅ/ํด์ฅ ์๋ฆผ
- ๋ฉ์์ง ํ์คํ ๋ฆฌ: ์ด์ ๋ฉ์์ง ๊ธฐ๋ก ์กฐํ
- FastAPI: ํ๋์ ์ธ Python ์น ํ๋ ์์ํฌ
- WebSocket: ์ค์๊ฐ ์๋ฐฉํฅ ํต์
- Pydantic: ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ฐ ๋ชจ๋ธ๋ง
- Uvicorn: ASGI ์๋ฒ
- HTML5/CSS3: ๋ชจ๋ ์น ํ์ค
- JavaScript (Vanilla): ์์ ์๋ฐ์คํฌ๋ฆฝํธ
- WebSocket API: ์ค์๊ฐ ํต์
- Python 3.8 ์ด์
- pip (Python ํจํค์ง ๊ด๋ฆฌ์)
pip install -r requirements.txt
python main.py
๋๋ uvicorn์ผ๋ก ์ง์ ์คํ:
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
http://localhost:8000
python_test/
โโโ main.py # FastAPI ๋ฉ์ธ ์๋ฒ
โโโ models.py # ๋ฐ์ดํฐ ๋ชจ๋ธ (Pydantic)
โโโ requirements.txt # Python ์์กด์ฑ
โโโ README.md # ํ๋ก์ ํธ ๋ฌธ์
โโโ static/ # ์ ์ ํ์ผ
โโโ index.html # ๋ฉ์ธ HTML
โโโ style.css # ์คํ์ผ์ํธ
โโโ app.js # ํด๋ผ์ด์ธํธ JavaScript
- ๋ก๊ทธ์ธ: ์ฌ์ฉ์ ์ด๋ฆ์ ์ ๋ ฅํ๊ณ "์ ์ฅํ๊ธฐ" ํด๋ฆญ
- ์ฑ๋ ์ ํ: ์ผ์ชฝ ์ฌ์ด๋๋ฐ์์ ์ฑ๋์ ํด๋ฆญํ์ฌ ์ด๋
- ๋ฉ์์ง ์ ์ก: ํ๋จ ์ ๋ ฅ์ฐฝ์ ๋ฉ์์ง๋ฅผ ์ ๋ ฅํ๊ณ ์ ์ก
- ์ ์ฑ๋ ๋ง๋ค๊ธฐ: "+" ๋ฒํผ์ ํด๋ฆญํ์ฌ ์ ์ฑ๋ ์์ฑ
GET /: ๋ฉ์ธ ํ์ด์งGET /api/channels: ๋ชจ๋ ์ฑ๋ ๋ชฉ๋ก ์กฐํPOST /api/channels: ์ ์ฑ๋ ์์ฑGET /api/channels/{channel_name}/messages: ์ฑ๋์ ๋ฉ์์ง ์กฐํGET /api/users: ๋ชจ๋ ์ฌ์ฉ์ ์กฐํ
WS /ws/{channel_name}/{username}: ์ค์๊ฐ ์ฑํ ์ฐ๊ฒฐ
- TEXT: ์ผ๋ฐ ํ ์คํธ ๋ฉ์์ง
- SYSTEM: ์์คํ ๋ฉ์์ง
- JOIN: ์ฌ์ฉ์ ์ ์ฅ ๋ฉ์์ง
- LEAVE: ์ฌ์ฉ์ ํด์ฅ ๋ฉ์์ง
WebSocket์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์ฆ์ ๋ฉ์์ง๊ฐ ์ ๋ฌ๋ฉ๋๋ค.
์ฌ๋ฌ ์ฑ๋์ ๋ง๋ค๊ณ ์์ ๋กญ๊ฒ ์ ํํ ์ ์์ต๋๋ค. ๊ฐ ์ฑ๋์ ๋ ๋ฆฝ์ ์ธ ๋ํ ๊ณต๊ฐ์ ๋๋ค.
ํ์ฌ ๋ฒ์ ์ ์ธ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ฒ ์ฌ์์ ์ ๋ฐ์ดํฐ๊ฐ ์ด๊ธฐํ๋ฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ (MongoDB, PostgreSQL)
- ์ฌ์ฉ์ ์ธ์ฆ (JWT)
- ํ์ผ ์ ๋ก๋ ๊ธฐ๋ฅ
- ํ๋ผ์ด๋น ๋ฉ์์ง (DM)
- ๋ฉ์์ง ๊ฒ์ ๊ธฐ๋ฅ
- ์ด๋ชจ์ง ๋ฐ ๋ฆฌ์ก์ ์ง์
- ์๋ฆผ ๊ธฐ๋ฅ
- ๋ชจ๋ฐ์ผ ๋ฐ์ํ ๋์์ธ ๊ฐ์
MIT License
์ด ํ๋ก์ ํธ๋ Rocket.Chat์์ ์๊ฐ์ ๋ฐ์์ต๋๋ค.
๋ฒ๊ทธ ๋ฆฌํฌํธ, ๊ธฐ๋ฅ ์ ์, Pull Request๋ฅผ ํ์ํฉ๋๋ค!
์ง๋ฌธ์ด๋ ์ ์์ฌํญ์ด ์์ผ์๋ฉด ์ด์๋ฅผ ์์ฑํด์ฃผ์ธ์.