1์ธ ๊ฐ๋ฐ์์ CI/CD ๋ฌด์ค๋จ ๋ฐฐํฌ ๊ตฌ์ถ๊ธฐ: GitHub Actions๋ก FastAPI ์ค๋ผํด ํด๋ผ์ฐ๋ ์๋ฒ ์๋ํํ๊ธฐ
์น ์๋น์ค๋ฅผ ์ด์ํ๋ค ๋ณด๋ฉด ๋ฒ๊ทธ๋ฅผ ์์ ํ๊ฑฐ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผ ํ ์ผ์ด ๋งค์ผ๊ฐ์ด ์๊น๋๋ค. ์ด๊ธฐ์๋ ์ฝ๋๋ฅผ ์กฐ๊ธ ์์ ํ๊ณ ๋๋ฉด FileZilla ๊ฐ์ FTP ํ๋ก๊ทธ๋จ์ผ๋ก ํ์ผ์ ๋ฎ์ด์์ฐ๊ฑฐ๋, ๊น๋ง ํฐ๋ฏธ๋ ์ฐฝ(SSH)์ ์ด์ด ์ค๋ผํด ํด๋ผ์ฐ๋ ์๋ฒ์ ์ ์ํ ๋ค git pull์ ๋ฐ๊ณ ์๋ฒ๋ฅผ ๊ป๋ค ์ผ๋ ์์
์ ์๋์ผ๋ก ๋ฐ๋ณตํ์ต๋๋ค.
์ฒ์ ํ๋ ๋ฒ์ "๋ด๊ฐ ์ง์ ์๋ฒ๋ฅผ ์กฐ์ํ๊ณ ์์ด!"๋ผ๋ ๋ฌํ ์พ๊ฐ์ด ์์์ง๋ง, ํ๋ฃจ์ ์ด ๋ฒ์ฉ ๋ฐฐํฌ๋ฅผ ํ๋ค ๋ณด๋ ์ด์ผ๊ธฐ๊ฐ ๋ฌ๋ผ์ก์ต๋๋ค. ์คํ ํ๋๋ฅผ ๊ณ ์น๊ธฐ ์ํด ํฐ๋ฏธ๋์ ์ด๊ณ ๋ช ๋ น์ด๋ฅผ ์น๋ ๊ทธ 5๋ถ์ ๊ณผ์ ์ด ๋๋ฌด๋ ๊ท์ฐฎ์๊ณ , ํผ๊ณคํ ์๋ฒฝ์๋ ๋ช ๋ น์ด๋ฅผ ์๋ชป ์ ๋ ฅํด ์ฌ์ดํธ ์ ์ฒด๊ฐ ๋ค์ด๋๋ ์์ฐํ 'ํด๋จผ ์๋ฌ'๊น์ง ๋ฐ์ํ๊ณค ํ์ต๋๋ค.
"์ฝ๋๋ฅผ ๊นํ๋ธ(GitHub)์ ์ฌ๋ฆฌ๋ฉด, ๋๊ตฐ๊ฐ ์์์ ๋ด ์๋ฒ์ ์ ์ํด ์ต์ ์ฝ๋๋ก ์๋ฒ๋ฅผ ๊ป๋ค ์ผ์ฃผ๋ฉด ์ ๋ ๊น?" ์ด ๊ฒ์ผ๋ฅด์ง๋ง ํ๋ฅญํ ๊ฐ๋ฐ์์ ์๋ง์ ์คํํด ์ฃผ๋ ๋ง๋ฒ์ ๊ธฐ์ , CI/CD(๋ฐฐํฌ ์๋ํ) ํ์ดํ๋ผ์ธ ๊ตฌ์ถ๊ธฐ๋ฅผ ์ค๋ ๊ณต์ ํด ๋ณด๋ ค ํฉ๋๋ค.
1. CI/CD ํด์ ์ ํ: ์ ๋ฌด๊ฑฐ์ด ์ ํจ์ค(Jenkins) ๋์ GitHub Actions์ธ๊ฐ?
์๋ ๋ฐฐํฌ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด ๊ตฌ๊ธ๋ง์ ํด๋ณด๋ฉด ๊ฐ์ฅ ๋ง์ด ๋์ค๋ ๋จ์ด๊ฐ 'Jenkins(์ ํจ์ค)'์ ๋๋ค. ํ์ง๋ง ์ ํจ์ค๋ ์๋ฐ(Java) ๊ธฐ๋ฐ์ ๊ฝค ๋ฌด๊ฑฐ์ด ํ๋ก๊ทธ๋จ์ ๋๋ค. ๋ฌด๋ฃ๋ก ์ฌ์ฉํ๋ ์ค๋ผํด ํด๋ผ์ฐ๋ ํ๋ฆฌํฐ์ด ์ธ์คํด์ค(RAM 1GB)์ ์ ํจ์ค๊น์ง ์ฌ๋ ค์ ๋๋ฆฌ๊ธฐ์ ์๋ฒ๊ฐ ๊ฒฌ๋์ง ๋ชปํ๊ณ ๋ป์ด๋ฒ๋ฆด ํ๋ฅ ์ด 100%์์ต๋๋ค.
๊ทธ๋์ ์ ๊ฐ ์ ํํ ๋์์ GitHub Actions(๊นํ๋ธ ์ก์ )์ ๋๋ค. ์ ์ฝ๋๊ฐ ์ ์ฅ๋์ด ์๋ ๊นํ๋ธ ์์ฒด์์ ๋ฌด๋ฃ๋ก ๊ฐ์์ ์ปดํจํฐ๋ฅผ ๋น๋ ค์ฃผ๊ณ , ์ฝ๋๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ์ ๊ฐ ์ง์ ํ ์คํฌ๋ฆฝํธ๋ฅผ ๋์ ์คํํด ์ฃผ๋ ์์ฃผ ๊ณ ๋ง์ด ๋ ์์ด์ฃ . ์ ์๋ฒ ์์์ ์ ํ ๊ฐ์๋จน์ง ์์ผ๋ฉด์๋, ๊นํ๋ธ ์ ์ฅ์์ ์๋ฒฝํ๊ฒ ์ฐ๋๋๋ค๋ ์ ์ด 1์ธ ๊ฐ๋ฐ์์๊ฒ๋ ์ต๊ณ ์ ๋ฉ๋ฆฌํธ์์ต๋๋ค.
2. ๋ฐฐํฌ ์๋ํ์ ๋ก์ง ์ค๊ณ
ํ์ดํ๋ผ์ธ์ ์งค ๋๋ ๋จผ์ '์ฌ๋(๋)์ด ์๋์ผ๋ก ํ๋ ์ผ'์ ์์๋๋ก ๋์ดํด ๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ก์ปฌ(๋ด ์ปดํจํฐ)์์ ์์ ์ ๋ง์น๊ณ
main๋ธ๋์น์ ์ฝ๋๋ฅผpushํ๋ค.๊นํ๋ธ๊ฐ ์ด๋ฅผ ๊ฐ์งํ๊ณ , ๊ฐ์์ ์ฐ๋ถํฌ ์ปดํจํฐ๋ฅผ ์ผ ๋ค.
๊ฐ์์ ์ปดํจํฐ๊ฐ ๋ด ์ค๋ผํด ํด๋ผ์ฐ๋ ์๋ฒ์ SSH๋ก ์๊ฒฉ ์ ์ํ๋ค.
์ค๋ผํด ์๋ฒ ์์์
git pull์ ๋ฐ์ ์ต์ ์ฝ๋๋ฅผ ๋ฎ์ด์์ด๋ค.docker-compose up -d --build๋ช ๋ น์ด๋ฅผ ์คํํด ํ์ด์ฌ(FastAPI) ์๋ฒ๋ฅผ ์๋กญ๊ฒ ๋์ด๋ค.
์ด ํ๋ฆ์ ๊นํ๋ธ๊ฐ ์์๋ค์ ์ ์๋ ์ธ์ด(YAML)๋ก ๋ฒ์ญ๋ง ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
3. ์ค์ ์ ์ฉ: ๋ฐฐํฌ ์คํฌ๋ฆฝํธ(Workflow) ์์ฑํ๊ธฐ
์ FastAPI ํ๋ก์ ํธ ์ต์๋จ์ .github/workflows/deploy.yml ์ด๋ผ๋ ํด๋์ ํ์ผ์ ๋ง๋ค๊ณ , ์๋์ ๊ฐ์ด ์๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด ์ฃผ์์ต๋๋ค.

์ฝ๋์์ ${{ secrets... }} ๋ถ๋ถ์ ์ ์๋ฒ์ IP๋ ์ํธ ํค๊ฐ ๋์ค์ ๋
ธ์ถ๋๋ฉด ์ ๋๊ธฐ ๋๋ฌธ์, ๊นํ๋ธ์ [Settings] -> [Secrets and variables] ๋ฉ๋ด์ ์์ ํ๊ฒ ์จ๊ฒจ๋ ํ๊ฒฝ๋ณ์๋ค์
๋๋ค. ์ด๋ ๊ฒ ํด๋๋ฉด ํดํน์ ์ํ ์์ด ์์ ํ๊ฒ ๊นํ๋ธ๊ฐ ์ ์๋ฒ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
4. ์ฒซ ์๋ ๋ฐฐํฌ์ ์พ๊ฐ: "์ง์ง ์์์ ์ผ์ง๋ค?"
์ฝ๋๋ฅผ ๋ชจ๋ ์์ฑํ๊ณ ๋จ๋ฆฌ๋ ๋ง์์ผ๋ก ๋ก์ปฌ ํฐ๋ฏธ๋์ git push๋ฅผ ์
๋ ฅํ์ต๋๋ค.
๊ทธ๋ฌ๊ณ ๋์ ๊นํ๋ธ ์ ์ฅ์์ [Actions] ํญ์ ๋ค์ด๊ฐ ๋ณด๋, ์ ๊ฐ ์ง ์คํฌ๋ฆฝํธ๊ฐ ๋
ธ๋์ ํฑ๋๋ฐํด๋ฅผ ๋๋ฆฌ๋ฉฐ ์๋ํ๊ธฐ ์์ํ์ต๋๋ค.
์ฝ 30์ด ๋ค, ํฑ๋๋ฐํด๊ฐ ์ด๋ก์ ์ฒดํฌ(โ) ๋งํฌ๋ก ๋ณํ์ต๋๋ค!
๊ธํ๊ฒ ์ ์น์ฌ์ดํธ ์ฃผ์๋ก ์ ์ํด ๋ณด์๋๋, ๋ฐฉ๊ธ ์ ๊ฐ ๋ก์ปฌ์์ ์์ ํ ์คํ๊ฐ ์๋ฒฝํ๊ฒ ๋ฐ์๋์ด ์ด์ ์๋ฒ์ ๋ฐฐํฌ๋์ด ์์์ต๋๋ค. ํฐ๋ฏธ๋ ์ฐฝ์ ์ด๊ณ , ์ ์ํ๊ณ , ๋ช
๋ น์ด๋ฅผ ์น๋ฉฐ ๊ธฐ๋ค๋ฆฌ๋ ์ง๋ฃจํ 10๋ถ์ ๊ณผ์ ์ด, ๊ทธ์ git push ๋ช
๋ น์ด ๋จ ํ๋์ 30์ด์ ๊ธฐ๋ค๋ฆผ์ผ๋ก ๋จ์ถ๋ ๊ฒ์
๋๋ค. ๋์์์ ์๋ํ์ ๊ธฐ์ ์ด ํผ์ณ์ง๋ ์๊ฐ์ด์์ต๋๋ค.
๋งบ์ผ๋ฉฐ: 1์ธ ๊ฐ๋ฐ์์๊ฒ ์๋ํ๋ '์ ํ์ด ์๋ ํ์'
ํํ๋ค ๋ฐฐํฌ ์๋ํ(CI/CD)๋ ๋ฉ์น๊ฐ ํฐ ์ค๋ฌด ํ์์๋ ์ฐ๋ ๊ฑฐ์ฐฝํ ๊ธฐ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ์คํ๋ ค ๋ชจ๋ ๊ฒ์ ํผ์์ ๋ค ํด๋ด์ผ ํ๋ 1์ธ ๊ฐ๋ฐ์์๊ฒ ์๊ฐ์ ๊ฐ์ฅ ์์คํ ์์์ ๋๋ค. ๋ฐฐํฌ์ ์๋ ๋ถํ์ํ ์๋์ง์ ์คํธ๋ ์ค๋ฅผ ์๊ปด์, ๋ ์ข์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ IT ์นผ๋ผ์ ์ฐ๋ ๋ฐ ์ง์คํด์ผ ํ๋๊น์.
"ํ ๋ฒ๋ ์๋์ผ๋ก ๋ฐฐํฌํด๋ณด์ง ์์ ์๋ ์์ด๋, ํ ๋ฒ๋ง ์๋ ๋ฐฐํฌ๋ฅผ ํด๋ณธ ์๋ ์๋ค."๋ผ๋ ๊ฐ๋ฐ์๋ค์ ๋๋ด์ด ๋ฌด์จ ๋ป์ธ์ง ์ด์ ์ผ ๋ผ์ ๋ฆฌ๊ฒ ์ดํดํ๊ฒ ๋์์ต๋๋ค.
ํน์ ์์ง๋ ๋งค๋ฒ ์๋ฒ์ SSH๋ก ์ ์ํด ์ง์ ์ฝ๋๋ฅผ ๋์ด์ค๊ณ ์๋ฒ๋ฅผ ๊ป๋ค ์ผ๋ ๋ ธ๋์ ๋ฐ๋ณตํ๊ณ ๊ณ์ ๊ฐ์? ๊ทธ๋ ๋ค๋ฉด ์ค๋ ๋น์ฅ GitHub Actions๋ฅผ ๋์ ํ์ฌ ์ฌ๋ฌ๋ถ์ ์์คํ ํด๊ทผ ์๊ฐ์ 10๋ถ ๋ ์๋น๊ฒจ ๋ณด์๊ธธ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค.
๐ฌ ๋๊ธ 0๊ฐ