CI/CD
๋ช ์ฌ ยท DevOps
์ฝ๋ ํตํฉ(Continuous Integration), ์ ๋ฌ(Continuous Delivery) ๋ฐ ๋ฐฐํฌ(Continuous Deployment)๋ฅผ ์๋ํํ๋ DevOps ๊ดํ์ ์งํฉ โ ์ธ์ ์ค๋ฅ๋ฅผ ์ค์ด๊ณ ํ๋ก๋์ ๋ฐฐํฌ ์ฃผ๊ธฐ๋ฅผ ํ๊ธฐ์ ์ผ๋ก ๋จ์ถํฉ๋๋ค.
์ฝ๋ ๋ณ๊ฒฝ ์๋ง๋ค ๋น๋, ๋จ์ ํ ์คํธ, ํตํฉ ํ ์คํธ, ํ์ง ๋ถ์ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์คํํ๋ ์๋ํ ์ํํธ์จ์ด ํ์ดํ๋ผ์ธ โ ๊ฒ์ฆ๋๊ณ ํ์ธ๋ ์ฝ๋๋ง ํ๋ก๋์ ์ ๋๋ฌํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
GitHub Actions, GitLab CI, Jenkins, CircleCI ๋ฑ์ ๋๊ตฌ๋ฅผ ํตํด ๊ตฌํ๋๋ ํ๋ ์ํํธ์จ์ด ์์ง๋์ด๋ง์ ํต์ฌ โ ํ์ด ์ ๋ขฐ์ฑ, ์ถ์ ์ฑ ๋ฐ ๋ฌด์ค๋จ์ผ๋ก ์ง์์ ์ผ๋ก ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์๊ฒ ํฉ๋๋ค.
์ฃผ์ CI/CD ๋๊ตฌ๋ก๋ GitHub Actions, GitLab CI/CD, Jenkins, CircleCI, Travis CI, Azure DevOps Pipelines๊ฐ ์์ต๋๋ค. ๊ฐ๊ฐ ํด๋ผ์ฐ๋ ์ํ๊ณ์ ํนํ๋ ํตํฉ๊ณผ ํจ๊ป ๋น๋, ํ ์คํธ ๋ฐ ๋ฐฐํฌ ์๋ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ ํฌ ์์ด์ ์๋ Git ์ ์ฅ์์์ ์๋ฒฝํ ํตํฉ๊ณผ Docker ๋ฐ Kubernetes๋ก์ ๋ฐฐํฌ ์ํฌํ๋ก ๊ตฌ์ฑ์ ์ ์ฐ์ฑ์ ์ํด ์ฃผ๋ก GitHub Actions๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Continuous Delivery๋ ํ๋ฆฌํ๋ก๋์ ๊น์ง ์ ์ฒด ํ์ดํ๋ผ์ธ์ ์๋ํํ์ง๋ง, ํ๋ก๋์ ๋ฐฐํฌ ์ ์๋ ์น์ธ์ด ํ์ํฉ๋๋ค. Continuous Deployment๋ ์ด ๋ง์ง๋ง ๋จ๊ณ๊น์ง ์๋ํํฉ๋๋ค: ํ ์คํธ๋ฅผ ํต๊ณผํ ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ด ์๋์ผ๋ก ํ๋ก๋์ ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์ ํฌ ์์ด์ ์๋ ๊ฐ ๊ณ ๊ฐ์ ์ฑ์๋์ ์ํ ํ์ฉ ์์ค์ ๋ฐ๋ผ ์ ํฉํ ์ ๋ต์ ๊ตฌํํ๋ฉฐ, ํญ์ ํฌ๊ด์ ์ธ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋ณด์ฅํฉ๋๋ค.
DevOps ํ์ดํ๋ผ์ธ์ ์์ค ์ฝ๋๋ฅผ ํ๋ก๋์ ์ ๋ฐฐํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ณํํ๋ ์๋ํ๋ ๋จ๊ณ์ ์ฒด์ธ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋น๋(์ปดํ์ผ/๋ฒ๋ค๋ง), ํ ์คํธ(๋จ์, ํตํฉ, E2E), ํ์ง ๋ถ์(๋ฆฐํ , ๋ณด์), Docker ์ด๋ฏธ์ง ๋น๋ ๋ฐ ๋์ ์ธํ๋ผ์ ๋ฐฐํฌ๋ฅผ ํฌํจํฉ๋๋ค. ์ ํฌ ์์ด์ ์๋ ๊ฐ ํ๋ก์ ํธ์ ๋ง์ถคํ DevOps ํ์ดํ๋ผ์ธ์ ์ค๊ณํ์ฌ ํผ๋๋ฐฑ ์๊ฐ๊ณผ ๊ณ ๊ฐ์ ํ๋ก๋์ ๋ฐฐํฌ ์์ ์ฑ์ ์ต์ ํํฉ๋๋ค.
CI/CD๋ ๋น ๋ฅด๊ณ ์์ ์๊ฒ ๊ณ ํ์ง ์ํํธ์จ์ด๋ฅผ ์ ๊ณตํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์๋ํ๋ ํ ์คํธ๋ฅผ ํตํด ๋ฒ๊ทธ๊ฐ ๋์ ๋๋ ์ฆ์ ๊ฐ์งํ๊ณ , ์ค๋ฅ์ ์์ธ์ด ๋๋ ์๋ ๋ฐฐํฌ๋ฅผ ์ ๊ฑฐํ๋ฉฐ, ํ์ด ์ ๋ช ํ ๋์ ํ๋ฃจ์ ์ฌ๋ฌ ๋ฒ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์๊ฒ ํฉ๋๋ค. Async Code์์ CI/CD๋ ์ ํฌ ๋ฐฉ๋ฒ๋ก ์ ํต์ฌ์ ๋๋ค: ๋ชจ๋ ์ปค๋ฐ์ด ๋ฐฐํฌ ์ ์ ํ์ง์ ๋ณด์ฅํ๋ ์์ ํ ํ์ดํ๋ผ์ธ์ ์๋์ผ๋ก ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
CI๋ Continuous Integration(์ง์์ ํตํฉ)์ ์๋ฏธํ๋ฉฐ, ๊ฐ ์ฝ๋ ๋ณ๊ฒฝ์ด ์๋์ผ๋ก ๋ฉ์ธ ๋ธ๋์น์ ํตํฉ๋๊ณ , ์๋ํ๋ ํ์ดํ๋ผ์ธ์ ํตํด ์ปดํ์ผ ๋ฐ ํ ์คํธ๋๋ ๊ฐ๋ฐ ๊ดํ์ ๋๋ค. ๋ชฉํ๋ ๊ฐ๋ฐ ์ฃผ๊ธฐ์์ ์ถฉ๋๊ณผ ๋ฒ๊ทธ๋ฅผ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๊ฐ์งํ๋ ๊ฒ์ ๋๋ค. ์ ํฌ ์์ด์ ์๋ ๋ชจ๋ ํ๋ก์ ํธ์ CI๋ฅผ ์ ์ฉํฉ๋๋ค: ๋ชจ๋ ํ ๋ฆฌํ์คํธ๊ฐ ์ฝ๋ ๋ณํฉ ์ ์ ์ ์ฒด ๋น๋, ๋จ์ ํ ์คํธ ๋ฐ ํ์ง ๋ถ์์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
CI/CD ํ์ดํ๋ผ์ธ ๊ตฌ์ถ์ ๋๊ตฌ ์ ํ(GitHub Actions, GitLab CI)์์ ์์ํ ํ, ์์กด์ฑ ์ค์น, ํ ์คํธ ์คํ, ์ ํ๋ฆฌ์ผ์ด์ ๋น๋, Docker ์ด๋ฏธ์ง ๊ตฌ์ฑ ๋ฐ ๋์ ์ธํ๋ผ ๋ฐฐํฌ ๋ฑ์ ๋จ๊ณ๋ฅผ ์ ์ํฉ๋๋ค. ๊ฐ ๋จ๊ณ๋ ์์ค ์ฝ๋์ ํจ๊ป ๋ฒ์ ๊ด๋ฆฌ๋๋ YAML ํ์ผ๋ก ์ ์๋ฉ๋๋ค. ์ ํฌ ์์ด์ ์๋ ์คํ ์ด์ง ํ๊ฒฝ๊ณผ ์๋ ๋กค๋ฐฑ ์ ๋ต์ ํฌํจํ ํดํค CI/CD ํ์ดํ๋ผ์ธ์ ๊ณ ๊ฐ์ ์ํด ๊ตฌ์ฑํฉ๋๋ค.
DevOps๋ ์ํํธ์จ์ด ๊ฐ๋ฐ(Dev)๊ณผ ์์คํ ๊ด๋ฆฌ(Ops)๋ฅผ ํตํฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณต์ ๊ฐ์ํํ๋ฉด์ ์์ ์ฑ์ ํฅ์์ํค๋ ๋ฌธํ์ด์ ๊ดํ์ ์งํฉ์ ๋๋ค. DevOps์ ํต์ฌ์๋ ์๋ํ(CI/CD), Infrastructure as Code(Terraform), ์ปจํ ์ด๋ํ(Docker), ์ค์ผ์คํธ๋ ์ด์ (Kubernetes) ๋ฐ ์ง์์ ๋ชจ๋ํฐ๋ง์ด ์์ต๋๋ค. ์ ํฌ ์์ด์ ์๋ ๋น ๋ฅด๊ณ ์์ ์ ์ธ ๋ฐฐํฌ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ๊ฐ ํ๋ก์ ํธ ์ค๊ณ ์ด๊ธฐ๋ถํฐ DevOps ๊ดํ์ ํตํฉํ๋ฉฐ ์ด ์ฒ ํ์ ๊ตฌํํฉ๋๋ค.
Continuous Delivery ํ์ดํ๋ผ์ธ์ ์์ค ์ฝ๋์์ ํ๋ฆฌํ๋ก๋์ ํ๊ฒฝ๊น์ง์ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์๋ํํฉ๋๋ค: ๋น๋, ํ ์คํธ, ๋ณด์ ๋ถ์, ์ํฐํฉํธ ๊ตฌ์ฑ ๋ฐ ์คํ ์ด์ง ๋ฐฐํฌ์ ๋๋ค. ๊ฐ๋ฐ์์๊ฒ ๋น ๋ฅธ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ , ํ๊ท ์ํ์ ์ค์ด๋ฉฐ, ๋ชจ๋ ๋ฒ์ ์ด ์ ์ฌ์ ์ผ๋ก ํ๋ก๋์ ์ ๋ฐฐํฌ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ ํฌ ์์ด์ ์๋ ๊ณ ๊ฐ์ด ์๊ฐ ๋ฆด๋ฆฌ์ค ์ฃผ๊ธฐ์์ ์์ฌํ๊ณ ์ผ์ผ ๋ฐฐํฌ๋ก ์ ํํ ์ ์๊ฒ ํ๋ ์ง์์ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ์ค๊ณํฉ๋๋ค.