ํด๋น ๊ธ์ Jenkins์ Github Webhook์ ์ด์ฉํ CICD ํ์ดํ๋ผ์ธ ๊ตฌ์ฑํ๊ธฐ ์๋ฆฌ์ฆ ์ ๋๋ค. ์์ธํ ์ฌํญ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!
๋ง์ฝ ํด๋น ์ค์ต ๋ด์ฉ์ ์ฝ๋๊ฐ ๊ถ๊ธํ๋ค๋ฉด ํ๋ก์ ํธ ๊นํ๋ธ ์์ ํ์ธํ ์ ์์ต๋๋ค.
- 1ํธ ์๋ฆฌ์ฆ๋ฅผ ์์ํ๋ฉฐ :: ์ปจํ ์ธ ๊ฐ์์ ๋๊ธฐ
- 2ํธ ํ๋ก ํธ์๋ ๊ฐ๋ฐํ๊ธฐ :: ๋ฆฌ์กํธ์ axios
- 3ํธ ๋ฐฑ์๋ ๊ฐ๋ฐํ๊ธฐ :: SpringBoot ์ h2
- 4ํธ ec2 ์์ฑ ๋ฐ Jenkins ์ค์น :: AWS EC2๋ก Jenkins ์๋ฒ ๋ง๋ค๊ธฐ
- 5ํธ Dockerizing ๋ฐ Nginx ์ค์ :: ๋ฐฐํฌ๋ฅผ ์ํ ๋์ปค ๋น๋์ Nginx์ ๋ฆฌ๋ฒ์ค ํ๋ก์
- 6ํธ ์นํ ์ค์ ํ๊ธฐ :: Github Webhook ์ฐ๋ํ๊ธฐ
- 7ํธ pipeline์ผ๋ก ๋ฐฐํฌํ๊ธฐ :: Jenkins Pipeline Script ์์ฑํ๊ธฐ
Jenkins์ Github Webhook์ ์ด์ฉํ CICD ํ์ดํ๋ผ์ธ ๊ตฌ์ฑํ๊ธฐ ์๋ฆฌ์ฆ๋ฅผ ์์ํ๋ฉฐ...
๋ด๊ฐ ์ฒ์์ผ๋ก cicd์ ๊ด์ฌ์ ๊ฐ์ก๋ ํ๋ก์ ํธ๋ ์ด๋ค ํ ์์ ์ฐ์ต์ค์ ํํ์ด์ง๋ฅผ ๋ง๋ค์ด์ฃผ๋ฉด์๋ถํฐ์๋ค.
๊ทธ ๋ ๋น์์๋ Travis CI์ AWS์ CodeDeploy๋ฅผ ์ด์ฉํ์๋๋ฐ, ๊ทธ ๊ณผ์ ์ด ๋๋ฌด๋๋ ์ฌ๋ฏธ์์๊ณ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋๋ ๊ฒ์ด ๊ฟ์ธ ๋์๊ฒ ๋ฐ๋ธ์ต์ค ์์ง๋์ด๋ ์ด๋จ๊น? ํ๋ ์๊ฐ์ผ๋ก ํ์ฅ์์ผ์ฃผ์๋ ๊ฒฝํ์ด์๋ค.
์ฌ์ค ์ฐ๋ฆฌ๋ ์๋ก์ด ๊ธฐ์ ์ ๋ฐฐ์ฐ๊ธฐ์ ์กฐ๊ธ ํ๋ ๋ถ๋ถ์ด ์์ง ์์ ์กด์ฌํ๋ค.
์ฐ์ Official Docs ์์ฒด๊ฐ ์์ด๋ก ๋์ด์๊ธฐ๋ ํ๊ณ , ์ ์ ์ ์ ์ฅ์์ ๋น์ฅ ์ทจ์ ์์ ์ํ๋ ๊ฒ์ ์๋ก์ด ๊ธฐ์ ๋ณด๋ค๋ ๊น์ด ์๋ ์ดํด๋ฅผ ์ฃผ๋ก ๋ณด๊ธฐ ๋๋ฌธ์ CICD ์ ๋ํด์ ์ด์ผ๊ธฐ๋ฅผ ๋ค์ด๋ดค๋ ๋ํ์ ๊ฐ๋ฐ์๋ค์ ์์ด๋ ์ค์ ๊ตฌ์ฑํด๋ณธ ํ์๋ค์ ๋๋ฌผ ๊ฒ์ด๋ผ๊ณ ์๊ฐ์ด ๋ ๋ค.
๋๋ CICD๋ฅผ ๊ตฌ์ฑํด๋ณด๊ณ ๊ฒฝํํ๋ ๊ฒ ์์ฒด๋ฅผ ํ๋์ ์คํ ๊ทธ ์ด์์ผ๋ก ์๊ฐํ๋ค.
์ด ๊ณผ์ ์์ ์น ์ํคํ ์ฒ์ ๋ฐฉํฅ์ฑ๊ณผ ๊ตฌ์กฐ์ ํ๋ฆ์ ๋ํด์ ์ดํดํ๋ ๊ทธ ์์ฒด์ ์ฌ๋ฏธ๊ฐ ๋ ์กด์ฌํ๋ค.
ํ์ง๋ง ์์ ์ด์ผ๊ธฐํ๋ ์์ด์ ๋ฌธ์ ๋ ๊ทธ๋ ๊ณ ์ฌ๋ฌ ์ด์ ๋๋ฌธ์ ํด๋ณด๊ณ ๋ ์ถ์ผ๋ ํ ์๊ฐ์ด ์๊ณ ์ด๋ค ์ฑ์ ๊ฐ์ง๊ณ CICD๋ฅผ ํด์ผํ ์ง ๋ชจ๋ฅด๋ ์ฌ๋๋ค์ ์ํด์ ์ด ์๋ฆฌ์ฆ๋ฅผ ๋ง๋ค๊ฒ ๋์๋ค
์ฌ์ค์ ์ ๊ณ์ ํ์ค์ด Jenkins๋ผ๊ณ ์ด๋์ ๊ฐ ๋ค์๋ ์ ์ด ์๋ค.
๋๋ Travis CI์ CodeDeploy ๋ง ํด๋ณด์์๊ณ Jenkins ์ ๋ํด์๋ '๋ค์์ ํด๋ด์ผ ํ๋ ๊ฒ' ์ฏค์ด์๋๋ฐ, ํ์ฌ ํ๋์ค์ธ BOB ์์ CICD ํ์ดํ๋ผ์ธ์ ๋ํ ์์ ์ด ์์๊ณ , ํด๋น ์์ ์์ ๋ฃ๊ณ ๊ณต๋ถํ๋ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ง์ ๋ด๊ฐ ์ฑ์ ๋ง๋ค๊ณ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํด๋ณด๋ ๊ฒ์ผ๋ก ์ด๋ฒ ์๋ฆฌ์ฆ๋ฅผ ์ฑ์ ์๋ค.
์ด ๊ธ์ ๋ณด๊ณ ๋ถ๋ ๋ณธ์ธ์ ๊ฐ๋ฐ ๊ฒฝํ๊ณผ ์ญ๋์์ ๋ง์ ๋์์ด ๋๊ธธ ๋ฐ๋ผ๋ฉฐ ์๋ฆฌ์ฆ๋ฅผ ์์ํด๋ณด๋๋ก ํ๊ฒ ๋ค.
ํด๋น ์๋ฆฌ์ฆ๋ฅผ ์ํด ํ์ํ ์ญ๋
์ด๋ฒ ์๋ฆฌ์ฆ์์๋ ์น ๊ฐ๋ฐ ๋๊ตฌ ๋ฐ ํ๋ ์์ํฌ & ์ํคํ ์ฒ์ ๋ํ ์ธ๊ธ์ด ๋ง์ด ๋์จ๋ค.
zero base ์ํ ์์ ์ด ์๋ฆฌ์ฆ๋ฅผ ๋ณธ๋ค๋ฉด ๋งค์ฐ ํ๋ค ์๋ ์๊ณ ์ด์ฉ๋ฉด ๋ฐ๋ผ์ฌ ์ ์์ ์๋ ์๋ค.
ํ์ง๋ง ์ผ๋จ ๋๊น์ง ์์ฃผํ๋ค๋ฉด CICD์ ๋ํ ์ฒซ ๊ฑธ์์ ๋ด๋๋ ๊ฒ์ด๋ ๋งค์ฐ ์ข์ ๊ฒฝํ์ด ๋ ๊ฒ์ด๋ผ๊ณ ์ฝ์ํ ์ ์๋ค.
์ด ์๋ฆฌ์ฆ์์๋ ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ๋ชจ๋ ์ง์ ๊ตฌ์ฑํ๋ค.
ํ์ง๋ง ์ด ์๋ฆฌ์ฆ๊ฐ ์น ๊ฐ๋ฐ ์๋ฆฌ์ฆ๊ฐ ์๋๋ผ CICD ๊ตฌ์ฑ์ด ๋ชฉ์ ์ด๋ผ์ ์น์ ๋ํ ๋ด์ฉ์ ํ์ ์กฐ๊ธ ๋ ์ค์ ์์ ์ด๋ค.
๋ฌผ๋ก ๋๊ธ๋ก ๋ฌผ์ด๋ณธ๋ค๋ฉด ์น์ ํ ๋ต๋ณํด๋๋ ค์ฉ ใ ใ
๊ธฐ์ ์คํ์ ๋ค์๊ณผ ๊ฐ๋ค.
๊ธฐ์ ์คํ
- react
- create-react-app
- styled-components
- axios
- jest
- Spring Boot
- Spring Data JPA
- JUnit5
- Nginx
- ๋ฆฌ๋ฒ์ ํ๋ก์ ์ฉ๋
- nginx.conf
- Docker
- docker ๊ธฐ๋ณธ ๋ช ๋ น์ด
- EC2
- ssh ์ ์
- ๋ณด์ ๊ทธ๋ฃน
์ค๋น๋ฌผ
์ค๋น๋ฌผ์ ์ฐ์ AWS ๊ณ์ ์ด ํ์ํ๋ค.
์ฐ๋ฆฌ๋ Free Tier๋ฅผ ์ด์ฉํ์ง ์๊ณ T2-medium ์ ์ฌ์ฉํ ๊ฒ์ด๋ผ ์ฝ๊ฐ์ ๋๋ ํ์ํ์ง๋ง ์ด๋ ํฌ๊ฒ ๋ฌด๋ฆฌ๊ฐ ๊ฐ์ง ์๋ ์ ์ผ ๊ฒ์ผ๋ก ์์ํ๊ณ , Github Id๋ ๋ฌผ๋ก ์์ด์ผ ํ๋ค.
์๋ง ์ด ๊ธ์ ์ฝ๋ ๋๋ถ๋ถ์ ์๊ฒ ์ง๋ง ๋ฌผ๋ก ์ฝ๋ ํธ์ง๊ธฐ, vscode๋ intellij ๊ฐ ํ์ํ๋ค.
๋ ssh ์ ์์ ์ํ SSH Client๋ ์์ด์ผ ํ๋ค.
windows ๋ผ๋ฉด putty๋ฅผ ์ถ์ฒํ์ง๋ง ์์ด๋ ์น ์ฝ์์์ ์ ๊ทผํ ์ ์์ผ๋ ๋ญ ํฌ๊ฒ ๋ฌธ์ ๊ฐ ๋์ง๋ ์์ ๊ฒ์ด๋ค.
์ค์ต ๋ฐ ์๋ฆฌ์ฆ ํ๋ฆ
์ฐ๋ฆฌ๋ ์์ฃผ ๊ฐ๋จํ TODO List๋ฅผ ๋ง๋ค ๊ฒ์ด๋ค.
์ด Todo List๋ฅผ ์ง์ ํ๋ก ํธ UI๋ ๊ฐ๋ฐํ๊ณ ์คํ์ผ๋ง๋ ํด๋ณด๋ฉฐ ํต์ ๋ชจ๋์ ๋ง๋ค ๊ฒ์ด๊ณ , ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ ์ง ํน์ ๊ฐฑ์ ์ํฌ ์ ์๋ Backend API๋ ๋ง๋ค ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ๋ง์ฝ '๋๋ ๋ฆฌ์กํธ๋ฅผ ๋ชฐ๋ผ..' ํน์ '๋๋ ์คํ๋ง์ ๋ชฐ๋ผ' ํน์ '๋๋ ๋ ๋ค ๋ชฐ๋ผ' ํ๋ค๋ฉด ๋ฐ๋ก ์ฑํฐ 4๋ก ๋์ด๊ฐ์ ๋ด github์ ์๋ ์์ค์ฝ๋๋ฅผ pull ํด์ ์์ํ๋ฉด ๋๋ค.
์ค์ํ ๊ฒ์ CICD๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ ์์ฒด์ด์ง ํฌ์ปค์ค๊ฐ ์น์ผ๋ก ๊ฐ๋ฉด ์๋๋ค.
๋ํ ๋ฐฐํฌ๋ ๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ํ์ง ์๋๋ค.
์ฌ์ค ํด๋น ์ค์ต์ Blue-Green ๋ฐฐํฌ๋ก ๋ฐฉํฅ์ฑ์ ์ก์ผ๋ ค ํ์ผ๋, ๊ฐ์ธ์ ์ธ ์ผ์ ๋ฌธ์ ๋ก ๋จ์ํ CICD๋ง ๊ตฌ์ฑํ๋ ๊ฒ์ผ๋ก ํ์๋ค.
๋ง์ฝ ์ถํ์ ๋ฐ์์ด ์ข๋ค๋ฉด Blue-Green๊ณผ Rolling Update ๊น์ง ์ถ๊ฐํ๋ ค ํ๋ค.
๋์ผ๋ก..
์ ๋ ์์ง ๋ํ์์ ๋๋ค. ์ค์ ์ ๋ฌด์์ ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐ์ด ๋๋์ง ์ ํ ๊ฒฝํํด๋ณด์ง ๋ชปํ์ด์ ใ ใ ..
๊ทธ๋์ ์ ๊ฐ ํ๋ ์ค์ต์ด ์ ๋ฐ์ ์ผ๋ก ๋นํจ์จ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋๊ฑฐ๋ ์ข์ง ๋ชปํ ๋ฐฉ๋ฒ์ผ๋ก ์งํ๋ ์๋ ์์ง๋ง ๋๋ฆ ์ถ๋ฆฌ๊ณ ์ถ๋ ค์ ๊ตฌ์ฑํ ์ปจํ ์ธ ์ด๋ ๋ฐ๋ผ ํ๋ค ๋นํจ์จ์ ์ธ ๊ตฌ์กฐ๋ ์๋ชป๋๊ฒ ์๋ค๋ฉด ๋ฐ๋ก๋ฐ๋ก ์ง์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค..!
์ด๋ฅผ ๋๊ทธ๋ฝ๊ฒ ์ดํดํด์ค๋ค๋ฉด ๊ฐ์ฌํ ๊ฒ ๊ฐ์์ โบ๏ธ
์ด์ฌํ ์ค๋นํ ์๋ฆฌ์ฆ์ด๋ ๋ถ๋ ๋ง์ ๋์์ด ๋์ จ์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค!
๋๊ธ