V1 CICD - 100-hours-a-week/9-team-Devths-WIKI GitHub Wiki

๋ชฉ์ฐจ (ํŽผ์น˜๊ธฐ/์ ‘๊ธฐ)


0. ๋ฌธ์„œ ๋ชฉ์ 

๋ณธ ๋ฌธ์„œ๋Š” Devths ์„œ๋น„์Šค์˜ V1 CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ์œ„ํ‚ค์— ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์„œ์ž„.
V1์—์„œ๋Š” GitHub Actions ๊ธฐ๋ฐ˜ CI์™€ AWS CodeDeploy ๊ธฐ๋ฐ˜ CD๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ, ๋ฐฐํฌ ์†๋„์™€ ์šด์˜ ์•ˆ์ •์„ฑ์˜ ๊ท ํ˜•์„ ๋‹ฌ์„ฑํ•˜๋„๋ก ์„ค๊ณ„ํ•จ.
ํŠนํžˆ NonProd๋Š” ์ž๋™ ๋ฐฐํฌ ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ํ™•๋ณดํ•˜๊ณ , Prod๋Š” ์ˆ˜๋™ ํŠธ๋ฆฌ๊ฑฐ๋กœ ๋ฐฐํฌ๋ฅผ ํ†ต์ œํ•˜์—ฌ ์šด์˜ ๋ฆฌ์Šคํฌ๋ฅผ ๋‚ฎ์ถ”๋„๋ก ๊ตฌ์„ฑํ•จ.


1. V1 CI-CD ์„ค๊ณ„ ์›์น™

image

V1 CI/CD๋Š” โ€œ๋นจ๋ฆฌ ๋ฐฐํฌํ•˜๊ธฐโ€๋ณด๋‹ค โ€œ๋ฐฐํฌํ•ด๋„ ์•ˆ์ „ํ•œ ์ƒํƒœ๋ฅผ ๋ณด์žฅํ•˜๊ธฐโ€๋ฅผ ์šฐ์„  ์›์น™์œผ๋กœ ๋‘ .
๋”ฐ๋ผ์„œ ๋ฐฐํฌ ์ „ ๋‹จ๊ณ„์—์„œ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๊ฒ€์ฆํ•˜๋Š” **ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ(quality gate)**๋ฅผ ๋ช…ํ™•ํžˆ ๋‘๊ณ , ์šด์˜ ๋ฐฐํฌ๋Š” ์Šน์ธ ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ต์ œํ•จ.
๋ชจ๋“  ๋ฐฐํฌ๋Š” ์•„ํ‹ฐํŒฉํŠธ(S3) ๋‹จ์œ„๋กœ ๊ธฐ๋ก๋˜์–ด ์ถ”์  ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๋ฉฐ, ์‹คํŒจ ์‹œ ์šด์˜์ž๊ฐ€ ์ฆ‰์‹œ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์•Œ๋ฆผ์„ ์—ฐ๋™ํ•จ.


2. ๋ธŒ๋žœ์น˜ ์ „๋žต๊ณผ ๋ฐฐํฌ ์ •์ฑ…

V1์€ ๋ธŒ๋žœ์น˜ ๊ตฌ์กฐ๊ฐ€ ๋ฐฐํฌ ์ •์ฑ…๊ณผ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜๋„๋ก ์„ค๊ณ„ํ•จ.

  • feat/*๋Š” ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜๋กœ ์‚ฌ์šฉํ•จ.
  • develop์€ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜์ด๋ฉฐ NonProd ์ž๋™ ๋ฐฐํฌ ๋Œ€์ƒ์ž„.
  • release๋Š” ๋ฐฐํฌ ์ „ ๊ฒ€์ฆ ๋ธŒ๋žœ์น˜์ด๋ฉฐ NonProd ์ž๋™ ๋ฐฐํฌ ๋Œ€์ƒ์ž„.
  • main์€ ์šด์˜ ๋ธŒ๋žœ์น˜์ด๋ฉฐ Prod ๋ฐฐํฌ ๋Œ€์ƒ์ž„.
  • hotfix/*๋Š” ๊ธด๊ธ‰ ์ˆ˜์ • ๋ธŒ๋žœ์น˜์ด๋ฉฐ ํ•„์š” ์‹œ ๋น ๋ฅด๊ฒŒ ์ƒ์œ„ ๋ธŒ๋žœ์น˜๋กœ ๋ฐ˜์˜ํ•จ.

์ด ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด โ€œ๊ฐœ๋ฐœ์€ ๋น ๋ฅด๊ฒŒ, ์šด์˜์€ ์•ˆ์ „ํ•˜๊ฒŒโ€๋ผ๋Š” ๋ชฉํ‘œ๊ฐ€ ๋ธŒ๋žœ์น˜ ๋‹จ์—์„œ ๊ฐ•์ œ๋จ.


3. CI ํŒŒ์ดํ”„๋ผ์ธ

CI๋Š” PR ๋ฐ Merge ์‹œ์ ์— ์‹คํ–‰๋˜๋ฉฐ, ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ๋งŒ๋“œ๋Š” ์ „์ฒ˜๋ฆฌ ๋‹จ๊ณ„์ž„.
CI์˜ ๋ชฉํ‘œ๋Š” ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๊ณ , ๋ฐฐํฌ ์‚ฐ์ถœ๋ฌผ์„ ํ‘œ์ค€ํ™”๋œ ํ˜•ํƒœ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž„.

3.1 Lint(์ •์  ๊ทœ์น™ ๊ฒ€์‚ฌ)

์ฝ”๋“œ ์Šคํƒ€์ผ ๋ฐ ๊ธฐ๋ณธ ํ’ˆ์งˆ์„ ๋น ๋ฅด๊ฒŒ ์ฐจ๋‹จํ•˜๊ธฐ ์œ„ํ•ด Lint ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•จ.
ํ”„๋ŸฐํŠธ์—”๋“œ๋Š” ESLint/Prettier ์ค‘์‹ฌ์œผ๋กœ, ๋ฐฑ์—”๋“œ๋Š” ํ”„๋กœ์ ํŠธ ์ •์ฑ…์— ๋งž๋Š” Lint ์ฒด๊ณ„๋ฅผ ์ ์šฉํ•จ.


3.2 Static Analysis(์ •์  ๋ถ„์„)

๋ฐฐํฌ ์ „ ๋ณด์•ˆ ๋ฐ ๊ฒฐํ•จ ๊ฐ€๋Šฅ์„ฑ์„ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌํ•˜๊ธฐ ์œ„ํ•ด ์ •์  ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•จ.
CodeQL ๊ธฐ๋ฐ˜ ๋ถ„์„์„ ํ†ตํ•ด ์œ„ํ—˜ ํŒจํ„ด์„ ์ฐจ๋‹จํ•˜๊ณ , ์šด์˜ ํ™˜๊ฒฝ ์œ ์ž…์„ ์ค„์ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•จ.


3.3 Unit / Integration Test

๊ธฐ๋Šฅ ํšŒ๊ท€๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•จ.
๋ฐฑ์—”๋“œ๋Š” JUnit ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , JaCoCo๋กœ ์ปค๋ฒ„๋ฆฌ์ง€ ์ง€ํ‘œ๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ.
ํ…Œ์ŠคํŠธ ์‹คํŒจ ์‹œ ์ดํ›„ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋˜์ง€ ์•Š๋„๋ก ํ•˜์—ฌ โ€œ๊นจ์ง„ ์ฝ”๋“œ๊ฐ€ ๋ฐฐํฌ๋˜๋Š” ์ƒํ™ฉโ€์„ ์›์ฒœ ์ฐจ๋‹จํ•จ.


3.4 Build ๋ฐ ์•„ํ‹ฐํŒฉํŠธ ์ƒ์„ฑ

CI์˜ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„œ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , CodeDeploy๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ํŒจํ‚ค์ง•ํ•จ.
์•„ํ‹ฐํŒฉํŠธ์—๋Š” ์‹คํ–‰ ์‚ฐ์ถœ๋ฌผ๋ฟ ์•„๋‹ˆ๋ผ appspec.yml ๋ฐ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ๋ฐฐํฌ ์žฌํ˜„์„ฑ์„ ํ™•๋ณดํ•จ.


4. CD ํŒŒ์ดํ”„๋ผ์ธ

CD๋Š” โ€œ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์‹ค์ œ ์„œ๋ฒ„์— ๋ฐ˜์˜ํ•˜๋Š” ๋‹จ๊ณ„โ€๋กœ, AWS CodeDeploy๋ฅผ ์‚ฌ์šฉํ•จ.
CodeDeploy๋Š” ๋ฐฐํฌ ๋‹จ๊ณ„๋ณ„ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๊ณ , ๋™์ผํ•œ ์ ˆ์ฐจ๋กœ ๋ฐฐํฌ๊ฐ€ ๋ฐ˜๋ณต๋˜๋„๋ก ํ‘œ์ค€ํ™”ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•จ.

  • GitHub Actions๊ฐ€ S3์— ์—…๋กœ๋“œํ•œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ CodeDeploy๊ฐ€ ๋‚ด๋ ค๋ฐ›์Œ.
  • appspec.yml์— ์ •์˜๋œ ํ›… ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•จ.
  • ๋ฐฐํฌ ์™„๋ฃŒ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์žฌ๊ธฐ๋™ํ•˜๊ฑฐ๋‚˜ ์ „ํ™˜ํ•˜์—ฌ ๋ฐ˜์˜ํ•จ.

๋ฐฐํฌ ๊ฒฐ๊ณผ๋Š” CodeDeploy ์ด๋ ฅ์œผ๋กœ ๋‚จ์•„ โ€œ์–ธ์ œ/๋ฌด์—‡์ด/์–ด๋””์— ๋ฐฐํฌ๋˜์—ˆ๋Š”์ง€โ€๋ฅผ ์ถ”์  ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ.


5. ํ™˜๊ฒฝ๋ณ„ ๋ฐฐํฌ ์ „๋žต(NonProd ์ž๋™, Prod ์ˆ˜๋™)

V1์€ ํ™˜๊ฒฝ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋ฐฐํฌ ๋ฐฉ์‹์„ ๋ถ„๋ฆฌํ•จ.

5.1 NonProd(Develop/Release) ์ž๋™ ๋ฐฐํฌ

image

NonProd๋Š” ๊ธฐ๋Šฅ ๊ฒ€์ฆ์ด ํ•ต์‹ฌ์ด๋ฏ€๋กœ ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ ์šฉํ•จ.
develop, release์— Merge๋˜๋ฉด CI๋ฅผ ํ†ต๊ณผํ•œ ํ›„ ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , CodeDeploy๋กœ ์ž๋™ ๋ฐ˜์˜๋จ.


5.2 Prod(Main) ์ˆ˜๋™ ํŠธ๋ฆฌ๊ฑฐ ๋ฐฐํฌ

image

Prod๋Š” ์„œ๋น„์Šค ์•ˆ์ •์„ฑ์ด ์ตœ์šฐ์„ ์ด๋ฏ€๋กœ ์ž๋™ ๋ฐฐํฌ๋ฅผ ๊ธˆ์ง€ํ•˜๊ณ  ์ˆ˜๋™ ํŠธ๋ฆฌ๊ฑฐ ๋ฐฐํฌ๋กœ ํ†ต์ œํ•จ.
main ๋ฐ˜์˜ ํ›„ GitHub Actions์—์„œ **workflow_dispatch(์ˆ˜๋™ ์‹คํ–‰)**๋กœ ๋ฐฐํฌ๋ฅผ ์‹œ์ž‘ํ•จ.
์ด๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ ํƒ€์ด๋ฐ์„ ์šด์˜์ž๊ฐ€ ๊ฒฐ์ •ํ•˜๊ณ , ํ”ผํฌ ํƒ€์ž„ ํšŒํ”ผ ๋ฐ ์ ๊ฒ€ ์ฐฝ ์šด์˜์ด ๊ฐ€๋Šฅํ•ด์ง.

์ˆ˜๋™ ํŠธ๋ฆฌ๊ฑฐ ๋ฐฉ์‹์€ โ€œ์›ํ•˜์ง€ ์•Š๋Š” ๋ฐฐํฌ๊ฐ€ ์šด์˜์— ์œ ์ž…๋˜๋Š” ์‚ฌ๊ณ โ€๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์žฅ์น˜๋กœ ๋™์ž‘ํ•จ.


6. ์•„ํ‹ฐํŒฉํŠธ ์ €์žฅ ์ „๋žต(S3)

V1์€ ๋ฐฐํฌ ์žฌํ˜„์„ฑ๊ณผ ๊ฐ์‚ฌ ์ถ”์ ์„ ์œ„ํ•ด S3๋ฅผ ์•„ํ‹ฐํŒฉํŠธ ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉํ•จ.

  • NonProd์šฉ ์•„ํ‹ฐํŒฉํŠธ๋Š” Artifact_Dev์— ์ €์žฅํ•จ.
  • Prod์šฉ ์•„ํ‹ฐํŒฉํŠธ๋Š” Artifact_Prod์— ์ €์žฅํ•จ.

ํ™˜๊ฒฝ๋ณ„๋กœ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์šด์˜ ํ™˜๊ฒฝ์ด ๊ฐœ๋ฐœ ์‚ฐ์ถœ๋ฌผ์„ ์ฐธ์กฐํ•˜๋Š” ์‚ฌ๊ณ ๋ฅผ ์ฐจ๋‹จํ•จ.
๋˜ํ•œ S3 ๊ฐ์ฒด๊ฐ€ โ€œ๋ฐฐํฌ ๋ฒ„์ „โ€์˜ ๋‹จ์œ„๊ฐ€ ๋˜์–ด ๋กค๋ฐฑ ๋ฐ ๋ฐฐํฌ ์ด๋ ฅ ์ถ”์ ์ด ์‰ฌ์›Œ์ง.


7. ๋ฐฐํฌ ์•Œ๋ฆผ(Discord)

๋ฐฐํฌ ๊ฒฐ๊ณผ๋Š” ์ฆ‰์‹œ ๊ณต์œ ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ Discord ์•Œ๋ฆผ์„ ์—ฐ๋™ํ•จ.
GitHub Actions ๋˜๋Š” ๋ฐฐํฌ ํ›„์ฒ˜๋ฆฌ ๋‹จ๊ณ„์—์„œ ์„ฑ๊ณต/์‹คํŒจ ์—ฌ๋ถ€๋ฅผ Discord๋กœ ์ „์†กํ•จ.
NonProd์™€ Prod ์•Œ๋ฆผ ์ฑ„๋„์„ ๋ถ„๋ฆฌํ•˜์—ฌ, ํ™˜๊ฒฝ๋ณ„๋กœ ํ•„์š”ํ•œ ์‚ฌ๋žŒ์—๊ฒŒ๋งŒ ์ •๋ณด๊ฐ€ ์ „๋‹ฌ๋˜๋„๋ก ๊ตฌ์„ฑํ•จ.

NonProd ์•Œ๋ฆผ ๋ณด๊ธฐ (ํŽผ์น˜๊ธฐ/์ ‘๊ธฐ) image

Prod ์•Œ๋ฆผ ๋ณด๊ธฐ (ํŽผ์น˜๊ธฐ/์ ‘๊ธฐ) image image

8. SLI-SLO ์—ฐ๊ณ„

V1์—์„œ๋Š” ๋ฐฐํฌ ํ’ˆ์งˆ์„ ์šด์˜ ๊ด€์ ์˜ ๋ชฉํ‘œ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด SLI/SLO์™€ CI/CD๋ฅผ ์—ฐ๊ฒฐํ•จ.

์ง€ํ‘œ (SLI) ๋ชฉํ‘œ (SLO) ์ธก์ • ๋ฐฉ๋ฒ•
๋ฐฐํฌ ์„ฑ๊ณต๋ฅ  100% GitHub Actions ์„ฑ๊ณต ์ด๋ ฅ

๋ฐฐํฌ ์„ฑ๊ณต๋ฅ ์„ ๋ช…์‹œ์ ์œผ๋กœ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ๋ฐฐํฌ ์•ˆ์ •์„ฑ์„ ์šด์˜ ์ง€ํ‘œ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ตฌ์กฐ์ž„.


9. ์šด์˜ ์‹œ๋‚˜๋ฆฌ์˜ค

9.1 NonProd ๋ฐฐํฌ ํ๋ฆ„

๊ฐœ๋ฐœ์ž๊ฐ€ PR์„ ์ƒ์„ฑํ•˜๊ณ  develop ๋˜๋Š” release๋กœ Mergeํ•จ.
CI๊ฐ€ Lint/์ •์  ๋ถ„์„/ํ…Œ์ŠคํŠธ/๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , S3์— ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์—…๋กœ๋“œํ•จ.
CodeDeploy๊ฐ€ NonProd์— ์ž๋™ ๋ฐฐํฌํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ Discord๋กœ ์•Œ๋ฆผํ•จ.

9.2 Prod ๋ฐฐํฌ ํ๋ฆ„

๊ฒ€์ฆ ์™„๋ฃŒ๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ main์— ๋ฐ˜์˜ํ•จ.
์šด์˜์ž๊ฐ€ GitHub Actions์—์„œ ์ˆ˜๋™ ํŠธ๋ฆฌ๊ฑฐ๋กœ ๋ฐฐํฌ๋ฅผ ์‹คํ–‰ํ•จ.
Prod ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ S3์— ์—…๋กœ๋“œ๋˜๊ณ , CodeDeploy๊ฐ€ ์šด์˜ ์„œ๋ฒ„์— ๋ฐ˜์˜ํ•จ.
๋ฐฐํฌ ๊ฒฐ๊ณผ๊ฐ€ Discord๋กœ ์•Œ๋ฆผ๋˜์–ด ์šด์˜์ž๊ฐ€ ์ฆ‰์‹œ ํ™•์ธํ•จ.


โš ๏ธ **GitHub.com Fallback** โš ๏ธ