์ํฌํ๋ก์ฐ ์์ง ๊ฐ๋ฐ ํ๋ก์ ํธ์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค! ์ด ํ๋ก์ ํธ๋ ๊ฐ ์์ ์ ์์กด์ฑ์ผ๋ก ๋ฌถ์ด์ ์์๋๋ก ์คํ์ํค๋ ์ํฌํ๋ก์ฐ๋ฅผ ๊ตฌํํ๋ ๋ฐ ์ค์ ์ ๋๊ณ ์์ต๋๋ค. ๋ํ ๊ฐ ์์ ์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์์ ๋์ปค ์ปจํ ์ด๋๋ฅผ ์คํ์ํค๋ ์์ ์ ์ํํฉ๋๋ค. ์ด ํ๋ก์ ํธ๋ ์ค์ผ์ค๋ง ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์ํฌํ๋ก์ฐ๋ฅผ ์์ฝ ์คํํ๊ณ ์ฃผ๊ธฐ์ฑ์ ์ค์ ํ์ฌ ๋ฐ๋ณต ์คํํ๋ ๊ธฐ๋ฅ๋ ์ง์ํฉ๋๋ค.
- ์ํฌํ๋ก์ฐ ์ ์: ๊ฐ ์์ ์ ์ ์ํ๊ณ ์์กด์ฑ์ผ๋ก ๋ฌถ์ด ํ๋์ ์ํฌํ๋ก์ฐ๋ก ์ ์ํ๋ค.
- ์ํฌํ๋ก์ฐ ์คํ: ๊ตฌ์ฑํ ์ํฌํ๋ก์ฐ์ ๋ฐ๋ผ ๊ฐ ์์ ์ ์์๋๋ก ์คํํ๋ค.
- ๋์ปค ์ปจํ ์ด๋ ์คํ: ๊ฐ ์์ ์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์์ ๋์ปค ์ปจํ ์ด๋๋ฅผ ์คํํ๋ค.
- ์ค์ผ์ค๋ง ๊ธฐ๋ฅ: ์์ฝ ์คํ ๋ฐ ์ฃผ๊ธฐ์ ์ธ ๋ฐ๋ณต ์คํ์ด ๊ฐ๋ฅํ ์ค์ผ์ค๋ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
|
|
|
|
|
| ์ต๊ธฐ์ฉ | ํ๋ฏผ์ | ์ด์งํ | ์ค์ ์ฌ(๋ฉํ ) |
์ ๋ฌด ๊ด๋ฆฌ๋ Jira๋ฅผ ์ฌ์ฉํ์ผ๋ฉฐ, ์ ์์ผ ๋ฐฉ๋ฒ๋ก ์ค ์คํฌ๋ผ(์คํ๋ฆฐํธ) ๋ฐฉ์์ผ๋ก ์งํํ์ต๋๋ค.
ํ๋ก์ ํธ๋ฅผ ์์ํ๋๋ฐ ์๊ฐ์ด ์ ํ์ ์ด๊ณ , ๋น ๋ฅธ์๊ฐ ๋ด์ ํ๋ก์ ํธ๋ฅผ ํจ์จ์ ์ผ๋ก ๋ง๋ฌด๋ฆฌํ๊ธฐ ์ํด ์ ์์ผ ๋ฐฉ๋ฒ๋ก ์ค ์คํฌ๋ผ ๋ฐฉ์์ ์ ์ฉํด ์ฌ๋ฌ ์คํ๋ฆฐํธ ๊ธฐ๊ฐ์ ๊ฑฐ์ณค์ต๋๋ค.
- ๋ฆฌ๋ทฐ & ํ๋๋ : 2์ผ(๊ฐ 1์ผ)
- ์์ ๊ธฐ๊ฐ : 2์ฃผ
- ๊ธฐ๊ฐ์ ๊ณ ์ ๋์ด ์์ง ์์ผ๋ฉฐ ์ ๋์ ์ด๋ค.
- ์คํ ๋ ์ ๋ฏธํ : ๋งค์ผ ์ค์ 10์
๋ฌธ์ ์ ๋ฆฌ๋ Notion์ ์ฌ์ฉํ์ต๋๋ค.
์ฌ์ฉ์์ ํ์์ ๋ฐ๋ผ ์์ ๋กญ๊ฒ ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๊ณ ์ปค์คํฐ๋ง์ด์งํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํด ์ฌ์ฉ์ฑ์ด ์ข๊ณ , ์ค์๊ฐ์ผ๋ก ํ์๋ค๊ณผ ๋ฌธ์๋ฅผ ๊ณต์ ํ๊ณ ํธ์งํ ์ ์๋ค๋ ์ ์ด ํ์ ๋๊ตฌ๋ก์จ ์ ์ฉํ๋ค๊ณ ํ๋จํ์ฌ ์ ํํ์ต๋๋ค.
Slack์ผ๋ก ์งํํ๊ณ ์ ํ์ผ๋, ์ํธ ๊ฐ ํผ๋๋ฐฑ์ด ๋๋ฆฌ๊ณ ๋ฏธํ ์ ํ์ผ๋ก ์ธํด ๊ฐ์ฅ ์ต์ํ Discord๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
๋ฉ์์ง ๊ธฐ๋ก, ์ฑ๋ ๋ฐ ์ค๋ ๋๋ฅผ ํตํ ์ฃผ์ ๋ณ ํ ๋ก , ์ผํ์ฑ ํ์๋ฟ๋ง ์๋๋ผ ํ๋ก์ ํธ์ ์ ์ฒด๊ธฐ๊ฐ ๋์ ์ง์์ ์ธ ์ปค๋ฎค๋์ผ์ด์ ์ด ๊ฐ๋ฅํด ์ ํํ์ต๋๋ค.
๋ธ๋์น ์ ๋ต์ GitHub Flow ์ ๋ต์ ์ ์ฉํ์ต๋๋ค.
ํด๋น ํ๋ก์ ํธ๊ฐ ๊ธฐ๊ฐ์ด ์ ํด์ง ์๊ท๋ชจ ํ๋ก์ ํธ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ์์ฐ์๋๋ฅผ ์ํด์ ๊ธฐ๋ฅ๋ณ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ master ๋ธ๋์น์ ๊ณง๋ฐ๋ก merge ํ๋ GitHub Flow ์ ๋ต์ ์ฌ์ฉํ์ต๋๋ค.
์ฃผ๊ธฐ์ ์ผ๋ก ๋ฉํ ๋ง๊ณผ ํํ์๋ฅผ ์ด์๊ณ , ์ด๋ฅผ ํ์๋ก์ผ๋ก ๋จ๊ฒผ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ์คํฐ๋๋ฅผ ๊ฐ์ตํ์ต๋๋ค.
- ์์์ผ ์คํ 9์
- ํ์์ผ ์ค์ 10์
- ๋ฉํ ๋ง ์ดํ ์ ๋ฆฌ ํ์
- ์์์ผ ์คํ 2์
- ๋ฉํ ๋ง ๋ฐํ ์ ํ์
- ๊ต์ฌ
- ํ์ด์ฌ ์ฝ๋ฉ์ ๊ธฐ์ ๊ฐ์ 2ํ (Effective Python 2nd)
- ๋ถ๋
- ์ฃผ๋น 1 ์ฑํฐ์ฉ ์งํ
- ์คํฐ๋ ์๊ฐ
- ํ์์ผ ์ค์ 11์
- ๋ฐํ์ ๋กํ ์ด์
Jenkins ๋ฐ Airflow ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ , ์ด๋ค ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ ์ง ์ถ์ถํ๋ค.
- Jenkins ๋ฐ Airflow ๊ธฐ๋ฅ์ ๋ถ์ํ๊ณ ๋ฌธ์๋ก ์์ฑํ๋ค.
- Jenkins ๋ฐ Airflow ์์ ๋ฅผ ์ค์ตํ๋ค.
- ์ํฌํ๋ก์ฐ ์์ง ๊ฐ๋ฐ์ ์ํ ์๊ตฌ์ฌํญ์ ์์ฑํ๋ค.
๊ธฐ๋ฅ ์๊ตฌ์ฌํญ์ ํ์ ํ๊ณ , ์ค๊ณ๋ฅผ ์์ํ๋ค.
- Docker ์ค์ต์ ์งํํ๋ค.
- ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ์ ํ์ ํ๋ค.
์ค๊ณ ๋ฐ ๊ฐ๋ฐ์ค๋น๋ฅผ ์๋ฃํ๋ค.
- ์ค๊ณ๋ฅผ ์งํํ๋ค.
- ์ธํ๋ผ์คํธ๋ญ์ฒ ์ค๊ณ๋๋ฅผ ์์ฑํ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ์ ํ์ ํ๋ค.
- Celery๋ฅผ ๊ณต๋ถํ๋ค.
- ๋ฆฌํฌ์งํ ๋ฆฌ ํจํด์ ๊ณต๋ถํ๋ค.
- ๊ฒฐ์ ๋ ์ปดํฌ๋ํธ์ ๊ฐ๋ฐํ๊ฒฝ์ ์ธํ
ํ๋ค.
์ค๊ณ๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ณ ์ฝ์ด ๋ก์ง์ ์์ฑํ๋ค.
- ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ธํ
ํ๋ค.
- ์ฅ๊ณ ํ๋ก์ ํธ๋ฅผ ์ธํ
ํ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ธํ
ํ๋ค.
- ๋ฆฌํฌ์งํ ๋ฆฌ ํจํด์ ์ ์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ์ด์ด๋ฅผ ๋ถ๋ฆฌํ๋ค.
- Redis ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
- Celery worker๋ฅผ ๋์ฐ๋ ๋ก์ง์ ์์
ํ๋ค.
- ๊น ๋๋ ํฐ๋ฆฌ ๋ฆฌํฉํฐ๋ง ์์
์ ์งํํ๋ค.
์ํฌํ๋ก์ฐ ์คํ ๋ก์ง์ ํ์ ํ๋ค.
- ์ํฌํ๋ก์ฐ ์คํ ๋ก์ง์ ์ ๋ฆฌํ๋ค.
์ํฌํ๋ก์ฐ CRUD์ ์คํ ๋ก์ง์ ๊ตฌํํ๋ค.
- ์ํฌํ๋ก์ฐ CRUD API๋ฅผ ๊ฐ๋ฐํ๋ค.
- ์ํฌํ๋ก์ฐ ์คํ API๋ฅผ ๊ตฌํํ๋ค.
- job์ ์ํํ๋ ๋ก์ง์ ๊ตฌํํ๋ค.
- job ์์กด์ฑ ๊ด๋ จ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ค.
MVP1 ๋ฆฌํฉํฐ๋ง์ ์งํํ๋ค.
- ๊ฐ์ฒด ์งํฅ 5์์น(SOLID)์ ๊ดํด ๊ณต๋ถํ๋ค.
- ํ์ด์ฌ GIL ๋ฐ ๋ถ์ฐ Lock ์ ๋ํด์ ๊ณต๋ถํ๋ค.
- Redis lock์ ์ ์ฉํ๋ ๋ก์ง์ ๊ตฌํํ๋ค.
- Docker ์ปจํ
์ด๋์ ํ๊ฒฝ๋ณ์ ์ ์ฉ ๋ก์ง์ ๊ตฌํํ๋ค.
- MVP1 ๋ฆฌํฉํฐ๋ง ์ ๋ฐ์ํ๋ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ค.
- ์ํ import ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- HistoryRepository ์ update_history_status() ๋ฉ์๋๋ฅผ ์์ ํ๋ค.
- update_workflow() ๋ฉ์๋์ @transaction ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค.
- CRUD API ๊ด๋ จ ๋ฆฌํฉํฐ๋ง์ ์งํํ๋ค.
- ์ํฌํ๋ก์ฐ Read API์ ์๋ฌ๋ฅผ ์์ ํ๋ค.
- ์ํฌํ๋ก์ฐ Update API์ ์๋ฌ๋ฅผ ์์ ํ๋ค.
- ์ํฌํ๋ก์ฐ Delete API ์์ฒญ ์์ ๋ฐ์ํ๋ ์๋ฌ๋ฅผ ์์ ํ๋ค.
- ์ํฌํ๋ก์ฐ Delete API์ ์คํจ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๋ฆฌํฉํฐ๋งํ๋ค.
- ์ํฌํ๋ก์ฐ CRUD API ๋ทฐ ํด๋์ค๋ฅผ ํ๋๋ก ํตํฉํ๋ค.
- ์ํฌํ๋ก์ฐ CRUD API์ serialize ๊ณผ์ ์ ๋ฆฌํฉํฐ๋งํ๋ค.
- ์ํฌํ๋ก์ฐ์ ์์ ๋ ๋ฐ์ดํฐ์ ๊ธฐ๋ฐํ์ฌ depends_count๊ฐ ๋ณ๊ฒฝ๋๋๋ก ๋ก์ง์ ์์ ํ๋ค.
- Job ํ
์ด๋ธ์ parameters, next_job_names ํ๋๋ฅผ JSON์ผ๋ก ํ์ฑํ๋ค.
- Job ํ
์ด๋ธ์ next_job_names ํ๋๋ฅผ JSON์ผ๋ก ํ์ฑํ๋ ์๋ฌ๋ฅผ ์์ ํ๋ค.
- job ์คํ ๋ก์ง๊ณผ job ์์กด์ฑ ๊ด๋ จ ๋ก์ง์ ๋ถ๋ฆฌํ๋ค.
- job์ timeout ๋ฐ retry ์ต์
๊ฐ ์ค์ ์ ๊ตฌํํ๋ค.
- job์ด ์คํจ ์ฒ๋ฆฌ๋์์ ๊ฒฝ์ฐ ํด๋น ์ํฌํ๋ก์ฐ์ ์คํ์ค์ธ job๋ค๋ ๋ชจ๋ ์ข
๋ฃํ๋ ๋ก์ง์ผ๋ก ์์ ํ๋ค.
์ค์ผ์ค๋ง ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ค.
- ์ค์ผ์ค๋ง ์คํ ๋ก์ง์ ํ์ ๋ฐ ๊ตฌํํ๋ค.
- ์ค์ผ์ค๋ง ์คํ API๋ฅผ ๊ตฌํํ๋ค.
- ์ค์ผ์ค๋ง DB ๋ชจ๋ธ์ ํ์ ๋ฐ ์์ ํ๋ค.
- ์ค์ผ์ค๋ง DB์์ is_active ํ๋์ default ์ต์
๊ฐ์ ์์ ํ๋ค.
- ์ค์ผ์ค๋ง CRUD API๋ฅผ ๊ตฌํํ๋ค.
- ์ค์ผ์ค๋ง Create ๋ก์ง์ ์์ ํ๋ค.
- ์์ ๋ ์ค์ผ์ค๋ง DB ๊ด๋ จ CRUD API ๋ฆฌํฉํฐ๋ง ์์
์ ์งํํ๋ค.
MVP2 ๋ฆฌํฉํฐ๋ง์ ์งํํ๋ค.
- ์ฝ๋ ์ปจ๋ฒค์
์ ์ ๊ฒํ๊ณ ์์ ํ๋ค.
- Redis host์ port๋ฅผ ํ๊ฒฝ๋ณ์๋ก ๊ด๋ฆฌํ๋ค.
- URL ๊ด๋ จ ๋ฆฌํฉํฐ๋ง์ ์งํํ๋ค.
- ์ค์ผ์ค๋ง CRUD API ๊ด๋ จ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ค.
- ์ค์ผ์ค๋ง serializer๋ฅผ ๊ตฌํํ๋ค.
- ์ค์ผ์ค๋ง์ด ์ด๋ฏธ ํ์ฑํ ์ํ๋ผ๋ฉด ์
๋ฐ์ดํธ๊ฐ ๋์ง ์๋๋ก ๊ตฌํํ๋ค.
- ์ค์ผ์ค๋ง is_active ์ํ๋ฅผ ์์๋ก False๋ก ๋ฐ๊ฟ์ ์๋ ๋ก์ง์ ์ถ๊ฐ ๊ตฌํํ๋ค.
- ์์กด์ฑ์ด ๊ฑธ๋ฆฐ ์์
์ ์ค์กด ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ๋ ๋ก์ง์ ์ถ๊ฐํ๋ค.
- job์ด ์คํจ ์ฒ๋ฆฌ ๋์ ๋์ retry ๋ก์ง์ ์์ ํ๋ค.
- ์ํฌํ๋ก์ฐ ์
๋ฐ์ดํธ ๋ก์ง ๋ฆฌํฉํ ๋ง์ ์งํํ๋ค.
- ์ํฌํ๋ก์ฐ์ ์คํ ๋ก์ง์์, ์ํฌํ๋ก์ฐ์ ์ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฐํ ๊ฐ์ ์ ๊ณตํ๋๋ก ์์ ํ๋ค.
- ์ํฌํ๋ก์ฐ ์ข
๋ฃ(์ฑ๊ณต/์คํจ)์ ํฐ๋ฏธ๋์ ์ข
๋ฃ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
- WorkflowManager ํด๋์ค ๋ด history_repo ์ค๋ณต ์ธ์๋ฅผ ์ ๊ฑฐํ๋ค.
- workflow_engine ์ปจํ
์ด๋ ๋ด๋ถ์์ Docker ๋ฐ๋ชฌ๊ณผ ์ฐ๊ฒฐ๋์ง ์๊ณ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- Swagger๋ฅผ ํตํ ํ๋ก์ ํธ API ๋ช
์ธ์๋ฅผ ๊ตฌํํ๋ค.
- README.md๋ฅผ ์์ ํ๋ค.
Workflow๋ ์ฌ์ฉ์๊ฐ ์ ์ํ ์ํฌํ๋ก์ฐ๋ฅผ ์ ์ฅํ๋ค.Job์ ์ํฌํ๋ก์ฐ ๋ด๋ถ์์ ์ ์ํ ๊ฐ๊ฐ์ ์์ ์ ์ ์ฅํ๋ค.History๋ ์ํฌํ๋ก์ฐ๋ฅผ ์คํํ ๊ธฐ๋ก์ ์ ์ฅํ๋ค.Scheduling์ ์ํฌํ๋ก์ฐ๋ฅผ ์ง์ ๋ ์๊ฐ๊ณผ ํ์๋งํผ ์คํํ๊ธฐ ์ํ ์ค์ผ์ค๋ง ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
Swagger๋ฅผ ํตํด ๊ตฌ์ฑํ API ํ
์คํธ ํ์ด์ง(/swagger)์์ API์ ์
๋ ฅ๊ฐ์ ๋ฃ์ด ์ถ๋ ฅ๊ฐ์ ํ์ธํ ์ ์์ต๋๋ค.
| ์ด๋ฆ | URL | Method |
|---|---|---|
| Workflow | ||
| ์ํฌํ๋ก์ฐ ์์ฑ | workflow | POST |
| ์ ์ฒด ์ํฌํ๋ก์ฐ ๋ฆฌ์คํธ ์กฐํ | workflow | GET |
| ์ํฌํ๋ก์ฐ ์กฐํ | workflow/<uuid:workflow_uuid> | GET |
| ์ํฌํ๋ก์ฐ ์์ | workflow/<uuid:workflow_uuid> | PATCH |
| ์ํฌํ๋ก์ฐ ์ญ์ | workflow/<uuid:workflow_uuid> | DELETE |
| ์ํฌํ๋ก์ฐ ์คํ | workflow/<uuid:workflow_uuid>/execute | GET |
| Scheduling | ||
| ์ค์ผ์ค๋ง ์์ฑ | scheduling | POST |
| ์ ์ฒด ์ค์ผ์ค๋ง ๋ฆฌ์คํธ ์กฐํ | scheduling | GET |
| ์ค์ผ์ค๋ง ์กฐํ | scheduling/<uuid:scheduling_uuid> | GET |
| ์ค์ผ์ค๋ง ์์ | scheduling/<uuid:scheduling_uuid> | PATCH |
| ์ค์ผ์ค๋ง ์ญ์ | scheduling/<uuid:scheduling_uuid> | DELETE |
| ์ํฌํ๋ก์ฐ ๋ณ ์ค์ผ์ค๋ง ๋ฆฌ์คํธ ์กฐํ | scheduling/workflow/<uuid:workflow_uuid> | GET |
| ์ค์ผ์ค๋ง ํ์ฑํ | scheduling/<uuid:scheduling_uuid>/execute | POST |
| ์ค์ผ์ค๋ง ๋นํ์ฑํ | scheduling/<uuid:scheduling_uuid>/deactive | POST |
๐ฆย workflow-engine
โฃ ๐ย workflow_engine
โฃ๐ย project_apps
โฃ๐ย api
โฃ๐ย serializers.py
โฃ๐ย urls.py
โฃ๐ย views.py
โฃ๐ย engine
โฃ๐ย job_dependency.py
โฃ๐ย job_execute.py
โฃ๐ย job_terminate.py
โฃ๐ย scheduling_execute.py
โฃ๐ย tasks_manager.py
โฃ๐ย migrations
โฃ๐ย models
โฃ๐ย cache.py
โฃ๐ย history.py
โฃ๐ย job.py
โฃ๐ย scheduling.py
โฃ๐ย workflow.py
โฃ๐ย repository
โฃ๐ย history_repository.py
โฃ๐ย job_repository.py
โฃ๐ย scheduling_repository.py
โฃ๐ย workflow_repository.py
โฃ๐ย service
โฃ๐ย lock_utils.py
โฃ๐ย scheduling_service.py
โฃ๐ย workflow_manage.py
โฃ๐ย workflow_service.py
โฃ๐ย constants.py
โฃ๐ย workflow_engine
โฃ๐ย celery.py
โฃ๐ย settings.py
โฃ๐ย urls.py
โฃ๐ย wsgi.py
โฃ๐ย manage.py
โฃ ๐ย Dockerfile
โฃ ๐ย README.md
โฃ ๐ย docker-compose.yml
โฃ ๐ย requirements.txt
api: ํด๋ผ์ด์ธํธ์ ์์ฒญ ๋ฐ ์๋ต์ ์ฒ๋ฆฌํ๋ ๋ทฐ ๋ก์ง๊ณผ ๋ผ์ฐํ ์ ๋ด๋นํฉ๋๋ค.engine: ๋น๋๊ธฐ ์์ ๊ณผ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ Celery ๊ด๋ จ ๋ก์ง์ ํฌํจํฉ๋๋ค.models: ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ Django ORM ๋ชจ๋ธ์ ํฌํจํฉ๋๋ค.repository: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ธ์ค๋ฅผ ์ถ์ํํ์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต์ ๋ถ๋ฆฌํฉ๋๋ค.service: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น์ฆ๋์ค ๋ก์ง์ ํฌํจํฉ๋๋ค.
๋ ํฌ์งํ ๋ฆฌ ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ, ๋ฐ์ดํฐ ์์ธ์ค ๊ณ์ธต์ ๋น์ฆ๋์ค ๋ก์ง(service)์ผ๋ก๋ถํฐ ๋ถ๋ฆฌํ์์ต๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ ์ฝ๋์ ์ ์ง๋ณด์์ฑ(๋ฐ์ดํฐ ์์ค ๋ณ๊ฒฝ๊ฐ๋ฅ)๊ณผ ํ์ฅ์ฑ์ ํฅ์์ํค๊ณ , ๋ค๋ฅธ ์ฌ๋๋ค๋ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์์๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ฌ ํ์ฌ ํ๋ก์ ํธ ํ์ผํธ๋ฆฌ์ ๊ฐ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ก ์งํํ์์ต๋๋ค.












