Skip to content
ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

173 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

์›Œํฌํ”Œ๋กœ์šฐ ์—”์ง„ ํ”„๋กœ์ ํŠธ

ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

์›Œํฌํ”Œ๋กœ์šฐ ์—”์ง„ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ฐ ์ž‘์—…์„ ์˜์กด์„ฑ์œผ๋กœ ๋ฌถ์–ด์„œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰์‹œํ‚ค๋Š” ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ ์ž‘์—…์€ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ์Šค์ผ€์ค„๋ง ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์˜ˆ์•ฝ ์‹คํ–‰ํ•˜๊ณ  ์ฃผ๊ธฐ์„ฑ์„ ์„ค์ •ํ•˜์—ฌ ๋ฐ˜๋ณต ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ธฐ๋Šฅ

  • ์›Œํฌํ”Œ๋กœ์šฐ ์ •์˜: ๊ฐ ์ž‘์—…์„ ์ •์˜ํ•˜๊ณ  ์˜์กด์„ฑ์œผ๋กœ ๋ฌถ์–ด ํ•˜๋‚˜์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ์ •์˜ํ•œ๋‹ค.
  • ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰: ๊ตฌ์„ฑํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์— ๋”ฐ๋ผ ๊ฐ ์ž‘์—…์„ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค.
  • ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰: ๊ฐ ์ž‘์—…์€ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  • ์Šค์ผ€์ค„๋ง ๊ธฐ๋Šฅ: ์˜ˆ์•ฝ ์‹คํ–‰ ๋ฐ ์ฃผ๊ธฐ์ ์ธ ๋ฐ˜๋ณต ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•œ ์Šค์ผ€์ค„๋ง ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

ํŒ€์› ์†Œ๊ฐœ

์ตœ๊ธฐ์šฉ ํ”„๋กœํ•„ ํ•˜๋ฏผ์ˆ˜ ํ”„๋กœํ•„ ์ด์ง€ํ™˜ ํ”„๋กœํ•„ ์˜ค์ •์žฌ ํ”„๋กœํ•„
์ตœ๊ธฐ์šฉ ํ•˜๋ฏผ์ˆ˜ ์ด์ง€ํ™˜ ์˜ค์ •์žฌ(๋ฉ˜ํ† )

๊ฐœ๋ฐœ ํ™˜๊ฒฝ

image

ํŒ€ ๊ทธ๋ผ์šด๋“œ ๋ฃฐ ๋ฐ ์ปจ๋ฒค์…˜

image

์—…๋ฌด ๊ด€๋ฆฌ

์—…๋ฌด ๊ด€๋ฆฌ๋Š” Jira๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ, ์• ์ž์ผ ๋ฐฉ๋ฒ•๋ก  ์ค‘ ์Šคํฌ๋Ÿผ(์Šคํ”„๋ฆฐํŠธ) ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์ˆ˜ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ œํ•œ์ ์ด๊ณ , ๋น ๋ฅธ์‹œ๊ฐ„ ๋‚ด์— ํ”„๋กœ์ ํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์• ์ž์ผ ๋ฐฉ๋ฒ•๋ก  ์ค‘ ์Šคํฌ๋Ÿผ ๋ฐฉ์‹์„ ์ ์šฉํ•ด ์—ฌ๋Ÿฌ ์Šคํ”„๋ฆฐํŠธ ๊ธฐ๊ฐ„์„ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค.

  • ๋ฆฌ๋ทฐ & ํ”Œ๋ž˜๋‹ : 2์ผ(๊ฐ 1์ผ)
  • ์ž‘์—…๊ธฐ๊ฐ„ : 2์ฃผ
  • ๊ธฐ๊ฐ„์€ ๊ณ ์ •๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ ์œ ๋™์ ์ด๋‹ค.
  • ์Šคํƒ ๋“œ ์—… ๋ฏธํŒ… : ๋งค์ผ ์˜ค์ „ 10์‹œ

๋ฌธ์„œ ์ •๋ฆฌ

๋ฌธ์„œ ์ •๋ฆฌ๋Š” Notion์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์˜ ํ•„์š”์— ๋”ฐ๋ผ ์ž์œ ๋กญ๊ฒŒ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด ์‚ฌ์šฉ์„ฑ์ด ์ข‹๊ณ , ์‹ค์‹œ๊ฐ„์œผ๋กœ ํŒ€์›๋“ค๊ณผ ๋ฌธ์„œ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ํ˜‘์—…๋„๊ตฌ๋กœ์จ ์œ ์šฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒ€์› ๊ฐ„ ์†Œํ†ต

Slack์œผ๋กœ ์ง„ํ–‰ํ•˜๊ณ ์ž ํ–ˆ์œผ๋‚˜, ์ƒํ˜ธ ๊ฐ„ ํ”ผ๋“œ๋ฐฑ์ด ๋А๋ฆฌ๊ณ  ๋ฏธํŒ… ์ œํ•œ์œผ๋กœ ์ธํ•ด ๊ฐ€์žฅ ์ต์ˆ™ํ•œ Discord๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ๊ธฐ๋ก, ์ฑ„๋„ ๋ฐ ์Šค๋ ˆ๋“œ๋ฅผ ํ†ตํ•œ ์ฃผ์ œ๋ณ„ ํ† ๋ก , ์ผํšŒ์„ฑ ํšŒ์˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”„๋กœ์ ํŠธ์˜ ์ „์ฒด๊ธฐ๊ฐ„ ๋™์•ˆ ์ง€์†์ ์ธ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ๊ฐ€๋Šฅํ•ด ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„์ „ ๊ด€๋ฆฌ

image

๋ธŒ๋žœ์น˜ ์ „๋žต์€ GitHub Flow ์ „๋žต์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ธฐ๊ฐ„์ด ์ •ํ•ด์ง„ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ์ƒ์‚ฐ์†๋„๋ฅผ ์œ„ํ•ด์„œ ๊ธฐ๋Šฅ๋ณ„ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  master ๋ธŒ๋žœ์น˜์— ๊ณง๋ฐ”๋กœ merge ํ•˜๋Š” GitHub Flow ์ „๋žต์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ํšŒ์˜ ์‹œ๊ฐ„

์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฉ˜ํ† ๋ง๊ณผ ํŒ€ํšŒ์˜๋ฅผ ์—ด์—ˆ๊ณ , ์ด๋ฅผ ํšŒ์˜๋ก์œผ๋กœ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋” ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์Šคํ„ฐ๋””๋ฅผ ๊ฐœ์ตœํ–ˆ์Šต๋‹ˆ๋‹ค.

image

๋ฉ˜ํ† ๋ง

  • ์›”์š”์ผ ์˜คํ›„ 9์‹œ

ํŒ€ ํšŒ์˜

  • ํ™”์š”์ผ ์˜ค์ „ 10์‹œ
    • ๋ฉ˜ํ† ๋ง ์ดํ›„ ์ •๋ฆฌ ํšŒ์˜
  • ์›”์š”์ผ ์˜คํ›„ 2์‹œ
    • ๋ฉ˜ํ† ๋ง ๋ฐœํ‘œ ์ „ ํšŒ์˜

์Šคํ„ฐ๋””

  • ๊ต์žฌ
    • ํŒŒ์ด์ฌ ์ฝ”๋”ฉ์˜ ๊ธฐ์ˆ  ๊ฐœ์ •2ํŒ (Effective Python 2nd)
  • ๋ถ„๋Ÿ‰
    • ์ฃผ๋‹น 1 ์ฑ•ํ„ฐ์”ฉ ์ง„ํ–‰
  • ์Šคํ„ฐ๋”” ์‹œ๊ฐ„
    • ํ™”์š”์ผ ์˜ค์ „ 11์‹œ
  • ๋ฐœํ‘œ์ž ๋กœํ…Œ์ด์…˜

ํ”„๋กœ์ ํŠธ ์ผ์ •

image

์Šคํ”„๋ฆฐํŠธ1 (2023/12/04~2023/12/11)

Jenkins ๋ฐ Airflow ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ , ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ• ์ง€ ์ถ”์ถœํ•œ๋‹ค.

- Jenkins ๋ฐ Airflow ๊ธฐ๋Šฅ์„ ๋ถ„์„ํ•˜๊ณ  ๋ฌธ์„œ๋กœ ์ž‘์„ฑํ•œ๋‹ค.
- Jenkins ๋ฐ Airflow ์˜ˆ์ œ๋ฅผ ์‹ค์Šตํ•œ๋‹ค.
- ์›Œํฌํ”Œ๋กœ์šฐ ์—”์ง„ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ž‘์„ฑํ•œ๋‹ค.

์Šคํ”„๋ฆฐํŠธ2 (2023/12/13~2023/12/18)

๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ์„ ํ™•์ •ํ•˜๊ณ , ์„ค๊ณ„๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.

- Docker ์‹ค์Šต์„ ์ง„ํ–‰ํ•œ๋‹ค.
- ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ์„ ํ™•์ •ํ•œ๋‹ค.

์Šคํ”„๋ฆฐํŠธ3 (2023/12/19~2023/12/26)

์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ์ค€๋น„๋ฅผ ์™„๋ฃŒํ•œ๋‹ค.

- ์„ค๊ณ„๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
- ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜ ์„ค๊ณ„๋„๋ฅผ ์™„์„ฑํ•œ๋‹ค.
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ์„ ํ™•์ •ํ•œ๋‹ค.
- Celery๋ฅผ ๊ณต๋ถ€ํ•œ๋‹ค.
- ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํŒจํ„ด์„ ๊ณต๋ถ€ํ•œ๋‹ค.
- ๊ฒฐ์ •๋œ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ์„ธํŒ…ํ•œ๋‹ค.

์Šคํ”„๋ฆฐํŠธ4 (2023/12/27~2024/01/08)

์„ค๊ณ„๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  ์ฝ”์–ด ๋กœ์ง์„ ์ž‘์„ฑํ•œ๋‹ค.

- ๊นƒํ—ˆ๋ธŒ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์„ธํŒ…ํ•œ๋‹ค.
- ์žฅ๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์„ธํŒ…ํ•œ๋‹ค.
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ธํŒ…ํ•œ๋‹ค.
- ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํŒจํ„ด์„ ์ ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ ˆ์ด์–ด๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค.
- Redis ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
- Celery worker๋ฅผ ๋„์šฐ๋Š” ๋กœ์ง์„ ์ž‘์—…ํ•œ๋‹ค.
- ๊นƒ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฆฌํŒฉํ„ฐ๋ง ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

์Šคํ”„๋ฆฐํŠธ5 (2024/01/09~2024/01/22)

์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ๋กœ์ง์„ ํ™•์ •ํ•œ๋‹ค.

- ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ๋กœ์ง์„ ์ •๋ฆฌํ•œ๋‹ค.

์Šคํ”„๋ฆฐํŠธ6 (2024/01/23~2024/02/05)

์›Œํฌํ”Œ๋กœ์šฐ CRUD์™€ ์‹คํ–‰ ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ๋‹ค.

- ์›Œํฌํ”Œ๋กœ์šฐ CRUD API๋ฅผ ๊ฐœ๋ฐœํ•œ๋‹ค.
- ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ API๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
- job์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ๋‹ค.
- job ์˜์กด์„ฑ ๊ด€๋ จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•œ๋‹ค.

์Šคํ”„๋ฆฐํŠธ7 (2024/02/06~2024/02/19)

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๋“ค๋„ ๋ชจ๋‘ ์ข…๋ฃŒํ•˜๋Š” ๋กœ์ง์œผ๋กœ ์ˆ˜์ •ํ•œ๋‹ค.

์Šคํ”„๋ฆฐํŠธ8 (2024/02/19~2024/03/04)

์Šค์ผ€์ค„๋ง ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•œ๋‹ค.

- ์Šค์ผ€์ค„๋ง ์‹คํ–‰ ๋กœ์ง์„ ํ™•์ • ๋ฐ ๊ตฌํ˜„ํ•œ๋‹ค.
- ์Šค์ผ€์ค„๋ง ์‹คํ–‰ API๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
- ์Šค์ผ€์ค„๋ง DB ๋ชจ๋ธ์„ ํ™•์ • ๋ฐ ์ˆ˜์ •ํ•œ๋‹ค.
- ์Šค์ผ€์ค„๋ง DB์—์„œ is_active ํ•„๋“œ์˜ default ์˜ต์…˜ ๊ฐ’์„ ์ˆ˜์ •ํ•œ๋‹ค.
- ์Šค์ผ€์ค„๋ง CRUD API๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
- ์Šค์ผ€์ค„๋ง Create ๋กœ์ง์„ ์ˆ˜์ •ํ•œ๋‹ค.
- ์ˆ˜์ •๋œ ์Šค์ผ€์ค„๋ง DB ๊ด€๋ จ CRUD API ๋ฆฌํŒฉํ„ฐ๋ง ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

์Šคํ”„๋ฆฐํŠธ9,10 (2024/03/04~2024/03/15)

MVP2 ๋ฆฌํŒฉํ„ฐ๋ง์„ ์ง„ํ–‰ํ•œ๋‹ค.

- ์ฝ”๋“œ ์ปจ๋ฒค์…˜์„ ์ ๊ฒ€ํ•˜๊ณ  ์ˆ˜์ •ํ•œ๋‹ค.
- Redis host์™€ port๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
- URL ๊ด€๋ จ ๋ฆฌํŒฉํ„ฐ๋ง์„ ์ง„ํ–‰ํ•œ๋‹ค.
- ์Šค์ผ€์ค„๋ง CRUD API ๊ด€๋ จ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
- ์Šค์ผ€์ค„๋ง serializer๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
- ์Šค์ผ€์ค„๋ง์ด ์ด๋ฏธ ํ™œ์„ฑํ™” ์ƒํƒœ๋ผ๋ฉด ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค.
- ์Šค์ผ€์ค„๋ง is_active ์ƒํƒœ๋ฅผ ์ž„์˜๋กœ False๋กœ ๋ฐ”๊ฟ€์ˆ˜ ์žˆ๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ ๊ตฌํ˜„ํ•œ๋‹ค.
- ์˜์กด์„ฑ์ด ๊ฑธ๋ฆฐ ์ž‘์—…์˜ ์‹ค์กด ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
- job์ด ์‹คํŒจ ์ฒ˜๋ฆฌ ๋์„ ๋•Œ์˜ retry ๋กœ์ง์„ ์ˆ˜์ •ํ•œ๋‹ค.
- ์›Œํฌํ”Œ๋กœ์šฐ ์—…๋ฐ์ดํŠธ ๋กœ์ง ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•œ๋‹ค.
- ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹คํ–‰ ๋กœ์ง์—์„œ, ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์ œ๊ณตํ•˜๋„๋ก ์ˆ˜์ •ํ•œ๋‹ค.
- ์›Œํฌํ”Œ๋กœ์šฐ ์ข…๋ฃŒ(์„ฑ๊ณต/์‹คํŒจ)์‹œ ํ„ฐ๋ฏธ๋„์— ์ข…๋ฃŒ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
- WorkflowManager ํด๋ž˜์Šค ๋‚ด history_repo ์ค‘๋ณต ์ธ์ž๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.
- workflow_engine ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ Docker ๋ฐ๋ชฌ๊ณผ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ณ  ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.
- Swagger๋ฅผ ํ†ตํ•œ ํ”„๋กœ์ ํŠธ API ๋ช…์„ธ์„œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
- README.md๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

์•„ํ‚คํ…์ณ

image

๋ชจ๋ธ ๋ฐ ERD

image

  • Workflow๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • Job์€ ์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด๋ถ€์—์„œ ์ •์˜ํ•œ ๊ฐ๊ฐ์˜ ์ž‘์—…์„ ์ €์žฅํ•œ๋‹ค.
  • History๋Š” ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•œ ๊ธฐ๋ก์„ ์ €์žฅํ•œ๋‹ค.
  • Scheduling์€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ง€์ •๋œ ์‹œ๊ฐ„๊ณผ ํšŸ์ˆ˜๋งŒํผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šค์ผ€์ค„๋ง ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

๊ธฐ๋Šฅ๋ณ„ ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

์Šค์ผ€์ค„๋ง ์‹คํ–‰ ๋กœ์ง

image

์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ๋กœ์ง

image

์˜์กด์„ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋กœ์ง

image

์›Œํฌํ”Œ๋กœ์šฐ ์„ฑ๊ณต/์‹คํŒจ ๋ถ„๊ธฐ๋กœ์ง

์ž‘์—… ์‹คํ–‰ ์„ฑ๊ณต ๋กœ์ง

image

์ž‘์—… ์‹คํ–‰ ์‹คํŒจ ๋กœ์ง

image

API ๋ช…์„ธ์„œ

image

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)์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ(๋ฐ์ดํ„ฐ ์†Œ์Šค ๋ณ€๊ฒฝ๊ฐ€๋Šฅ)๊ณผ ํ™•์žฅ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์—ฌ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ํŒŒ์ผํŠธ๋ฆฌ์™€ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages