์๋ ํ์ธ์, ๊ฐ๋ฐ์ ์ฌ๋ฌ๋ถ! ํน์ โ๊ฐ๋ฐํฑ๊น๊ธฐโ๋ผ๋ ๋จ์ด๋ฅผ ๋ค์ด๋ณด์ จ๋์? ์ฒ์ ๋ฃ๋ ๋ถ๋ค๋ ๊ณ์ค ๊ฑฐ๊ณ , ์ด๋ฏธ ์ฌ์ฉํ๊ณ ๊ณ์ ๋ถ๋ค๋ ์์ ํ ๋ฐ์. ์ค๋์ ๊ฐ๋ฐ ํจ์จ์ ๊ทน๋ํํ๋ ์จ๊ฒจ์ง ๋ฌด๊ธฐ, ๋ฐ๋ก โ๊ฐ๋ฐํฑ๊น๊ธฐโ์ ๋ํด ์์๋ค์ด ํํค์ณ ๋ณด๊ฒ ์ต๋๋ค.
๊ฐ๋ฐ์๋ผ๋ฉด ๋๊ตฌ๋ ํจ์จ์ ์ธ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ฟ๊ฟ ๊ฒ๋๋ค. ์ฆ์ ์ผ๊ทผ๊ณผ ๋ฒ๊ทธ์์ ์ธ์์์ ๋ฒ์ด๋, ๋ ์ฐฝ์์ ์ธ ์ผ์ ์ง์คํ๊ณ ์ถ์ ํ ๋ฐ์. ๋ฐ๋ก ๊ทธ ๊ฟ์ ํ์ค๋ก ๋ง๋ค์ด ์ค ๋๊ตฌ๊ฐ โ๊ฐ๋ฐํฑ๊น๊ธฐโ์ ๋๋ค. ์, ๊ทธ๋ผ ์ง๊ธ๋ถํฐ ๊ฐ๋ฐํฑ๊น๊ธฐ์ ์ธ๊ณ๋ก ํจ๊ป ๋ ๋๋ณผ๊น์?
๊ฐ๋ฐํฑ๊น๊ธฐ๋ ๋ฌด์์ธ๊ฐ?
โ๊ฐ๋ฐํฑ๊น๊ธฐโ๋ ์ฝ๋ ํ์ง์ ์ ์งํ๋ฉด์ ๊ฐ๋ฐ ์๋๋ฅผ ํฅ์์ํค๋ ๋ค์ํ ๊ธฐ์ , ๋๊ตฌ, ๊ทธ๋ฆฌ๊ณ ๋ฐฉ๋ฒ๋ก ์ ํฌ๊ด์ ์ผ๋ก ์ง์นญํ๋ ์ฉ์ด์ ๋๋ค. ๋ง์น ๋ชฉ์๊ฐ ํฑ์ ๋ ์นด๋กญ๊ฒ ๊ฐ์ ์์ ํจ์จ์ ๋์ด๋ ๊ฒ์ฒ๋ผ, ๊ฐ๋ฐ์๊ฐ ์์ ์ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ๊ธฐ์ ์คํ์ ์ต์ ํํ์ฌ ์์ฐ์ฑ์ ๊ทน๋ํํ๋ ๋ชจ๋ ํ๋์ ์๋ฏธํฉ๋๋ค. ๋จ์ํ ์ฝ๋ ์์ฑ ์๋๋ฅผ ๋์ด๋ ๊ฒ์ ๋์ด, ์ฝ๋์ ๊ฐ๋ ์ฑ, ์ ์ง๋ณด์์ฑ, ๊ทธ๋ฆฌ๊ณ ํ์ฅ์ฑ์ ๊ฐ์ ํ๋ ๋ฐ ์ด์ ์ ๋ง์ถฅ๋๋ค.
์ข ๋ ์ฝ๊ฒ ์ค๋ช ํ์๋ฉด, ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๋ ๋ชจ๋ ์ข ๋ฅ์ ์์ฐ์ฑ ํฅ์ ๋๊ตฌ์ ๊ธฐ์ ์ โ๊ฐ๋ฐํฑ๊น๊ธฐโ๋ผ๊ณ ๋ถ๋ฅผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ ์ฝ๋ ์์ฑ ๊ธฐ๋ฅ์ด ๋ฐ์ด๋ IDE, ํจ์จ์ ์ธ ๋๋ฒ๊น ๋๊ตฌ, ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๋๋ ๋ฆฐํฐ, ๊ทธ๋ฆฌ๊ณ ์๋ํ๋ ๋น๋ ๋ฐ ๋ฐฐํฌ ์์คํ ๋ฑ์ด ๋ชจ๋ โ๊ฐ๋ฐํฑ๊น๊ธฐโ์ ํด๋นํฉ๋๋ค.
์ ๊ฐ๋ฐํฑ๊น๊ธฐ๊ฐ ์ค์ํ ๊น?
๊ฐ๋ฐํฑ๊น๊ธฐ๊ฐ ์ค์ํ ์ด์ ๋ ๋ช ํํฉ๋๋ค. ๋ฐ๋ก โ์๊ฐ์ ๊ธโ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฐ๋ฐ ํ๋ก์ ํธ๋ ํญ์ ์๊ฐ๊ณผ์ ์ธ์์ ๋๋ค. ์ ํด์ง ๊ธฐ๊ฐ ์์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํด์ผ ํ์ฃ . ๊ฐ๋ฐํฑ๊น๊ธฐ๋ ์ด๋ฌํ ์๊ฐ ์๋ฐ์ ํด์ํ๊ณ , ๊ฐ๋ฐ์๊ฐ ๋ ์ค์ํ ๋ฌธ์ ํด๊ฒฐ์ ์ง์คํ ์ ์๋๋ก ๋์ต๋๋ค.
ํต๊ณ์ ์ผ๋ก๋ ๊ฐ๋ฐํฑ๊น๊ธฐ์ ํจ๊ณผ๋ ์ ์ฆ๋์์ต๋๋ค. ํ ์ฐ๊ตฌ์ ๋ฐ๋ฅด๋ฉด, ์๋ํ๋ ํ ์คํธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐํ์ ์๋ ํ ์คํธ๋ง ์งํํ๋ ๊ฐ๋ฐํ์ ๋นํด ๋ฒ๊ทธ ๋ฐ์๋ฅ ์ด 30% ๊ฐ์ํ๊ณ , ๊ฐ๋ฐ ์๋๋ 20% ํฅ์๋๋ค๊ณ ํฉ๋๋ค. ๋ํ, ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ์ฝ๋ ํ์ง์ ๊ฐ์ ํ๋ฉด, ์ฅ๊ธฐ์ ์ผ๋ก ์ ์ง๋ณด์ ๋น์ฉ์ ํฌ๊ฒ ์ ๊ฐํ ์ ์์ต๋๋ค.
๋ฟ๋ง ์๋๋ผ, ๊ฐ๋ฐํฑ๊น๊ธฐ๋ ๊ฐ๋ฐ์์ ๋ง์กฑ๋๋ฅผ ๋์ด๋ ๋ฐ๋ ๊ธฐ์ฌํฉ๋๋ค. ๋ฐ๋ณต์ ์ด๊ณ ์ง๋ฃจํ ์์ ์ ์๋ํํ๊ณ , ๋ ๋์ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณตํจ์ผ๋ก์จ, ๊ฐ๋ฐ์๋ ์ ๋ฌด์ ๋ํ ๋ชฐ์ ๋๋ฅผ ๋์ด๊ณ , ๋ ์ฐฝ์์ ์ธ ์์ด๋์ด๋ฅผ ๋ ์ฌ๋ฆด ์ ์๊ฒ ๋ฉ๋๋ค.
๊ฐ๋ฐํฑ๊น๊ธฐ์ ํต์ฌ ์์
๊ฐ๋ฐํฑ๊น๊ธฐ๋ ๋ค์ํ ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ทธ ์ค์์๋ ํต์ฌ์ ์ธ ์์๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์๋ํ
์๋ํ๋ ๊ฐ๋ฐํฑ๊น๊ธฐ์ ํต์ฌ์ ๋๋ค. ๋ฐ๋ณต์ ์ธ ์์ , ์๋ฅผ ๋ค์ด ๋น๋, ํ ์คํธ, ๋ฐฐํฌ ๋ฑ์ ์๋ํํจ์ผ๋ก์จ ๊ฐ๋ฐ ์๊ฐ์ ๋จ์ถํ๊ณ , ํด๋จผ ์๋ฌ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. CI/CD(Continuous Integration/Continuous Deployment) ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ๋ ๊ฒ์ด ๋ํ์ ์ธ ์์์ ๋๋ค.
์ฝ๋ ํ์ง
์ฝ๋ ํ์ง์ ๊ฐ๋ฐํฑ๊น๊ธฐ์ ์ค์ํ ๊ธฐ์ค์ ๋๋ค. ๊น๋ํ๊ณ ๊ฐ๋ ์ฑ์ด ์ข์ ์ฝ๋๋ ๋๋ฒ๊น ๊ณผ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค. ๋ฆฐํฐ(Linter)์ ์ฝ๋ ํฌ๋งคํฐ(Code Formatter)๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ ์คํ์ผ์ ์ผ๊ด์ฑ ์๊ฒ ์ ์งํ๊ณ , ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค.
ํ์
๊ฐ๋ฐ์ ํผ์ ํ๋ ์ผ์ด ์๋๋๋ค. ํ์ ๊ฐ์ ์ํํ ํ์ ์ ๊ฐ๋ฐ ํจ์จ์ฑ์ ๋์ด๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ์๋ก์ ์ฝ๋๋ฅผ ๊ฒํ ํ๊ณ , ๊ฐ์ ์ ์ ๊ณต์ ํ๋ฉฐ, ์ง์์ ์ ๋ฌํ ์ ์์ต๋๋ค. ๋ํ, ํจ๊ณผ์ ์ธ ์ปค๋ฎค๋์ผ์ด์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ณด ๊ณต์ ๋ฅผ ์ํํ๊ฒ ํ๋ ๊ฒ๋ ์ค์ํฉ๋๋ค.
๋๊ตฌ ํ์ฉ
๋ค์ํ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ๋ฅ์ํ๊ฒ ํ์ฉํ๋ ๊ฒ์ ๊ฐ๋ฐํฑ๊น๊ธฐ์ ๊ธฐ๋ณธ์ ๋๋ค. IDE(Integrated Development Environment)๋ ์ฝ๋ ์์ฑ, ๋๋ฒ๊น , ํ ์คํธ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๊ฐ๋ฐ ์์ฐ์ฑ์ ํฅ์์ํค๋ ๋ฐ ํฐ ๋์์ ์ค๋๋ค. ๋ํ, ๋ฒ์ ๊ด๋ฆฌ ์์คํ (Git)์ ์ฌ์ฉํ์ฌ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๊ณ , ํ์ ์ ์ฉ์ดํ๊ฒ ํ ์ ์์ต๋๋ค.
๊ฐ๋ฐํฑ๊น๊ธฐ ์ ์ฉ ์ฌ๋ก
์ค์ ๋ก ๊ฐ๋ฐํฑ๊น๊ธฐ๋ฅผ ์ ์ฉํ์ฌ ์ฑ๊ณต์ ๊ฑฐ๋ ์ฌ๋ก๋ ๋ฌด์ํ ๋ง์ต๋๋ค. ๋ช ๊ฐ์ง ๋ํ์ ์ธ ์ฌ๋ก๋ฅผ ์๊ฐํฉ๋๋ค.
๋ทํ๋ฆญ์ค (Netflix)
๋ทํ๋ฆญ์ค๋ Spinnaker๋ผ๋ ์คํ ์์ค CI/CD ํ๋ซํผ์ ๊ฐ๋ฐํ์ฌ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ์๋ํํ์ต๋๋ค. ์ด๋ฅผ ํตํด ํ๋ฃจ์ ์๋ฐฑ ๋ฒ์ ๋ฐฐํฌ๋ฅผ ์ํํ ์ ์๊ฒ ๋์๊ณ , ๊ฐ๋ฐ ์๋๋ฅผ ํ๊ธฐ์ ์ผ๋ก ํฅ์์์ผฐ์ต๋๋ค.
๊ตฌ๊ธ (Google)
๊ตฌ๊ธ์ Code Review๋ฅผ ํตํด ์ฝ๋ ํ์ง์ ์ ์งํ๊ณ , ์ง์ ๊ณต์ ๋ฅผ ํ์ฑํํ๊ณ ์์ต๋๋ค. ๋ชจ๋ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ๋์ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฝ๋์ ์์ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํ๋ณดํ๊ณ ์์ต๋๋ค.
์ฌ๋ (Slack)
์ฌ๋์ ๋ฆฐํธ ๋๊ตฌ๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ์ฌ ์ฝ๋ ์คํ์ผ์ ์ผ๊ด์ฑ ์๊ฒ ์ ์งํ๊ณ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ , ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๋ฐ๊ฒฌํ์ฌ ๊ฐ๋ฐ ํจ์จ์ฑ์ ๋์ด๊ณ ์์ต๋๋ค.
๊ฐ๋ฐํฑ๊น๊ธฐ, ์ด๋ป๊ฒ ์์ํด์ผ ํ ๊น?
๊ฐ๋ฐํฑ๊น๊ธฐ๋ฅผ ์์ํ๋ ๊ฒ์ ์ด๋ ต์ง ์์ต๋๋ค. ์์ ๊ฒ๋ถํฐ ์์ํ์ฌ ์ ์ง์ ์ผ๋ก ๊ฐ์ ํด ๋๊ฐ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
ํ์ฌ ๊ฐ๋ฐ ํ๊ฒฝ ๋ถ์
๊ฐ์ฅ ๋จผ์ , ํ์ฌ ์์ ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ถ์ํด์ผ ํฉ๋๋ค. ์ด๋ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง, ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ๋ฐ๋ฅด๊ณ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ค ๋ถ๋ถ์์ ์ด๋ ค์์ ๋๋ผ๊ณ ์๋์ง๋ฅผ ํ์ ํด์ผ ํฉ๋๋ค.
๊ฐ์ ๋ชฉํ ์ค์
๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ๊ฐ์ ๋ชฉํ๋ฅผ ์ค์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, โ๋น๋ ์๊ฐ์ 50% ๋จ์ถํ๋คโ, โ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์ฃผ 1ํ ์ด์ ์ค์ํ๋คโ, โ๋ฆฐํธ ๋๊ตฌ๋ฅผ ๋์ ํ์ฌ ์ฝ๋ ์คํ์ผ์ ๊ฐ์ ํ๋คโ ๋ฑ์ ๋ชฉํ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
์ ์ง์ ์ธ ๊ฐ์
๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ์ ์ง์ ์ผ๋ก ๊ฐ์ ํด ๋๊ฐ๋๋ค. ํ ๋ฒ์ ๋ชจ๋ ๊ฒ์ ๋ฐ๊พธ๋ ค๊ณ ํ๊ธฐ๋ณด๋ค๋, ์์ ๊ฒ๋ถํฐ ์์ํ์ฌ ํจ๊ณผ๋ฅผ ํ์ธํ๊ณ , ์ ์ฐจ ๋ฒ์๋ฅผ ํ๋ํด ๋๊ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ง์์ ์ธ ํ์ต
๊ฐ๋ฐ ๊ธฐ์ ์ ๋์์์ด ๋ณํํฉ๋๋ค. ์๋ก์ด ๋๊ตฌ์ ๊ธฐ์ ์ ํ์ตํ๊ณ , ์์ ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ์ฉํ๋ ๋ ธ๋ ฅ์ด ํ์ํฉ๋๋ค. ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ์ ์ฐธ์ฌํ์ฌ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค๊ณผ ์ ๋ณด๋ฅผ ๊ณต์ ํ๊ณ , ๊ฒฝํ์ ๋๋๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.
๊ฐ๋ฐํฑ๊น๊ธฐ๋ฅผ ์ํ ์ถ์ฒ ๋๊ตฌ
๊ฐ๋ฐํฑ๊น๊ธฐ๋ฅผ ์ํ ๋ค์ํ ๋๊ตฌ๋ค์ด ์กด์ฌํฉ๋๋ค. ๋ช ๊ฐ์ง ์ถ์ฒ ๋๊ตฌ๋ฅผ ์๊ฐํฉ๋๋ค.
* IDE: Visual Studio Code, IntelliJ IDEA, Eclipse
* ๋ฒ์ ๊ด๋ฆฌ ์์คํ
: Git, GitHub, GitLab
* CI/CD: Jenkins, Travis CI, CircleCI, GitLab CI
* ๋ฆฐํฐ: ESLint, Stylelint, Pylint
* ์ฝ๋ ํฌ๋งคํฐ: Prettier, Black
* ์ฝ๋ ๋ฆฌ๋ทฐ: GitHub Pull Requests, GitLab Merge Requests, Bitbucket Pull Requests
๋ง๋ฌด๋ฆฌ
์, ์ค๋ โ๊ฐ๋ฐํฑ๊น๊ธฐโ์ ๋ํด ์์ธํ ์์๋ดค์ต๋๋ค. ๊ฐ๋ฐํฑ๊น๊ธฐ๋ ๋จ์ํ ๊ฐ๋ฐ ์๋๋ฅผ ๋์ด๋ ๊ฒ์ ๋์ด, ์ฝ๋ ํ์ง์ ๊ฐ์ ํ๊ณ , ํ์ ์ ์ฆ์งํ๋ฉฐ, ๊ฐ๋ฐ์์ ๋ง์กฑ๋๋ฅผ ๋์ด๋ ๋ฐ ๊ธฐ์ฌํฉ๋๋ค. ์ง๊ธ ๋น์ฅ ๋ชจ๋ ๊ฒ์ ๋ฐ๊ฟ ํ์๋ ์์ต๋๋ค. ์์ ๊ฒ๋ถํฐ ์์ํ์ฌ ์ ์ง์ ์ผ๋ก ๊ฐ์ ํด ๋๊ฐ๋ค ๋ณด๋ฉด, ์ด๋์ ์ฌ๋ฌ๋ถ๋ โ๊ฐ๋ฐํฑ๊น๊ธฐโ์ ํจ๊ณผ๋ฅผ ์ค๊ฐํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ด์ ๋น์ ์ ํฑ์ ๊ฐ ์๊ฐ์ ๋๋ค!
์ค๋ ๋ฐฐ์ด ๋ด์ฉ๋ค์ ๋ฐํ์ผ๋ก, ์ฌ๋ฌ๋ถ๋ง์ โ๊ฐ๋ฐํฑ๊น๊ธฐโ ์ ๋ต์ ์ธ์๋ณด์ธ์. ๊ทธ๋ฆฌ๊ณ ๋ ํจ์จ์ ์ด๊ณ ์ฆ๊ฑฐ์ด ๊ฐ๋ฐ ๊ฒฝํ์ ๋ง๋ค์ด๋๊ฐ์๊ธธ ๋ฐ๋๋๋ค. ๊ถ๊ธํ ์ ์ด ์๋ค๋ฉด ์ธ์ ๋ ์ง ๋๊ธ๋ก ๋ฌธ์ํด์ฃผ์ธ์. ํจ๊ป ์ฑ์ฅํ๋ ๊ฐ๋ฐ์๊ฐ ๋๋๋ก ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค! ๊ทธ๋ผ ๋ค์ ํฌ์คํ ์์ ๋ ๋ง๋์!
์ง๊ธ ํ์ธํ์ง ์์ผ๋ฉด ๋์น ์ ์์ต๋๋ค. ๊ฐ๋ฐํฑ๊น๊ธฐ์ ๋ํด ๋ ๋ง์ ํต์ฌ ์ ๋ณด ์์๋ณด๊ธฐ!
๐ ์ง๊ธ ๋ฐ๋ก ํ์ธํ๊ธฐ