V1 CICD - 100-hours-a-week/9-team-Devths-WIKI GitHub Wiki
๋ชฉ์ฐจ (ํผ์น๊ธฐ/์ ๊ธฐ)
-
#0. ๋ฌธ์ ๋ชฉ์
-
#1. V1 CI-CD ์ค๊ณ ์์น
-
#2. ๋ธ๋์น ์ ๋ต๊ณผ ๋ฐฐํฌ ์ ์ฑ
-
#3. CI ํ์ดํ๋ผ์ธ
-
#4. CD ํ์ดํ๋ผ์ธ
-
#5. ํ๊ฒฝ๋ณ ๋ฐฐํฌ ์ ๋ต(NonProd ์๋, Prod ์๋)
-
#6. ์ํฐํฉํธ ์ ์ฅ ์ ๋ต(S3)
-
#7. ๋ฐฐํฌ ์๋ฆผ(Discord)
-
#8. SLI-SLO ์ฐ๊ณ
-
#9. ์ด์ ์๋๋ฆฌ์ค
๋ณธ ๋ฌธ์๋ Devths ์๋น์ค์ V1 CI/CD ํ์ดํ๋ผ์ธ์ ์ํค์ ๊ธฐ๋กํ๊ธฐ ์ํ ๋ฌธ์์.
V1์์๋ GitHub Actions ๊ธฐ๋ฐ CI์ AWS CodeDeploy ๊ธฐ๋ฐ CD๋ฅผ ๊ฒฐํฉํ์ฌ, ๋ฐฐํฌ ์๋์ ์ด์ ์์ ์ฑ์ ๊ท ํ์ ๋ฌ์ฑํ๋๋ก ์ค๊ณํจ.
ํนํ NonProd๋ ์๋ ๋ฐฐํฌ ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ ์๋๋ฅผ ํ๋ณดํ๊ณ , Prod๋ ์๋ ํธ๋ฆฌ๊ฑฐ๋ก ๋ฐฐํฌ๋ฅผ ํต์ ํ์ฌ ์ด์ ๋ฆฌ์คํฌ๋ฅผ ๋ฎ์ถ๋๋ก ๊ตฌ์ฑํจ.
V1 CI/CD๋ โ๋นจ๋ฆฌ ๋ฐฐํฌํ๊ธฐโ๋ณด๋ค โ๋ฐฐํฌํด๋ ์์ ํ ์ํ๋ฅผ ๋ณด์ฅํ๊ธฐโ๋ฅผ ์ฐ์ ์์น์ผ๋ก ๋ .
๋ฐ๋ผ์ ๋ฐฐํฌ ์ ๋จ๊ณ์์ ์ฝ๋ ํ์ง์ ๊ฒ์ฆํ๋ **ํ์ง ๊ฒ์ดํธ(quality gate)**๋ฅผ ๋ช
ํํ ๋๊ณ , ์ด์ ๋ฐฐํฌ๋ ์น์ธ ๊ธฐ๋ฐ์ผ๋ก ํต์ ํจ.
๋ชจ๋ ๋ฐฐํฌ๋ ์ํฐํฉํธ(S3) ๋จ์๋ก ๊ธฐ๋ก๋์ด ์ถ์ ๊ฐ๋ฅํด์ผ ํ๋ฉฐ, ์คํจ ์ ์ด์์๊ฐ ์ฆ์ ์ธ์งํ ์ ์๋๋ก ์๋ฆผ์ ์ฐ๋ํจ.
V1์ ๋ธ๋์น ๊ตฌ์กฐ๊ฐ ๋ฐฐํฌ ์ ์ฑ
๊ณผ ์ง์ ์ฐ๊ฒฐ๋๋๋ก ์ค๊ณํจ.
-
feat/*๋ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋ธ๋์น๋ก ์ฌ์ฉํจ.
-
develop์ ํตํฉ ๊ฐ๋ฐ ๋ธ๋์น์ด๋ฉฐ NonProd ์๋ ๋ฐฐํฌ ๋์์.
-
release๋ ๋ฐฐํฌ ์ ๊ฒ์ฆ ๋ธ๋์น์ด๋ฉฐ NonProd ์๋ ๋ฐฐํฌ ๋์์.
-
main์ ์ด์ ๋ธ๋์น์ด๋ฉฐ Prod ๋ฐฐํฌ ๋์์.
-
hotfix/*๋ ๊ธด๊ธ ์์ ๋ธ๋์น์ด๋ฉฐ ํ์ ์ ๋น ๋ฅด๊ฒ ์์ ๋ธ๋์น๋ก ๋ฐ์ํจ.
์ด ๊ตฌ์กฐ๋ฅผ ํตํด โ๊ฐ๋ฐ์ ๋น ๋ฅด๊ฒ, ์ด์์ ์์ ํ๊ฒโ๋ผ๋ ๋ชฉํ๊ฐ ๋ธ๋์น ๋จ์์ ๊ฐ์ ๋จ.
CI๋ PR ๋ฐ Merge ์์ ์ ์คํ๋๋ฉฐ, ๋ฐฐํฌ ๊ฐ๋ฅํ ์ํ๋ฅผ ๋ง๋๋ ์ ์ฒ๋ฆฌ ๋จ๊ณ์.
CI์ ๋ชฉํ๋ ์ฝ๋ ํ์ง๊ณผ ์์ ์ฑ์ ๋ณด์ฅํ๊ณ , ๋ฐฐํฌ ์ฐ์ถ๋ฌผ์ ํ์คํ๋ ํํ๋ก ์์ฑํ๋ ๊ฒ์.
์ฝ๋ ์คํ์ผ ๋ฐ ๊ธฐ๋ณธ ํ์ง์ ๋น ๋ฅด๊ฒ ์ฐจ๋จํ๊ธฐ ์ํด Lint ๋จ๊ณ๋ฅผ ์ํํจ.
ํ๋ฐํธ์๋๋ ESLint/Prettier ์ค์ฌ์ผ๋ก, ๋ฐฑ์๋๋ ํ๋ก์ ํธ ์ ์ฑ
์ ๋ง๋ Lint ์ฒด๊ณ๋ฅผ ์ ์ฉํจ.
๋ฐฐํฌ ์ ๋ณด์ ๋ฐ ๊ฒฐํจ ๊ฐ๋ฅ์ฑ์ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๊ธฐ ์ํด ์ ์ ๋ถ์์ ์ํํจ.
CodeQL ๊ธฐ๋ฐ ๋ถ์์ ํตํด ์ํ ํจํด์ ์ฐจ๋จํ๊ณ , ์ด์ ํ๊ฒฝ ์ ์
์ ์ค์ด๋ ๊ฒ์ ๋ชฉํ๋ก ํจ.
๊ธฐ๋ฅ ํ๊ท๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํ
์คํธ ๋จ๊ณ๋ฅผ ์ํํจ.
๋ฐฑ์๋๋ JUnit ๊ธฐ๋ฐ ํ
์คํธ๋ฅผ ์คํํ๊ณ , JaCoCo๋ก ์ปค๋ฒ๋ฆฌ์ง ์งํ๋ฅผ ํ์ธ ๊ฐ๋ฅํ๊ฒ ํจ.
ํ
์คํธ ์คํจ ์ ์ดํ ๋จ๊ณ๋ก ์งํ๋์ง ์๋๋ก ํ์ฌ โ๊นจ์ง ์ฝ๋๊ฐ ๋ฐฐํฌ๋๋ ์ํฉโ์ ์์ฒ ์ฐจ๋จํจ.
CI์ ๋ง์ง๋ง ๋จ๊ณ์์ ๋น๋๋ฅผ ์ํํ๊ณ , CodeDeploy๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ํํ๋ก ์ํฐํฉํธ๋ฅผ ํจํค์งํจ.
์ํฐํฉํธ์๋ ์คํ ์ฐ์ถ๋ฌผ๋ฟ ์๋๋ผ appspec.yml ๋ฐ ๋ฐฐํฌ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋์ด ๋ฐฐํฌ ์ฌํ์ฑ์ ํ๋ณดํจ.
CD๋ โ์ํฐํฉํธ๋ฅผ ์ค์ ์๋ฒ์ ๋ฐ์ํ๋ ๋จ๊ณโ๋ก, AWS CodeDeploy๋ฅผ ์ฌ์ฉํจ.
CodeDeploy๋ ๋ฐฐํฌ ๋จ๊ณ๋ณ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๊ณ , ๋์ผํ ์ ์ฐจ๋ก ๋ฐฐํฌ๊ฐ ๋ฐ๋ณต๋๋๋ก ํ์คํํ๋ ์ญํ ์ ์ํํจ.
- GitHub Actions๊ฐ S3์ ์
๋ก๋ํ ์ํฐํฉํธ๋ฅผ CodeDeploy๊ฐ ๋ด๋ ค๋ฐ์.
-
appspec.yml์ ์ ์๋ ํ ์์๋๋ก ๋ฐฐํฌ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํจ.
- ๋ฐฐํฌ ์๋ฃ ํ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๊ธฐ๋ํ๊ฑฐ๋ ์ ํํ์ฌ ๋ฐ์ํจ.
๋ฐฐํฌ ๊ฒฐ๊ณผ๋ CodeDeploy ์ด๋ ฅ์ผ๋ก ๋จ์ โ์ธ์ /๋ฌด์์ด/์ด๋์ ๋ฐฐํฌ๋์๋์งโ๋ฅผ ์ถ์ ๊ฐ๋ฅํ๊ฒ ํจ.
V1์ ํ๊ฒฝ ํน์ฑ์ ๋ฐ๋ผ ๋ฐฐํฌ ๋ฐฉ์์ ๋ถ๋ฆฌํจ.
NonProd๋ ๊ธฐ๋ฅ ๊ฒ์ฆ์ด ํต์ฌ์ด๋ฏ๋ก ์๋ ๋ฐฐํฌ๋ฅผ ์ ์ฉํจ.
develop, release์ Merge๋๋ฉด CI๋ฅผ ํต๊ณผํ ํ ์ํฐํฉํธ๊ฐ ์์ฑ๋๊ณ , CodeDeploy๋ก ์๋ ๋ฐ์๋จ.
Prod๋ ์๋น์ค ์์ ์ฑ์ด ์ต์ฐ์ ์ด๋ฏ๋ก ์๋ ๋ฐฐํฌ๋ฅผ ๊ธ์งํ๊ณ ์๋ ํธ๋ฆฌ๊ฑฐ ๋ฐฐํฌ๋ก ํต์ ํจ.
main ๋ฐ์ ํ GitHub Actions์์ **workflow_dispatch(์๋ ์คํ)**๋ก ๋ฐฐํฌ๋ฅผ ์์ํจ.
์ด๋ฅผ ํตํด ๋ฐฐํฌ ํ์ด๋ฐ์ ์ด์์๊ฐ ๊ฒฐ์ ํ๊ณ , ํผํฌ ํ์ ํํผ ๋ฐ ์ ๊ฒ ์ฐฝ ์ด์์ด ๊ฐ๋ฅํด์ง.
์๋ ํธ๋ฆฌ๊ฑฐ ๋ฐฉ์์ โ์ํ์ง ์๋ ๋ฐฐํฌ๊ฐ ์ด์์ ์ ์
๋๋ ์ฌ๊ณ โ๋ฅผ ๋ฐฉ์งํ๋ ์ฅ์น๋ก ๋์ํจ.
V1์ ๋ฐฐํฌ ์ฌํ์ฑ๊ณผ ๊ฐ์ฌ ์ถ์ ์ ์ํด S3๋ฅผ ์ํฐํฉํธ ์ ์ฅ์๋ก ์ฌ์ฉํจ.
- NonProd์ฉ ์ํฐํฉํธ๋
Artifact_Dev์ ์ ์ฅํจ.
- Prod์ฉ ์ํฐํฉํธ๋
Artifact_Prod์ ์ ์ฅํจ.
ํ๊ฒฝ๋ณ๋ก ์ํฐํฉํธ๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ด์ ํ๊ฒฝ์ด ๊ฐ๋ฐ ์ฐ์ถ๋ฌผ์ ์ฐธ์กฐํ๋ ์ฌ๊ณ ๋ฅผ ์ฐจ๋จํจ.
๋ํ S3 ๊ฐ์ฒด๊ฐ โ๋ฐฐํฌ ๋ฒ์ โ์ ๋จ์๊ฐ ๋์ด ๋กค๋ฐฑ ๋ฐ ๋ฐฐํฌ ์ด๋ ฅ ์ถ์ ์ด ์ฌ์์ง.
๋ฐฐํฌ ๊ฒฐ๊ณผ๋ ์ฆ์ ๊ณต์ ๋์ด์ผ ํ๋ฏ๋ก Discord ์๋ฆผ์ ์ฐ๋ํจ.
GitHub Actions ๋๋ ๋ฐฐํฌ ํ์ฒ๋ฆฌ ๋จ๊ณ์์ ์ฑ๊ณต/์คํจ ์ฌ๋ถ๋ฅผ Discord๋ก ์ ์กํจ.
NonProd์ Prod ์๋ฆผ ์ฑ๋์ ๋ถ๋ฆฌํ์ฌ, ํ๊ฒฝ๋ณ๋ก ํ์ํ ์ฌ๋์๊ฒ๋ง ์ ๋ณด๊ฐ ์ ๋ฌ๋๋๋ก ๊ตฌ์ฑํจ.
NonProd ์๋ฆผ ๋ณด๊ธฐ (ํผ์น๊ธฐ/์ ๊ธฐ)
Prod ์๋ฆผ ๋ณด๊ธฐ (ํผ์น๊ธฐ/์ ๊ธฐ)
V1์์๋ ๋ฐฐํฌ ํ์ง์ ์ด์ ๊ด์ ์ ๋ชฉํ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด SLI/SLO์ CI/CD๋ฅผ ์ฐ๊ฒฐํจ.
| ์งํ (SLI) | ๋ชฉํ (SLO) | ์ธก์ ๋ฐฉ๋ฒ |
|---|---|---|
| ๋ฐฐํฌ ์ฑ๊ณต๋ฅ | 100% | GitHub Actions ์ฑ๊ณต ์ด๋ ฅ |
๋ฐฐํฌ ์ฑ๊ณต๋ฅ ์ ๋ช
์์ ์ผ๋ก ๊ด๋ฆฌํจ์ผ๋ก์จ ๋ฐฐํฌ ์์ ์ฑ์ ์ด์ ์งํ๋ก ๋์ด์ฌ๋ฆฌ๋ ๊ตฌ์กฐ์.
๊ฐ๋ฐ์๊ฐ PR์ ์์ฑํ๊ณ develop ๋๋ release๋ก Mergeํจ.
CI๊ฐ Lint/์ ์ ๋ถ์/ํ
์คํธ/๋น๋๋ฅผ ์ํํ๊ณ , S3์ ์ํฐํฉํธ๋ฅผ ์
๋ก๋ํจ.
CodeDeploy๊ฐ NonProd์ ์๋ ๋ฐฐํฌํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ Discord๋ก ์๋ฆผํจ.
๊ฒ์ฆ ์๋ฃ๋ ๋ณ๊ฒฝ์ฌํญ์ main์ ๋ฐ์ํจ.
์ด์์๊ฐ GitHub Actions์์ ์๋ ํธ๋ฆฌ๊ฑฐ๋ก ๋ฐฐํฌ๋ฅผ ์คํํจ.
Prod ์ํฐํฉํธ๊ฐ S3์ ์
๋ก๋๋๊ณ , CodeDeploy๊ฐ ์ด์ ์๋ฒ์ ๋ฐ์ํจ.
๋ฐฐํฌ ๊ฒฐ๊ณผ๊ฐ Discord๋ก ์๋ฆผ๋์ด ์ด์์๊ฐ ์ฆ์ ํ์ธํจ.