Skip to main content

์ฝ”๋“œ ์Šค์บ”์„ ์œ„ํ•œ ๊ณ ๊ธ‰ ์„ค์ • ๊ตฌ์„ฑ

๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ๊ณ ๊ธ‰ ์„ค์ •์„ ๊ตฌ์„ฑํ•˜์—ฌ ๊ณ ๋„๋กœ ์‚ฌ์šฉ์ž ์ง€์ • ๊ฐ€๋Šฅํ•œ code scanning ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ์—์„œ ๋ณด์•ˆ ์•ฝ์ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์†Œ์œ ์ž, ์กฐ์ง ์†Œ์œ ์ž, ๋ณด์•ˆ ๊ด€๋ฆฌ์ž ๋ฐ ๊ด€๋ฆฌ์ž ์—ญํ• ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž

Code scanning์€ ๋‹ค์Œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์œ ํ˜•์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • GitHub.com์— ๋Œ€ํ•œ ํผ๋ธ”๋ฆญ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ
  • GitHub Code Security๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •๋œ GitHub Team์˜ ์กฐ์ง ์†Œ์œ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ

Code scanning์— ๋Œ€ํ•œ ๊ณ ๊ธ‰ ์„ค์ • ์ •๋ณด

code scanning์— ๋Œ€ํ•œ ๊ณ ๊ธ‰ ์„ค์ •์€ code scanning์„(๋ฅผ) ์‚ฌ์šฉ์ž ์ง€์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ํŽธ์ง‘ํ•˜์—ฌ ์ปดํŒŒ์ผ๋œ ์–ธ์–ด๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๊ณ , ์‹คํ–‰ํ•  ์ฟผ๋ฆฌ๋ฅผ ์„ ํƒํ•˜๊ณ , ์Šค์บ”ํ•  ์–ธ์–ด๋ฅผ ์„ ํƒํ•˜๊ณ , ํ–‰๋ ฌ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฒ€์‚ฌ ์ผ์ • ๋ณ€๊ฒฝ, ์›Œํฌํ”Œ๋กœ ํŠธ๋ฆฌ๊ฑฐ ์ •์˜, ์‚ฌ์šฉํ•  ์ „๋ฌธ๊ฐ€ ์‹คํ–‰๊ธฐ ์ง€์ • ๋“ฑ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ชจ๋“  ์˜ต์…˜์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub Actions ์›Œํฌํ”Œ๋กœ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์›Œํฌํ”Œ๋กœ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋˜ํ•œ ์ œ3์ž ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ code scanning์„(๋ฅผ) ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ œ3์ž์˜ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ code scanning ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์—ฌ๋Ÿฌ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๊ฒฝ๊ณ ์˜ ๋ถ„์„ ์›๋ณธ์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€๋” ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ์— ์—ฌ๋Ÿฌ ๋ถ„์„ ์›๋ณธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฒฝ๊ณ  ํŽ˜์ด์ง€์—์„œ ๊ฐ ๋ถ„์„ ์›๋ณธ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ  ์ƒํƒœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ”๋“œ ๊ฒ€์‚ฌ ๊ฒฝ๊ณ  ์ •๋ณด์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๊ณ ๋„๋กœ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” code scanning ๊ตฌ์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ code scanning์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์„ค์ • ์ž๊ฒฉ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ”๋“œ ์Šค์บ”์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์„ค์ • ๊ตฌ์„ฑ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

ํ•„์ˆ˜ ์กฐ๊ฑด

๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ๊ฒฝ์šฐ ๊ณ ๊ธ‰ ์„ค์ •์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

  • CodeQL์ง€์›๋˜๋Š” ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ œ3์ž ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ์Šค์บ” ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.
  • GitHub Actions๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ํผ๋ธ”๋ฆญ์œผ๋กœ ํ‘œ์‹œ๋˜๊ฑฐ๋‚˜ GitHub Code Security๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

CodeQL์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ code scanning์— ๋Œ€ํ•œ ๊ณ ๊ธ‰ ์„ค์ • ๊ตฌ์„ฑ

์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ํŽธ์ง‘ํ•˜์—ฌ CodeQL ๋ถ„์„์„ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๊ธ‰ ์„ค์ •์„ ์„ ํƒํ•˜๋ฉด ํ‘œ์ค€ ์›Œํฌํ”Œ๋กœ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๊ณ  CodeQL ์ž‘์—…์— ๋Œ€ํ•œ ์˜ต์…˜์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ ๋ฐ ์ฝ”๋“œ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๊ณ ๊ธ‰ ์„ค์ • ์‚ฌ์šฉ์ž ์ง€์ •์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ code scanning๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ๋Š” ๋ช‡ ๋ถ„ ์ •๋„ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub Actions ์ฒญ๊ตฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ฐธ๊ณ  ํ•ญ๋ชฉ

์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š” ํผ๋ธ”๋ฆญ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•˜์—ฌ code scanning์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GitHub์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๊ธฐ๋ณธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ด๋ฆ„ ์•„๋ž˜์—์„œ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. "์„ค์ •" ํƒญ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ํƒญ์„ ๋ณด์—ฌ ์ฃผ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ—ค๋”์˜ ์Šคํฌ๋ฆฐ์ƒท. "์„ค์ •" ํƒญ์ด ์ง„ํ•œ ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  3. ์‚ฌ์ด๋“œ๋ฐ”์˜ "Security" ์„น์…˜์—์„œ Advanced Security ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  4. โ€œCode Securityโ€๊นŒ์ง€ ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•˜์—ฌ โ€œCodeQL analysisโ€ ํ–‰์—์„œ Set up ๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ, Advanced๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ์ฐธ๊ณ  ํ•ญ๋ชฉ

    ๊ธฐ๋ณธ ์„ค์ •์—์„œ ๊ณ ๊ธ‰ ์„ค์ •์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ โ€œCodeQL analysisโ€ ํ–‰์—์„œ ๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ, Switch to advanced๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์‹œ๋˜๋Š” ํŒ์—… ์ฐฝ์—์„œ CodeQL ์‚ฌ์šฉ ์ค‘์ง€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    โ€œAdvanced Securityโ€ ์„ค์ •์˜ โ€œCode Securityโ€ ์„น์…˜์˜ ์Šคํฌ๋ฆฐ์ƒท "๊ณ ๊ธ‰ ์„ค์ •" ๋‹จ์ถ”๊ฐ€ ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  5. code scanning๊ฐ€ ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋ ค๋ฉด ์›Œํฌํ”Œ๋กœ๋ฅผ ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค.

    ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  CodeQL ๋ถ„์„ ์›Œํฌํ”Œ๋กœ์„(๋ฅผ) ์ปค๋ฐ‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๋ถ€๋ถ„์˜ ํƒ€์‚ฌ ์›Œํฌํ”Œ๋กœ์—๋Š” ์ถ”๊ฐ€ ๊ตฌ์„ฑ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ์›Œํฌํ”Œ๋กœ์˜ ์„ค๋ช…์„ ์ฝ์–ด ๋ด…๋‹ˆ๋‹ค.

    ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ”๋“œ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๊ณ ๊ธ‰ ์„ค์ • ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ ์ปดํŒŒ์ผ๋œ ์–ธ์–ด์— ๋Œ€ํ•œ CodeQL ์ฝ”๋“œ ๊ฒ€์‚ฌํ•˜๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  6. ๋ณ€๊ฒฝ ๋‚ด์šฉ ์ปค๋ฐ‹... ์„ ํด๋ฆญํ•˜์—ฌ ์ปค๋ฐ‹ ๋ณ€๊ฒฝ ํ˜•์‹์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ํ˜•์‹์˜ ์Šคํฌ๋ฆฐ์ƒท. ํŒŒ์ผ ์ด๋ฆ„ ์˜ค๋ฅธ์ชฝ์—๋Š” "๋ณ€๊ฒฝ ๋‚ด์šฉ ์ปค๋ฐ‹โ€ฆ"์ด๋ผ๋Š” ๋…น์ƒ‰ ๋‹จ์ถ”๊ฐ€ ์ง„ํ•œ ์ฃผํ™ฉ์ƒ‰์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  7. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ํ•„๋“œ์— ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  8. ๊ธฐ๋ณธ ๋ถ„๊ธฐ์— ์ง์ ‘ ์ปค๋ฐ‹ํ• ์ง€ ์•„๋‹ˆ๋ฉด ์ƒˆ ๋ถ„๊ธฐ๋ฅผ ๋งŒ๋“ค๊ณ  ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ์‹œ์ž‘ํ• ์ง€ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  9. ์ƒˆ ํŒŒ์ผ ์ปค๋ฐ‹์„ ํด๋ฆญํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์„ ๊ธฐ๋ณธ๊ฐ’ ๋ถ„๊ธฐ์— ์ปค๋ฐ‹ํ•˜๊ฑฐ๋‚˜ ์ƒˆ ํŒŒ์ผ ์ œ์•ˆ์„ ํด๋ฆญํ•˜์—ฌ ํŒŒ์ผ์„ ์ƒˆ ๋ถ„๊ธฐ์— ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค.

  10. ์ƒˆ ๋ถ„๊ธฐ๋ฅผ ๋งŒ๋“  ๊ฒฝ์šฐ ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•˜๊ณ  ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ ๋งŒ๋“ค๊ธฐ๋ฅผ ์—ด์–ด ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๊ธฐ๋ณธ๊ฐ’ ๋ถ„๊ธฐ์— ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ CodeQL ๋ถ„์„ ์›Œํฌํ”Œ๋กœ์—์„œ๋Š” code scanning์ด(๊ฐ€) ๊ธฐ๋ณธ ๋ถ„๊ธฐ ๋˜๋Š” ๋ณดํ˜ธ๋œ ๋ถ„๊ธฐ๋กœ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ํ‘ธ์‹œํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋ณธ ๋ถ„๊ธฐ์— ๋Œ€ํ•œ ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋„๋ก ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ code scanning๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ ๊ฒ€์‚ฌ์— ๋Œ€ํ•œ on:pull_request ๋ฐ on:push ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์œ ์šฉํ•œ ์šฉ๋„๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ฝ”๋“œ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๊ณ ๊ธ‰ ์„ค์ • ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ ์›Œํฌํ”Œ๋กœ ํŠธ๋ฆฌ๊ฑฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋Œ€๋Ÿ‰ ์‚ฌ์šฉ ์„ค์ • ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋Œ€๊ทœ๋ชจ CodeQL ์ฝ”๋“œ ์Šค์บ”์„ ์œ„ํ•œ ๊ณ ๊ธ‰ ์„ค์ • ๊ตฌ์„ฑ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ œ3์ž์˜ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ code scanning ๊ตฌ์„ฑ

GitHub์—๋Š” ํƒ€์‚ฌ ์ž‘์—…์— ๋Œ€ํ•œ ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ๊ณผ CodeQL ์ž‘์—…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋„์›€์„ ๋ฐ›์ง€ ์•Š๊ณ  ์›Œํฌํ”Œ๋กœ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค.

์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ code scanning๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ๋Š” ๋ช‡ ๋ถ„ ์ •๋„ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub Actions ์ฒญ๊ตฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  1. GitHub์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๊ธฐ๋ณธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ด๋ฆ„ ์•„๋ž˜์—์„œ ์ž‘์—…์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    "github/docs" ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ํƒญ ์Šคํฌ๋ฆฐ์ƒท. "์ž‘์—…" ํƒญ์€ ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  3. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ด๋ฏธ ํ•˜๋‚˜ ์ด์ƒ์˜ ์›Œํฌํ”Œ๋กœ๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ ์ƒˆ ์›Œํฌํ”Œ๋กœ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•ด ๊ตฌ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ž‘์—… ํƒญ์˜ ์Šคํฌ๋ฆฐ์ƒท. "์ƒˆ ์›Œํฌํ”Œ๋กœ" ๋‹จ์ถ”๋Š” ์ง„ํ•œ ์ฃผํ™ฉ์ƒ‰์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  4. "์›Œํฌํ”Œ๋กœ ์„ ํƒ" ๋˜๋Š” "GitHub Actions๋กœ ์‹œ์ž‘" ๋ณด๊ธฐ์—์„œ "๋ณด์•ˆ" ๋ฒ”์ฃผ๊นŒ์ง€ ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋ ค๋Š” ์›Œํฌํ”Œ๋กœ ์•„๋ž˜์—์„œ ๊ตฌ์„ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑํ•˜๋ ค๋Š” ๋ณด์•ˆ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ๋ชจ๋‘ ๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ์˜ ๋ณด์•ˆ ๋ฒ”์ฃผ ์Šคํฌ๋ฆฐ์ƒท. ๊ตฌ์„ฑ ๋‹จ์ถ”์™€ "๋ชจ๋‘ ๋ณด๊ธฐ" ๋งํฌ๋Š” ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  5. ์›Œํฌํ”Œ๋กœ์˜ ์ง€์นจ์— ๋”ฐ๋ผ ํ•„์š”์— ๋งž๊ฒŒ ์‚ฌ์šฉ์ž ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ง€์›์„ ๋ฐ›์œผ๋ ค๋ฉด ์›Œํฌํ”Œ๋กœ ํŽ˜์ด์ง€์˜ ์˜ค๋ฅธ์ชฝ ์ฐฝ์—์„œ ์„ค๋ช…์„œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ํŽธ์ง‘์„ ์œ„ํ•ด ์—ด๋ฆฐ ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์ด ํ‘œ์‹œ๋œ ์Šคํฌ๋ฆฐ์ƒท. "์„ค๋ช…์„œ" ๋‹จ์ถ”๊ฐ€ ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  6. ๊ตฌ์„ฑ ์ •์˜๋ฅผ ๋งˆ์ณค์œผ๋ฉด ๊ธฐ๋ณธ ๋ถ„๊ธฐ์— ์ƒˆ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์›Œํฌํ”Œ๋กœ ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ ๋ฐ ์ฝ”๋“œ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๊ณ ๊ธ‰ ์„ค์ • ์‚ฌ์šฉ์ž ์ง€์ •์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„

์›Œํฌํ”Œ๋กœ๊ฐ€ ํ•œ ๋ฒˆ ์ด์ƒ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด code scanning ๊ฒฝ๊ณ ์˜ ๊ฒ€์‚ฌ ๋ฐ ํ•ด๊ฒฐ์„ ์‹œ์ž‘ํ•  ์ค€๋น„๊ฐ€ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. code scanning ๊ฒฝ๊ณ ์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ”๋“œ ๊ฒ€์‚ฌ ๊ฒฝ๊ณ  ์ •๋ณด ๋ฐ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ฝ”๋“œ ๊ฒ€์‚ฌ ๊ฒฝ๊ณ  ํ‰๊ฐ€์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

code scanning ์‹คํ–‰์ด ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์˜ ๊ฒ€์‚ฌ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๋ฉด ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์—์„œ ์ฝ”๋“œ ๊ฒ€์‚ฌ ๊ฒฝ๊ณ  ์‹ฌ์‚ฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋„๊ตฌ ์ƒํƒœ ํŽ˜์ด์ง€์—์„œ ๊ฐ ์Šค์บ”์— ๋Œ€ํ•œ ํƒ€์ž„์Šคํƒฌํ”„ ๋ฐ ๊ฒ€์ƒ‰๋œ ํŒŒ์ผ์˜ ๋ฐฑ๋ถ„์œจ์„ ํฌํ•จํ•˜์—ฌ code scanning ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ”๋“œ ์Šค์บ”์„ ์œ„ํ•œ ๋„๊ตฌ ์ƒํƒœ ํŽ˜์ด์ง€ ์ •๋ณด์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ถ”๊ฐ€ ์ฐธ๊ณ  ์ž๋ฃŒ