Safe-Eye๋ PySlowFast ๋ชจ๋ธ๊ณผ Django ์น ํ๋ ์์ํฌ๋ฅผ ํ์ฉํ ๋น๋์ค ๊ฐ์ ๋ฐ ์ด์ ํ๋ ๊ฐ์ง ์์คํ ์ ๋๋ค. ์ด ํ๋ก์ ํธ๋ CCTV ๋๋ ๋ณด์ ์นด๋ฉ๋ผ์์ ์์ง๋ ๋น๋์ค ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ถ์ํ์ฌ ์ ์ฌ์ ์ธ ์ํ ์ํฉ์ ํ์งํ๊ณ ๋์ํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- Safe Eye - ์ค๋งํธ์์ ๊ฒฝ๊ณ ์๋ ์๋น์ค
- Safe Eye ํ๋ก์ ํธ ERD
Safe Eye๋ CCTV ์นด๋ฉ๋ผ์ AI ๊ธฐ์ ์ ํ์ฉํ์ฌ ๊ณต๊ฐ ์์ ์ ๊ฐํํ๊ณ ์ ๋ง๋ ํ๋ก์ ํธ์ ๋๋ค. ์ปดํจํฐ ๋น์ ๋ฐ ์ธ๊ณต์ง๋ฅ ๊ธฐ์ ์ ํ์ฉํ์ฌ CCTV ์์์ ๋ถ์ํ๊ณ , ์ ์ฌ์ ์ธ ์ํ ์ํฉ์ ์ ์ํ๊ฒ ๊ฐ์งํ์ฌ ๋์ํ ์ ์๋๋ก ์์ ๊ด๋ฆฌ์๋ฅผ ์ง์ํฉ๋๋ค.
-
์ค์๊ฐ ์ด์ ํ๋ ๊ฐ์ง
- CCTV ์์์์ ์ฌ๋๋ค์ ํ๋์ ์ค์๊ฐ์ผ๋ก ๋ถ์ํ์ฌ ์ด์ ํ๋์ ๊ฐ์งํฉ๋๋ค.
- ํญ๋ ฅ, ์ ๋, ๊ธฐ๋ฌผ ํ์ ๋ฑ ๋ค์ํ ์ ํ์ ์ด์ ํ๋์ ์ธ์ํ ์ ์์ต๋๋ค.
- ์ด์ ํ๋ ๋ฐ์ ์ ์ฆ๊ฐ์ ์ธ ์๋์ ๋ฐ์กํ์ฌ ์ ์ํ ๋์์ ์ด์งํฉ๋๋ค.
-
์์ธ ๋ถ์ ํ๋ฉด
- ์ ํํ ์นด๋ฉ๋ผ ๋๋ ์์ญ์ ๊ณ ํด์๋ ๋น๋์ค ํผ๋
- ๊ฐ์ง ์ด๋ฒคํธ ๋ชฉ๋ก ๋ฐ ์์ธ ์ ๋ณด
- ์ฌ์ฉ์ ๋ฉ๋ชจ ๋ฐ ์ค๋ช ์ถ๊ฐ ๊ธฐ๋ฅ
- ๋น๋์ค ํด๋ฆฝ, ์คํฌ๋ฆฐ์ท ๋ฐ ์ด๋ฒคํธ ๋ฐ์ดํฐ ๋ด๋ณด๋ด๊ธฐ
-
๊ฒฝ๊ณ ๋ฐ ์๋ ์ค์ ํ๋ฉด
- ๊ฒฝ๊ณ ๋ฐ ์๋ ์์ค์ ๋ฐ๋ฅธ ํน์ ์์ ์ค์
- ์์ฑํ AI ๋ชจ๋ธ์ ํ์ฉํ ๋งฅ๋ฝ ์ ํฉ ๊ฒฝ๊ณ ๋ฐ ์๋ ๋ฉ์์ง ์๋ ์์ฑ
- ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ์๋ฆผ ๋ฉ์์ง ๋ฐ ์์ ์ ๋ชฉ๋ก
- ์ ๊ธฐ์ ์ธ ํ ์คํธ ๋ฐ ํ๋ จ ์์ฝ ๊ธฐ๋ฅ
-
ํต๊ณ ๋ฐ ๋ณด๊ณ ํ๋ฉด
- ๊ธฐ๊ฐ ๋ณ ์ด๋ฒคํธ์ ๋ํ ์์ธ ๋ณด๊ณ ์ ์์ฑ
- ์ด๋ฒคํธ ๋ฐ์ดํฐ ํํฐ๋ง ๋ฐ ์ ๋ ฌ ์ต์
- ํต๊ณ ๋ฐ์ดํฐ, ์ด๋ฒคํธ ๋ก๊ทธ ๋ฐ ๋ณด๊ณ ์ ๋ด๋ณด๋ด๊ธฐ
- ์๋ ๋ณด๊ณ ์ ์์ฑ ๋ฐ ์ ๋ฌ ์์ฝ ๊ธฐ๋ฅ
-
์ฌ์ฉ์ ๊ด๋ฆฌ ๋ฐ ์ค์ ํ๋ฉด
- ์ฌ์ฉ์ ํ๋กํ ์ ๋ณด ์ ๋ฐ์ดํธ ๋ฐ ์๋ฆผ ๊ธฐ๋ณธ ์ค์
- ์์คํ ์ํ ๋ชจ๋ํฐ๋ง ๋ฐ ์ง๋จ ๋๊ตฌ
- ๊ฐ ์ฌ์ฉ์์ ์คํ ์ดํฐ์ค์ ๋ฐ๋ผ ์๋์ ๋ถ๋ฅ
-
์ค์๊ฐ ์ฑํ ๊ธฐ๋ฅ
- ์ฑํ ๋ฐฉ ์ ์ฅ, ํด์ฅ ์ด๋ฒคํธ ์ฒ๋ฆฌ
- ๋ฉ์์ง ์์ ๋ฐ ์ ์ก ๊ธฐ๋ฅ ๊ตฌํ
- ๋ฐฑ์๋: Django, Pillow, DRF, ์ค์จ๊ฑฐ, NumPy
- ํ๋ก ํธ์๋: Next.js
- ๋จธ์ ๋ฌ๋: TensorFlow, PyTorch
- ์ปดํจํฐ ๋น์ : OpenCV
- ๋ฐ์ดํฐ๋ฒ ์ด์ค: PostgreSQL
- ์ค์๊ฐ ์ฒ๋ฆฌ: Apache Kafka
- DevOps: Docker, Kubernetes
SafeEye ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฆ ๋๋ค.
- ํ๊ฒฝ ์ค๋น:
- ํ๋์จ์ด ์๊ตฌ ์ฌํญ: Ubuntu 18.04, 12th Gen Intel(R) Core(TM) i5 CPU, NVIDIA GeForce RTX 3070 GPU
- ์ํํธ์จ์ด ๋ฐ ๋ชจ๋ ์ค์น: Python 3.9๊ณผ CUDA 11.6 ์ค์น ํ์ํ Python ๋ชจ๋์ requirements.txt์ ์ฌ์ฉํด ์ค์น
- ๋ชจ๋ธ ์ ๋ณด:
- PySlowFast ๋ชจ๋ธ ์ฃผ๋ก ์ด์ ํ๋ ์ธ์์ ์ฌ์ฉ
-
ํ๋ก์ ํธ ์ ์ฅ์ ํด๋ก :
git clone https://github.com/proactive/safe-eye.git cd Safe-eye -
ํ์ํ ์ข ์์ฑ ์ค์น:
source ./venv/Scripts/activate pip install -r requirements.txtor
./commands.sh reinstall -
ํ๊ฒฝ ๋ณ์ ์ค์ :
cp .env.example .env # .env ํ์ผ์ ํธ์งํ์ฌ ํ์ํ ์ค์ ๊ฐ ์ ๋ ฅ -
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์คํ:
python manage.py migrateor
./commands.sh migrate -
Django ์๋ฒ ์คํ:
python manage.py runserver -
Next.js ํ๋ก ํธ์๋ ํ๋ก์ ํธ ๋ ํฌ์งํ ๋ฆฌ:
// git clone git clone https://github.com/team-proactive/safe-eye-front.git cd safe-eye-front cp .env.local.example .env.local npm install npm run dev
-
commands.shํ์ผ์ ์คํํ์ฌ ํ์ํ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์ด ํ์ผ์ Git Bash์์ ์คํํด์ผ ํฉ๋๋ค.- ์ธ์
๋ด์์ ์คํํ๊ณ ๊ฐ์ํ๊ฒฝ์ ์ข
๋ฃํ๋ ค๋ฉด
./commands.sh๋ฅผ ์ ๋ ฅํฉ๋๋ค. - ์ธ์
์ด ์ข
๋ฃ๋๋๋ผ๋ ๊ฐ์ํ๊ฒฝ์ ์ ์งํ๋ ค๋ฉด
. commands.sh๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ์ธ์
๋ด์์ ์คํํ๊ณ ๊ฐ์ํ๊ฒฝ์ ์ข
๋ฃํ๋ ค๋ฉด
-
๊ฐ์ ํ๊ฒฝ์ ์์ฑํ๊ณ ํ์ฑํํ๋ ค๋ฉด
reinstall์ปค๋งจ๋๋ฅผ ์คํํฉ๋๋ค. ์ถ๊ฐ๋ก ์ค์นํ ํจํค์ง๋ฅผ ์ ๋ ฅํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด ํ์ํ ํจํค์ง๋ฅผ ์ ๋ ฅํ๊ฑฐ๋ ์ํฐ๋ฅผ ๋๋ฌ ๊ฑด๋๋ธ ์ ์์ต๋๋ค. -
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํํ๋ ค๋ฉด
migrate์ปค๋งจ๋๋ฅผ ์คํํฉ๋๋ค. -
ํ๋ก์ ํธ๋ฅผ ์คํํ๋ ค๋ฉด
run์ปค๋งจ๋๋ฅผ ์คํํฉ๋๋ค.
install: ์ด๊ธฐ ์ค์น๋ฅผ ์ํํฉ๋๋ค. ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ๊ณ Django ํ๋ก์ ํธ์ ์ฑ์ ์์ฑํฉ๋๋ค.activate: ๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํฉ๋๋ค.migrate: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํํฉ๋๋ค.run: Django ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์คํํฉ๋๋ค.create: static, media, templates ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.static: static ํ์ผ์ ์์งํฉ๋๋ค.reinstall: ๊ฐ์ ํ๊ฒฝ์ ์ฌ์ค์นํ๊ณrequirements.txt์ ๋ช ์๋ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.remove: ๊ฐ์ ํ๊ฒฝ์ ์ ๊ฑฐํฉ๋๋ค.add_admin: ๊ด๋ฆฌ์ ๊ณ์ ์ ์์ฑํฉ๋๋ค.mock_data: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํฉ๋๋ค.
mock_data ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค. ์ด ๋ฐ์ดํฐ๋ ๊ฐ ์ฑ์ fixtures/initial_data.json ํ์ผ์ ์ ์๋์ด ์์ต๋๋ค.
๋ชจ๋ธ์ ๋ณ๊ฒฝํ ํ์๋ ์์ ํ๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ญ์ ํ๊ณ , AI๋ฅผ ํ์ฉํ์ฌ ํด๋น ๋ชจ๋ธ์ ๋ํ initial_data.json ํ์ผ์ ์์ฑํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ mock_data ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํฉ๋๋ค.
๐ฆsafe-eye
โฃ ๐config
โ โฃ ๐asgi.py
โ โฃ ๐settings.py
โ โฃ ๐urls.py
โ โ ๐wsgi.py
โฃ ๐accounts
โ โฃ ๐admin.py
โ โฃ ๐apps.py
โ โฃ ๐models.py
โ โฃ ๐serializers.py
โ โฃ ๐tests.py
โ โฃ ๐urls.py
โ โ ๐views.py
โฃ ๐alarm
โ โฃ ๐fixtures
โ โ โฃ ๐initial_data.json
โ โ โ ๐mock_data_gen.py
โ โฃ ๐admin.py
โ โฃ ๐apps.py
โ โฃ ๐models.py
โ โฃ ๐serializers.py
โ โฃ ๐tests.py
โ โฃ ๐urls.py
โ โ ๐views.py
โฃ ๐notice
โ โฃ ๐fixtures
โ โ โฃ ๐initial_data.json
โ โ โ ๐mock_data_gen.py
โ โฃ ๐admin.py
โ โฃ ๐apps.py
โ โฃ ๐models.py
โ โฃ ๐serializers.py
โ โฃ ๐tests.py
โ โฃ ๐urls.py
โ โ ๐views.py
โฃ ๐madia
โ โฃ ๐fixtures
โ โ โฃ ๐initial_data.json
โ โ โ ๐mock_data_gen.py
โ โฃ ๐admin.py
โ โฃ ๐apps.py
โ โฃ ๐models.py
โ โฃ ๐serializers.py
โ โฃ ๐tests.py
โ โฃ ๐urls.py
โ โ ๐views.py
โฃ ๐utils
โ โฃ ๐fixtures
โ โ โ ๐initial_data.json
โ โฃ ๐migrations
โ โฃ ๐admin.py
โ โฃ ๐apps.py
โ โฃ ๐mixins.py
โ โฃ ๐models.py
โ โฃ ๐serializers.py
โ โฃ ๐tests.py
โ โฃ ๐urls.py
โ โฃ ๐views.py
โฃ ๐chat
โ โฃ ๐__pycache__
โ โฃ ๐migrations
โ โฃ ๐__iniit__.py
โ โฃ ๐admin.py
โ โฃ ๐apps.py
โ โฃ ๐models.py
โ โฃ ๐serializers.py
โ โฃ ๐tests.py
โ โฃ ๐urls.py
โ โฃ ๐views.py
โฃ ๐.env
โฃ ๐.env.example
โฃ ๐.gitignore
โฃ ๐a-team.png
โฃ ๐commands.sh
โฃ ๐manage.py
โฃ ๐README.md
โ ๐requirements.txt
-
accounts ์ฑ:
- ์ปค์คํ ์ ์ ๋ชจ๋ธ์ ์ ์ํ๊ณ ๊ด๋ฆฌํ๋ ์ฑ์ ๋๋ค.
- ์ฌ์ฉ์ ์ธ์ฆ, ํ์๊ฐ์ , ๋ก๊ทธ์ธ ๋ฑ์ ๊ธฐ๋ฅ์ ๋ด๋นํฉ๋๋ค.
- ์ฌ์ฉ์ ์ ๋ณด ๊ด๋ จ API ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
-
utils ์ฑ:
- ์ฌ๋ฌ ์ฑ์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ ํธ๋ฆฌํฐ ๋ชจ๋์ ๋ชจ์๋ ์ฑ์ ๋๋ค.
- ํ๊ทธ, ์ํ ๋ฑ์ ์์ ๊ฐ์ ์ ์ํ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
- ๋ฏน์ค์ธ(Mixin) ํด๋์ค๋ฅผ ์ ๊ณตํ์ฌ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋์ ๋๋ค.
-
media ์ฑ:
- AI ๋ชจ๋ธ์ ์ถ๋ ฅ๊ฐ(์ด๋ฏธ์ง)์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ์ฑ์ ๋๋ค.
- ๋ถ์๋ ์ด๋ฏธ์ง ํ์ผ์ ์ ์ฅํ๊ณ ์๋นํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ์ด๋ฏธ์ง ์ ๋ก๋, ๋ค์ด๋ก๋ ๋ฑ์ API ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
-
alarm ์ฑ:
- ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์ฑ์ ๋๋ค.
- ์ด์ ํ๋ ๊ฐ์ง ์ ์๋์ ๋ฐ์กํ๋ ๊ธฐ๋ฅ์ ๋ด๋นํฉ๋๋ค.
- ์๋ ์ค์ , ์๋ ๋ก๊ทธ ๊ด๋ฆฌ ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
-
notice ์ฑ:
- ๊ณต์ง์ฌํญ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ์ฑ์ ๋๋ค.
- ์์คํ ๊ด๋ฆฌ์๊ฐ ์ฌ์ฉ์์๊ฒ ๊ณต์ง์ฌํญ์ ์ ๋ฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๊ณต์ง์ฌํญ ๋ชฉ๋ก, ์์ธ ๋ณด๊ธฐ, ์์ฑ, ์์ , ์ญ์ ๋ฑ์ API ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
-
ai ์ฑ:
- AI ๋ชจ๋ธ์ ํ์ฉํ์ฌ ์์ ๋ถ์์ ์ํํ๋ ์ฑ์ ๋๋ค.
- CCTV ์์์ ์ค์๊ฐ์ผ๋ก ๋ถ์ํ๊ณ ์ด์ ํ๋์ ๊ฐ์งํ๋ ๊ธฐ๋ฅ์ ๋ด๋นํฉ๋๋ค.
- AI ๋ชจ๋ธ ์ถ๋ก , ๊ฒฐ๊ณผ ์ ์ฅ, ์๋ ์์ฑ ๋ฑ์ ์์ ์ ์ํํฉ๋๋ค.
-
chat ์ฑ:
- ์ค์๊ฐ ์ฑํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ฑ์ ๋๋ค.
- ์ฑํ ๋ฐฉ ์์ฑ, ๋ฉ์์ง ์ ์ก, ์ฑํ ๋ฐฉ ์ฐธ์ฌ ๋ฑ์ ๊ธฐ๋ฅ์ ๋ด๋นํฉ๋๋ค.
- WebSocket์ ํ์ฉํ์ฌ ์ค์๊ฐ ์๋ฐฉํฅ ํต์ ์ ๊ตฌํํฉ๋๋ค.
- ์ฑํ ๊ด๋ จ API ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
fixtures ๋๋ ํ ๋ฆฌ๋ ์ด๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ธฐ ์ํ JSON ํ์ผ์ ํฌํจํฉ๋๋ค.
- id: AutoField, ํ๊ทธ์ ๊ณ ์ ์๋ณ์
- tag_type: CharField, ํ๊ทธ์ ์ ํ
- tag_content: CharField, ํ๊ทธ์ ๋ด์ฉ
- content_type: ForeignKey, ์ฐ๊ฒฐ๋ ๋ชจ๋ธ์ ContentType
- object_id: PositiveIntegerField, ์ฐ๊ฒฐ๋ ๋ชจ๋ธ์ ๊ฐ์ฒด id
- content_object: GenericForeignKey, ์ฐ๊ฒฐ๋ ๋ชจ๋ธ์ ๊ฐ์ฒด
- available: BooleanField, ์ํ์ ์ ํจ์ฑ ์ฌ๋ถ
- content_type: ForeignKey, ์ฐ๊ฒฐ๋ ๋ชจ๋ธ์ ContentType
- object_id: PositiveIntegerField, ์ฐ๊ฒฐ๋ ๋ชจ๋ธ์ ๊ฐ์ฒด id
- content_object: GenericForeignKey, ์ฐ๊ฒฐ๋ ๋ชจ๋ธ์ ๊ฐ์ฒด
- created_at: DateTimeField, ์ํ ์์ฑ ์๊ฐ
- updated_at: DateTimeField, ์ํ ์ ๋ฐ์ดํธ ์๊ฐ
- tags: GenericRelation, Tag ๋ชจ๋ธ๊ณผ์ ๊ด๊ณ
- status: GenericRelation, Status ๋ชจ๋ธ๊ณผ์ ๊ด๊ณ
- AbstractUser ๋ชจ๋ธ์ ์์๋ฐ์ ๊ตฌํ
- profile_picture: ImageField, ์ฌ์ฉ์ ํ๋กํ ์ฌ์ง
- profile_message: TextField, ์ฌ์ฉ์ ํ๋กํ ๋ฉ์์ง
- profile_status: GenericRelation, StatusMixin์ ํตํด Status ๋ชจ๋ธ๊ณผ ๊ด๊ณ (์ถ๊ฐ)
- id: AutoField, ๊ณต์ง์ฌํญ์ ๊ณ ์ ์๋ณ์
- title: CharField, ๊ณต์ง์ฌํญ ์ ๋ชฉ
- content: TextField, ๊ณต์ง์ฌํญ ๋ด์ฉ
- created_at: DateTimeField, ๊ณต์ง์ฌํญ ์์ฑ ์๊ฐ
- updated_at: DateTimeField, ๊ณต์ง์ฌํญ ์ ๋ฐ์ดํธ ์๊ฐ
- id: AutoField, ์๋์ ๊ณ ์ ์๋ณ์
- alarm_type: CharField, ์๋ ์ ํ (์ด์ ํ๋, ์ํ ์ํฉ ๋ฑ)
- alarm_content: TextField, ์๋ ๋ด์ฉ
- created_at: DateTimeField, ์๋ ์์ฑ ์๊ฐ
- updated_at: DateTimeField, ์๋ ์ ๋ฐ์ดํธ ์๊ฐ
- user: ForeignKey, ์๋๊ณผ ์ฐ๊ฒฐ๋ ์ฌ์ฉ์ (CustomUser ๋ชจ๋ธ๊ณผ ์ฐ๊ฒฐ)
- id: AutoField, ๋ถ์ ๊ฒฐ๊ณผ์ ๊ณ ์ ์๋ณ์
- video: FileField, ๋ถ์ ๋์ ๋น๋์ค ํ์ผ
- result_image: ImageField, ๋ถ์ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง
- analysis_type: CharField, ๋ถ์ ์ ํ (์ด์ ํ๋, ๊ฐ์ฒด ์ธ์ ๋ฑ)
- created_at: DateTimeField, ๋ถ์ ๊ฒฐ๊ณผ ์์ฑ ์๊ฐ
- updated_at: DateTimeField, ๋ถ์ ๊ฒฐ๊ณผ ์ ๋ฐ์ดํธ ์๊ฐ
- user: ForeignKey, ๋ถ์ ๊ฒฐ๊ณผ์ ์ฐ๊ฒฐ๋ ์ฌ์ฉ์ (CustomUser ๋ชจ๋ธ๊ณผ ์ฐ๊ฒฐ)
- ์ฑํ ๋ฐฉ์ ๋ํ๋ด๋ ๋ชจ๋ธ
- name: CharField, ์ฑํ ๋ฐฉ ์ด๋ฆ
- users: ManyToManyField, ์ฑํ ๋ฐฉ์ ์ฐธ์ฌํ๋ ์ฌ์ฉ์๋ค๊ณผ์ ๋ค๋๋ค ๊ด๊ณ
- created_at: DateTimeField, ์ฑํ ๋ฐฉ ์์ฑ ์๊ฐ
- ์ฑํ ๋ฉ์์ง๋ฅผ ๋ํ๋ด๋ ๋ชจ๋ธ
- room: ForeignKey, ๋ฉ์์ง๊ฐ ์ํ ์ฑํ ๋ฐฉ๊ณผ์ ์ธ๋ํค ๊ด๊ณ
- sender: ForeignKey, ๋ฉ์์ง๋ฅผ ๋ณด๋ธ ์ฌ์ฉ์์์ ์ธ๋ํค ๊ด๊ณ
- content: TextField, ๋ฉ์์ง ๋ด์ฉ
- timestamp: DateTimeField, ๋ฉ์์ง ์ ์ก ์๊ฐ
- WebSocket์ ํตํ ์ค์๊ฐ ์ฑํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ์ปจ์๋จธ
- WebSocket ์ฐ๊ฒฐ ์๋ฆฝ, ํด์ ์ด๋ฒคํธ ์ฒ๋ฆฌ
- ์ฑํ ๋ฐฉ ์ ์ฅ, ํด์ฅ ์ด๋ฒคํธ ์ฒ๋ฆฌ
- ๋ฉ์์ง ์์ ๋ฐ ์ ์ก ๊ธฐ๋ฅ ๊ตฌํ
ERD๋ ํ์ฌ ๊ณ ๋ฏผ ์ค์ ๋๋ค.
classDiagram
class Tag {
+AutoField id
+CharField tag_type
+CharField tag_content
+ForeignKey content_type
+PositiveIntegerField object_id
+GenericForeignKey content_object
}
class Status {
+BooleanField available
+ForeignKey content_type
+PositiveIntegerField object_id
+GenericForeignKey content_object
+DateTimeField created_at
+DateTimeField updated_at
}
class TagMixin {
+GenericRelation tags
}
class StatusMixin {
+GenericRelation status
}
class CustomUser {
+ImageField profile_picture
+CharField profile_status
+TextField profile_message
+GenericRelation status
}
class Notice {
+AutoField id
+CharField title
+TextField content
+DateTimeField created_at
+DateTimeField updated_at
}
class Alarm {
+AutoField id
+CharField alarm_type
+TextField alarm_content
+DateTimeField created_at
+DateTimeField updated_at
+ForeignKey user
}
class AnalysisResult {
+AutoField id
+FileField video
+ImageField result_image
+CharField analysis_type
+DateTimeField created_at
+DateTimeField updated_at
+ForeignKey user
}
CustomUser --|> AbstractUser
CustomUser --|> StatusMixin
CustomUser "1" --> "*" Alarm
CustomUser "1" --> "*" AnalysisResult
- Alarm ๋ชจ๋ธ์ ์๋์ ์ ํ, ๋ด์ฉ, ์์ฑ/์ ๋ฐ์ดํธ ์๊ฐ ๋ฑ์ ํ๋๋ฅผ ๊ฐ์ง๋ฉฐ, CustomUser ๋ชจ๋ธ๊ณผ ์ธ๋ ํค๋ก ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
- AnalysisResult ๋ชจ๋ธ์ ๋ถ์ ๋์ ๋น๋์ค ํ์ผ, ๋ถ์ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง, ๋ถ์ ์ ํ, ์์ฑ/์ ๋ฐ์ดํธ ์๊ฐ ๋ฑ์ ํ๋๋ฅผ ๊ฐ์ง๋ฉฐ, CustomUser ๋ชจ๋ธ๊ณผ ์ธ๋ ํค๋ก ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
- tag์ status๋ user๋ ์ด๋ฒคํธ์ ์ฐ์ผ ์ ์์ต๋๋ค.
notice ์ฑ์ ์ด ํ๋ก์ ํธ์ ์์ ์ฑ์
๋๋ค. ์ด ์ฑ์ ๊ณต์ง์ฌํญ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๋ชจ๋ธ๊ณผ ๋ทฐ, ์๋ฆฌ์ผ๋ผ์ด์ ๋ฑ์ด ๊ตฌํ๋์ด ์์ต๋๋ค.
์ด ์ฑ์ ๋ชจ๋ธ๊ณผ API ์๋ํฌ์ธํธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋ค๋ฅธ ์ฑ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
