๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋„ ๋”ฐ๋ผํ•˜๋Š” GitHub Actions CI ํŒŒ์ดํ”„๋ผ์ธ ์„ค์ • ๊ฐ€์ด๋“œ

by ์—์ด์—์Šค๋น„ํƒ€ 2025. 4. 28.
๋ฐ˜์‘ํ˜•

์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋„ ๋”ฐ๋ผํ•˜๋Š” GitHub Actions CI ํŒŒ์ดํ”„๋ผ์ธ ์„ค์ • ๊ฐ€์ด๋“œ๐Ÿš€

์•ˆ๋…•ํ•˜์„ธ์š”! ๐Ÿ˜ƒ ํ˜น์‹œ ‘GitHub Actions’๋ผ๋Š” ๋ง์„ ๋“ค์–ด๋ดค์ง€๋งŒ, ‘์ด๊ฒŒ ๊ณผ์—ฐ ๋ญ์ง€?’ ํ•˜๋ฉด์„œ ๋ง‰๋ง‰ํ–ˆ๋˜ ์  ์—†๋‚˜์š”? ๐Ÿค” ์˜ค๋Š˜์€ ๊ฐœ๋ฐœ ์ดˆ๋ณด์ž๋„ ์‰ฝ๊ฒŒ ๋”ฐ๋ผ ํ•  ์ˆ˜ ์žˆ๋Š” GitHub Actions๋ฅผ ํ™œ์šฉํ•œ CI(์ง€์†์  ํ†ตํ•ฉ) ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์„ ์นœ์ ˆํ•˜๊ฒŒ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”! ๐Ÿ’ป๐Ÿ’ก

์ด ๊ธ€ ํ•˜๋‚˜๋ฉด, ์™€์šฐ! ์ด์ œ๋Š” ๋‚ด ํ”„๋กœ์ ํŠธ์— ์ž๋™ ๋นŒ๋“œ(๋นŒ๋“œ ์ž๋™ํ™”), ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ๊นŒ์ง€ ๐Ÿค–๐Ÿ’ฅ ์™„๋ฒฝํ•˜๊ฒŒ ์…‹์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ˜Žโœจ

์ž, ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”? ๐ŸŒˆ


๐Ÿ“Œ GitHub Actions๋ž€? ๐Ÿค”

  • โœ… GitHub ๋‚ด์—์„œ ์ œ๊ณตํ•˜๋Š” CI/CD ๋„๊ตฌ๋กœ์„œ, ์ฝ”๋“œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋นŒ๋“œ ๋˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ!
  • โœ… ๊ฐœ๋ฐœ์ž ์† ๋งŽ์ด ์•ˆ ๊ฐ€๋„ ์ž๋™ํ™” ๊ฐ€๋Šฅ! โœจ
  • โœ… ์˜คํ”ˆ์†Œ์Šค, ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ, ํšŒ์‚ฌ ํ”„๋กœ์ ํŠธ ๋ชจ๋‘ ํ™œ์šฉ ๊ฐ€๋Šฅ

๐Ÿ”ฅ ์™œ GitHub Actions๋ฅผ ์จ์•ผ ํ• ๊นŒ? ๐Ÿ’ญ

  • โœ… ํŽธ๋ฆฌํ•œ ์—ฐ๋™์„ฑ: GitHub ์ €์žฅ์†Œ ๋ฐ”๋กœ ์—ฐ๋™ํ•˜์—ฌ ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • โœ… ๋ฌด๋ฃŒ ์ œ๊ณต๋Ÿ‰ ์ถฉ๋ถ„: ๋Œ€๋ถ€๋ถ„์˜ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ๋ฌด์ œํ•œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • โœ… ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์šฉ์ด: ๋‹ค์–‘ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์™€ ์•ก์…˜ ์ œ๊ณต
  • โœ… ์ž๋™ํ™”๋กœ ์‹œ๊ฐ„ ์ ˆ์•ฝ + ์‹ค์ˆ˜ ๋ฐฉ์ง€! ๐Ÿฅณ

๐Ÿ› ๏ธ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ค€๋น„๋ฌผ ์ฒดํฌ๋ฆฌ์ŠคํŠธ! โœ…

  • ๐Ÿ’ป GitHub ๊ณ„์ • (๋‹น์—ฐํžˆ ํ•„์ˆ˜! ๐Ÿ˜‰)
  • ๐Ÿ“ ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ (๊ณต๊ฐœ ๋˜๋Š” ๋น„๊ณต๊ฐœ ์„ ํƒ)
  • ๐Ÿงฉ ๊ธฐ์ดˆ์ ์ธ Git & GitHub ์‚ฌ์šฉ๋ฒ• ์ดํ•ด
  • โš™๏ธ (์„ ํƒ) Docker, Node.js, Python ๋“ฑ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ  ํ™˜๊ฒฝ ์ดํ•ด

๐Ÿšฆ GitHub Actions CI ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„๋ณ„ ์„ธํŒ… ๊ฐ€์ด๋“œ

1. ๐Ÿ’ก ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ

  • โœ… .github/workflows ํด๋” ๋งŒ๋“ค๊ธฐ
  • โœ… ci.yml ๋˜๋Š” build.yml ๋“ฑ ์ด๋ฆ„์˜ ํŒŒ์ผ ์ƒ์„ฑ
  • โœ… ํŒŒ์ผ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ž…๋ ฅ

yaml
name: CI ํŒŒ์ดํ”„๋ผ์ธ ๐Ÿš€

on:
push:
branches:
- main # main ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œํ•˜๋ฉด ์ž๋™ ์‹œ์ž‘
pull_request:
branches:
- main

jobs:
build:
runs-on: ubuntu-latest # ์šฐ๋ถ„ํˆฌ ์ตœ์‹  ๋ฒ„์ „ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…
steps:
- name: ์ฒดํฌ์•„์›ƒ โœ‚๏ธ
uses: actions/checkout@v3 # ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์ž‘์—…
- name: Node.js ์„ค์น˜ ๐Ÿ› ๏ธ
uses: actions/setup-node@v3
with:
node-version: '14' # ์‚ฌ์šฉํ•˜๋Š” Node ๋ฒ„์ „ ์ž…๋ ฅ
- name: ์˜์กด์„ฑ ์„ค์น˜ ๐Ÿ“ฆ
run: npm install
- name: ํ…Œ์ŠคํŠธ ์‹คํ–‰ โœ…
run: npm test

โญ ์ด๋กœ์จ ๊ธฐ๋ณธ์ ์ธ ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์™„์„ฑ! ๐ŸŽ‰

2. ๐Ÿงช ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ์ถ”๊ฐ€ํ•˜๊ธฐ

  • โœ… ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ: package.json์— test ๋ช…๋ น์–ด ๋“ฑ๋ก
  • โœ… ์›Œํฌํ”Œ๋กœ์šฐ์— ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„ ์ถ”๊ฐ€

yaml

  • name: ํ…Œ์ŠคํŠธ ์‹คํ–‰ โœ…
    run: npm test
  • โญ Tip!: ์‹คํŒจ ์‹œ ์•Œ๋ฆผ ๋ฐ›๊ธฐ ์œ„ํ•ด ์Šฌ๋ž™(Slack), ์ด๋ฉ”์ผ ์—ฐ๋™๋„ ๊ฐ€๋Šฅ ๐Ÿ’Œ

3. ๐Ÿ”ง ๋ฐฐํฌ ์ž๋™ํ™” ๊ตฌ์„ฑํ•˜๊ธฐ

  • โœ… ๋ฐฐํฌํ•  ์„œ๋ฒ„ ๋˜๋Š” ํด๋ผ์šฐ๋“œ ์—ฐ๋™
  • โœ… ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ๋ช…๋ น์–ด ์ž‘์„ฑ
  • โœ… ์ž๋™ ๋ฐฐํฌ ์˜ˆ์‹œ

yaml

  • name: ๋ฐฐํฌ ์‹œ์ž‘ ๐Ÿš€
    run: |
    scp -r ./dist user@yourserver:/var/www/html

โญ ์ฃผ์˜!: ๋ฐฐํฌ ์ „ ์•ˆ์ „ ์žฅ์น˜๋กœ ๋ฐฐํฌ ์กฐ๊ฑด ์ œํ•œํ•˜๋Š” ๊ฒƒ๋„ ์ถ”์ฒœ! ๐Ÿ“œ


โš ๏ธ ์ž์ฃผ ํ•˜๋Š” ์‹ค์ˆ˜ ๋ฐ ํ•ด๊ฒฐ์ฑ… ์ฒดํฌ๋ฆฌ์ŠคํŠธ

โœ… ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ ์œ„์น˜๊ฐ€ .github/workflows ์•ˆ์— ์ •ํ™•ํžˆ ๋“ค์–ด๊ฐ€์•ผ ํ•จ!
โœ… trigger ์กฐ๊ฑด(์–ธ์ œ ์‹œ์ž‘ํ• ์ง€) ์ž˜ ๋งž์ถฐ์•ผ ํ•จ!
โœ… ํ™˜๊ฒฝ ๋ณ€์ˆ˜/์‹œํฌ๋ฆฟ(SECRET) ๋ณด์•ˆ ์ค‘์š”!
โœ… ๋นŒ๋“œ ์—๋Ÿฌ ์‹œ ๋กœ๊ทธ ๊ผผ๊ผผํžˆ ํ™•์ธ!
โœ… ์ž‘์—… ์‹คํŒจ ์‹œ ์•Œ๋ฆผ ๋ณด๋‚ด๊ธฐ ์„ค์ • ์ถ”์ฒœ! ๐Ÿ“ฉ


๐ŸŒŸ ์‹ค์ „ TIP! ์ดˆ๋ณด๋„ ์‰ฝ๊ฒŒ ๋”ฐ๋ผ ํ•˜๋Š” ํŒ ๊ณต๊ฐœ

  • โœ… ๊ถŒ์žฅ ์•ก์…˜ ํ™œ์šฉ: ๋ณต์žกํ•œ ์ž‘์—…์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋งŒ๋“  ์•ก์…˜ ์กฐํšŒํ•ด์„œ ์จ๋ณด์„ธ์š”!
  • โœ… ๋น„์šฉ ๊ฑฑ์ • NO! ๋ฌด๋ฃŒ ์šฉ๋Ÿ‰ ์ตœ๋Œ€ ํ™œ์šฉํ•˜๊ธฐ
  • โœ… ๋‹จ๊ณ„๋ณ„ ์ ๊ฒ€: ์ž‘์€ ๋‹จ์œ„๋กœ ๋งŒ๋“ค์–ด์„œ ์ฒดํฌํ•˜๊ธฐ (์ฝ”๋“œ ํ•˜๋‚˜ ์ˆ˜์ • ํ›„ ๋ฐ”๋กœ ํ™•์ธ)
  • โœ… ์ž๋™ํ™”๋งŒ์ด ๋‹ต!: ๋ฐ˜๋ณต๋˜๋Š” ์ž‘์—…์€ ๋ฐ˜๋“œ์‹œ ์ž๋™ํ™”ํ•˜์„ธ์š”!

๐Ÿ’– ๊ฒฐ๋ก  ์ •๋ฆฌ์™€ ๋‹ค์Œ ๋‹จ๊ณ„ ์ถ”์ฒœ ๐ŸŽฏ

โœ… ํ•ต์‹ฌ ํฌ์ธํŠธ ์ •๋ฆฌ

  • ๊นƒํ—ˆ๋ธŒ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” .github/workflows ํด๋”์— YAML ํŒŒ์ผ๋กœ ์ž‘์„ฑ!
  • ํ‘ธ์‹œ ์ด๋ฒคํŠธ์™€ PR์— ๋”ฐ๋ผ ์ž๋™ ์ˆ˜ํ–‰!
  • ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋“ฑ ๋‹ค์–‘ํ•œ ๋‹จ๊ณ„ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ!
  • ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์œผ๋กœ ๋‚˜๋งŒ์˜ CI/CD ๋žฉ ๋งŒ๋“ค๊ธฐ!

๐Ÿ“š ์ถ”๊ฐ€ ์ž๋ฃŒ ๋ฐ ๋งํฌ

๐Ÿ”ฅ ์ง€๊ธˆ ๋ฐ”๋กœ ์‹ค์Šต ์‹œ์ž‘ํ•ด์„œ, ๋‚ด ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๊ฒ€์ฆใ†๋ฐฐํฌํ•˜๋Š” ๋˜‘๋˜‘ํ•œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•ด๋ณด์„ธ์š”! ๐Ÿš€


๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๊ฑฐ๋‚˜, ๋” ๊นŠ์ด ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋˜๋Š” ์ชฝ์ง€ ์ฃผ์„ธ์š”! ๐Ÿ˜Šโœจ
ํ™”์ดํŒ…! ๐Ÿฅณ๐Ÿ’ป

์ด์ „ ๊ธ€ ๋ณด๊ธฐ!!

๋ฐ˜์‘ํ˜•