๐CI/CD ์ดํด
โ
์ํํธ์จ์ด ๋ฆด๋ฆฌ์ค ์๋ช
์ฃผ๊ธฐ๋ฅผ ์๋ํํ๋ ํ๋ก์ธ์ค
โ
์ง์์ ํตํฉ (CI)
- Git ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ฐ์ ์ฝ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋ฐ์
- ํน์ ๋ธ๋์น์์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ๋น๋ ๋ฐ ํ
์คํธ ์ํ
- ๊ธฐ๋ณธ ๋ธ๋์น๋ฅผ ๋์์ผ๋ก ํ๋ PullRequest ์์ฑ
- ์ฝ๋ ๊ฒํ
- ์น์ธ๋๋ฉด ๊ธฐ๋ณธ ๋ธ๋์น๋ก ๋ณํฉ
โ
์ง์์ ์ ๊ณต (CD)
- ๋ณ๊ฒฝ ์ฌํญ์ ๋ฒ๊ทธ ํ
์คํธ๋ฅผ ๊ฑฐ์ณ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์๋์ผ๋ก ์
๋ก๋
- ํ
์คํธ ์๋ํ, ์ฝ๋ ๋ฆด๋ฆฌ์ค ์๋ํ
โ
์ง์์ ๋ฐฐํฌ (CD)
- ๋ฆฌํฌ์งํ ๋ฆฌ์์ ํ๋ก๋์
ํ๊ฒฝ๊น์ง ์๋์ผ๋ก ๋ฆด๋ฆฌ์คํ๋ ๊ฒ
- ์๋ ๋ฐฐํฌ๋ก ์ธํ ํ๋ก์ธ์ค๋ฅผ ์ค์
๐ํ์๊ด๋ฆฌ ๋ฐ ๋ธ๋์น ์ ๋ต
ํ๋จ์ ๋ด์ฉ์ ์ง๋ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ๋ต์
๋๋ค.
โ
ํ์๊ด๋ฆฌ : ์์ค์ฝ๋ ๋ณ๊ฒฝ์ ๋ํ ๋ชจ๋ ๊ด๋ฆฌ
- ์๋ก์ด ๊ธฐ๋ฅ, ํ
์คํธ ๋ฑ๋ฑ ๋ ํฌ์งํ ๋ฆฌ์ ๋ณ๊ฒฝ์ ์ค ๋๋ ๋ฌด์กฐ๊ฑด ์ด์๋ฅผ ๋ฐ๊ธ
- ๋ฐ๊ธ๋ ์ด์ ๋ฒํธ๋ฅผ ์์
๋ธ๋์น ์์ฑ์ ์ ์ฉ
- ์ด์ ๋ฐ๊ธ ์, (1) ์ด๋ค ๊ธฐ๋ฅ์ ๋ํด ์์
์ ํ๋ ์ง ์ค๋ช
(2) ์์
์์ธ ๋ด์ฉ (3) ์ฐธ๊ณ ์๋ฃ (์ ํ) ๋ฅผ ์ฒจ๋ถํ์ฌ ์์ฑ
- Pull Request ์, ๊ด๋ จ๋ ์ด์ ๋ฒํธ๋ฅผ ์ฒจ๋ถํ๊ณ ์ด๋ค ์์ผ๋ก ๊ตฌ์ฑ๋์๋์ง ์์ฑ. main์ผ๋ก๋ ์น์ธ๋ ์ธ์๋ง ๋จธ์งํ ์ ์๊ณ , ํ ๋ช
์ด์์ ์ธ์์๊ฒ Approval์ ๋ฐ์์ผ develop์ผ๋ก ๋จธ์ง ํ ์ ์์.
โ
๋ธ๋์น ์ ๋ต
- main : ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ ์ต์ข
์ ์ผ๋ก main์ ๋ฐ์๋์ด์ผ ํจ
- develop : main์ผ๋ก ์ฌ๋ฆฌ๊ธฐ ์ ๊น์ง ์ฝ๋๋ฅผ ํตํฉํ๋ ๋ธ๋์น
- type/#์ด์๋ฒํธ : ๊ฐ ๊ฐ๋ฐ์๋ค์ด develop์ผ๋ก ์ฌ๋ฆฌ๊ธฐ์ ์ ์์
ํ๋ ๋ธ๋์น
๐๏ธ feat : ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ
๐๏ธ fix : ๋ฒ๊ทธ ์์
๐๏ธ refactor : ์ฝ๋ ๋ฆฌํฉํ ๋ง
๐๏ธ test : ํ
์คํธ ์ฝ๋, ๋ฆฌํฉํ ๋ง ํ
์คํธ ์ฝ๋
๐๏ธ chore : ๋น๋ ์
๋ฌด ์์
๐Pipeline ๊ตฌ์กฐ - FE
โ
์ฌ์ฉํ ํด : Jenkins
โ
Stage : Clone Repository - SonarQube Quality Test - Build - S3(AWS) / Storage(GCP) - CloudFront Cache Removal
โ
Credential์ Jenkins ์ฌ์ดํธ์ ๋ฑ๋กํ์ฌ ์ฌ์ฉ
Clone Repository
- ๊นํ๋ธ ์นํ
์ ์ด์ฉํด Develop ๋ธ๋์น์ push๊ฐ ์๊ธฐ๋ฉด ํด๋น ๋ธ๋์น๋ฅผ ํด๋ก
SonarQube Quality Test
- ์ผ์ ๊ธฐ์ค์น๋ฅผ ๋์ง ๋ชปํ๋ฉด Fail์ด ๋จ๊ฒ ์ค์
- ๊ธฐ์ค์น๋ ํ๋ก์ ํธ ์ผ์ ๋ฐ ์ํฉ์ ๊ณ ๋ คํ์ฌ ์ต์์น๋ก ์ก์
- ๊ธฐ์ค์ Claude์ ํ์ค์น๋ฅผ ๊ฒ์ํ์ฌ ์ค์
=> ์ ๋์
ํ๋๊ฐ?
์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ๊ณ ์ถ๋ค๋ ํ์๋ค์ ์๊ฒฌ์ด ์์์ผ๋, ๋ค๋ค ์ ๋๋ก ๋ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํด๋ณธ ์ ์ด ์๊ณ ๊ฐ์ด๋๋ผ์ธ์ด ์์ด์ ์ด๋ ค์ํ๋ค. ๊ทธ๋์ ํด์ ์์กด์ ํด์ผํ๊ณ , ์์ ํ ์๋ฌ์ด ํด๋ณด๋ค๋ ๊ธฐ์ ์ธ๋ฏธ๋ ๋ ์ธ๊ธ์ด ๋ง์๋ SonarQube๋ฅผ ์ ํํ๊ฒ ๋์๋ค.
Build
npm์ผ๋ก ๋น๋
S3(AWS) / Storage(GCP)
- ๋น๋ ๋ ๋ด์ฉ๋ฌผ๋ค์ S3, Storage๋ก ์ ์ก
- AWS CLI, gcloud CLI๋ก ์งํ
CloudFront Cache Removal
- CloudFront์ Cache๊ฐ ๋จ์์์ด ์ ๋๋ก ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์์ด ์๋๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฏ๋ก AWS CLI๋ก ์บ์ ๋ฌดํจํ ์งํ
โ
๊ฐ์ธ์ ์ธ ํผ๋๋ฐฑ
- Repository๋ฅผ Develop์ผ๋ก ์ฌ๋ฆฌ๊ธฐ ์ ์ Quality Check๋ฅผ ํ์ผ๋ฉด ๋ ์ข์์ ๊ฒ ๊ฐ๋ค. Develop์ผ๋ก ์ฌ๋ฆฌ๊ณ ํ๋๊น ์์ด ๋ฐฉ๋ํด์ ธ์ ์๋์ผ๋ก ์ฒดํฌํ๊ธฐ๊ฐ ์ด๋ ค์ ๋ค.
- Monitoring/Logs์ ๊ด๋ จ๋ ๋ถ๋ถ์ด ์์ด์ ์์ฝ๋ค.
- SonarQube์์ ์ ๊ณตํ๋ ์ฅ์ ์ ์์ ํ๊ฒ ํ์ฉํ์ง ๋ชป ํ๋ค.
๐Pipeline ๊ตฌ์กฐ - BE
โ
์ฌ์ฉํ ํด : Jenkins, ArgoCD
โ
Stage : Clone Repository - Build - SonarQube Quality Test - Build Docker Image - Upload Image to ECR - Upload Image to GCR - Update K8S Manifest
โ
Credential์ Jenkins ์ฌ์ดํธ์ ๋ฑ๋กํ์ฌ ์ฌ์ฉ
Clone Repository
- ๊นํ๋ธ ์นํ
์ ์ด์ฉํด Develop ๋ธ๋์น์ push๊ฐ ์๊ธฐ๋ฉด ํด๋น ๋ธ๋์น๋ฅผ ํด๋ก
Build
jar ํ์ผ ์์ฑ
SonarQube Quality Test
- ์ผ์ ๊ธฐ์ค์น๋ฅผ ๋์ง ๋ชปํ๋ฉด Fail์ด ๋จ๊ฒ ์ค์
- ๊ธฐ์ค์น๋ ํ๋ก์ ํธ ์ผ์ ๋ฐ ์ํฉ์ ๊ณ ๋ คํ์ฌ ์ต์์น๋ก ์ก์
- ๊ธฐ์ค์ Claude์ ํ์ค์น๋ฅผ ๊ฒ์ํ์ฌ ์ค์
Upload Image to ECR / Upload Image to GCR
- ๋น๋๋ ๋ด์ฉ์ Docker Image๋ก ๋ง๋ฆ
- ๊ทธ ์ด๋ฏธ์ง๋ฅผ ECR/GCR๋ก ๋ณด๋
Update K8S Manifest
- ์ ์ด๋ฏธ์ง๊ฐ ๋น๋๋๋ฉด, ํด๋น ์ด๋ฏธ์ง ํ๊ทธ๋ก Kubernetes ๋งค๋ํ์คํธ ์๋ ์
๋ฐ์ดํธ
- ๋ณ๊ฒฝ์ฌํญ GitOps ์ ์ฅ์์ ์ปค๋ฐ
- ์ธํ๋ผ ๋ณ๊ฒฝ์ฌํญ ์ฝ๋๋ก ๊ด๋ฆฌ
- ๋ฐฐํฌ ์ด๋ ฅ ์ถ์ ๊ฐ๋ฅ
โ
ArgoCD
GitOps repository hook
- Argo๊ฐ GitOps Web-hook ๊ฐ์ง
CD - Blue/Green
- Auto Sync๋ฅผ ํตํด ํด๋ฌ์คํฐ ์ค์ ์๋ ๋ณ๊ฒฝ
- Argo Rollout ์ปจํธ๋กค๋ฌ๊ฐ rollout.yaml์ ์ ์๋ ์ ๋ต์ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฒ์ ๋ฐฐํฌ
- ์ ๋ฒ์ Green ์์ ์ฑ ๊ฒ์ฆ
- Health-Check ์ฑ๊ณต ํ ํธ๋ํฝ ์ ํ
โ
๊ฐ์ธ์ ์ธ ํผ๋๋ฐฑ
- Repository๋ฅผ Develop์ผ๋ก ์ฌ๋ฆฌ๊ธฐ ์ ์ Quality Check๋ฅผ ํ์ผ๋ฉด ๋ ์ข์์ ๊ฒ ๊ฐ๋ค. Develop์ผ๋ก ์ฌ๋ฆฌ๊ณ ํ๋๊น ์์ด ๋ฐฉ๋ํด์ ธ์ ์๋์ผ๋ก ์ฒดํฌํ๊ธฐ๊ฐ ์ด๋ ค์ ๋ค.
- Monitoring/Logs์ ๊ด๋ จ๋ ๋ถ๋ถ์ด ์์ด์ ์์ฝ๋ค.
- SonarQube์์ ์ ๊ณตํ๋ ์ฅ์ ์ ์์ ํ๊ฒ ํ์ฉํ์ง ๋ชป ํ๋ค.