Skip to main content

์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ ์ทจ์•ฝ์„ฑ ์ฐพ๊ธฐ ๋ฐ ์ˆ˜์ •

๋ฐ๋ชจ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ code scanning ๊ฒฝ๊ณ ๋ฅผ ํ™•์ธํ•˜์—ฌ ์ฝ”๋“œ ๋ณด์•ˆ์˜ ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ์•Œ์•„๋ณด์„ธ์š”.

์ฝ”๋”ฉ์„ ํ•™์Šตํ•  ๋•Œ ์‹ค์ˆ˜๋กœ ํ”„๋กœ์ ํŠธ์— ์ทจ์•ฝ์„ฑ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์€ ์ •์ƒ์ž…๋‹ˆ๋‹ค. ์ž‘์—…์„ ๊ณต์œ ํ•˜๊ธฐ ์ „์— ์ด๋Ÿฌํ•œ ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด ๊ณต๊ฒฉ์ž๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ๋นจ๋ฆฌ ๋ฌธ์ œ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ํŒจ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‹คํ–‰ํžˆ, ๊ณต์šฉ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ทจ์•ฝ์„ฑ์„ ์ž๋™์œผ๋กœ ์ฐพ๊ณ , ์„ค๋ช…ํ•˜๊ณ  ์ˆ˜์ •๊นŒ์ง€ ํ•˜๋Š” code scanning๊ณผ ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž์Šต์„œ์—์„œ๋Š” code scanning์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

๋ฐ๋ชจ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„ค์ •

๋จผ์ € ๋ณด์•ˆ ์ทจ์•ฝ์„ฑ์ด ์žˆ๋Š” ๋ฐ๋ชจ ํ”„๋กœ์ ํŠธ๋ฅผ ํฌํฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ฐ„๋‹จํ•œ ์›น ํŽ˜์ด์ง€๋ฅผ ๋นŒ๋“œํ•˜์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ด ์—ฐ์Šต์—์„œ๋Š” ๋ณด์•ˆ ์œ„ํ—˜์ด ์—†์Šต๋‹ˆ๋‹ค.

  1. new2code/code-scanning-demo ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ํŽ˜์ด์ง€์˜ ์˜ค๋ฅธ์ชฝ ์œ„์—์„œ Fork๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.
  3. ํ‘œ์‹œ๋˜๋Š” ํŽ˜์ด์ง€์—์„œ Create fork๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.

์ฝ”๋“œ์—์„œ ์ทจ์•ฝ์„ฑ ์ฐพ๊ธฐ

์ด์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํฌํฌ๊ฐ€ ์ฝ”๋“œ์˜ ์ทจ์•ฝ์„ฑ์„ ํ™•์ธํ•˜๋„๋ก code scanning์„ ์ผœ๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. GitHub๋กœ ๋Œ์•„๊ฐ€์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ํ™ˆ ํŽ˜์ด์ง€์—์„œ Security๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.
  2. "Code scanning alerts" ํ–‰์—์„œ Set up code scanning ์„ ํด๋ฆญํ•˜์„ธ์š”.
  3. "Tools" ์„น์…˜์˜ "CodeQL analysis" ์˜†์— ์žˆ๋Š” Set up์„ ์„ ํƒํ•œ ๋‹ค์Œ Default๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.
  4. ํ‘œ์‹œ๋˜๋Š” ํŒ์—…์—์„œ Enable CodeQL ๋ฅผ ํด๋ฆญํ•˜์„ธ์š”. ๊ทธ๋Ÿฌ๋ฉด ์ฝ”๋“œ์—์„œ ์ทจ์•ฝ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” GitHub Actions ์›Œํฌํ”Œ๋กœ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
  5. ์›Œํฌํ”Œ๋กœ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ํƒ์ƒ‰ ํ‘œ์‹œ์ค„์—์„œ Actions๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.
  6. ์›Œํฌํ”Œ๋กœ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ํƒ์ƒ‰ ํ‘œ์‹œ์ค„์—์„œ Security๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.
  7. ์›Œํฌํ”Œ๋กœ์—์„œ ๋ฐœ๊ฒฌ๋œ code scanning ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ ค๋ฉด ์ธก๋ฉด ํƒ์ƒ‰์—์„œ Code scanning ์„ ํด๋ฆญํ•œ ๋‹ค์Œ, Reflected cross-site scripting์„ ํด๋ฆญํ•˜์„ธ์š”.

code scanning ๊ฒฝ๊ณ  ํ•ด์„

์ด์ œ code scanning์ด ์ฝ”๋“œ์—์„œ ์ทจ์•ฝ์„ฑ์„ ์‹๋ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ์— ์ œ๊ณต๋œ ์ •๋ณด๋ฅผ ๋ถ„์„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ„์น˜

๊ฒฝ๊ณ ๋Š” ์ทจ์•ฝ์„ฑ์„ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ ์ค„ ์ค‘์•™์— ํŒŒ์ผ์˜ ์ž‘์€ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์ทจ์•ฝ์„ฑ์€ index.js ํŒŒ์ผ์˜ 8์ค„์—์„œ ๊ฐ์ง€๋˜์—ˆ๊ณ , ์‚ฌ์ดํŠธ์— ์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ณตํ•œ ์ž…๋ ฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด ์•…์„ฑ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  greet๋ฅผ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ํ• ๋‹นํ•  ๋•Œ 7์ค„์—์„œ ๊ธฐ๋ณธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ์˜ ์ทจ์•ฝ์„ฑ์— ๋Œ€ํ•œ ๋‹จ๊ณ„๋ณ„ ๋ณด๊ธฐ๋ฅผ ๋ณด๋ ค๋ฉด ์ทจ์•ฝ์„ฑ ์ค„ ์•„๋ž˜ ์„ค๋ช…์„ ์—์„œ Show paths๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.

code scanning ๊ฒฝ๊ณ ์˜ ์œ„์น˜ ์Šคํฌ๋ฆฐ์ƒท. "Show paths" ๋‹จ์ถ”๋Š” ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์„ค๋ช… ๋ฐ ๊ถŒ์žฅ ์‚ฌํ•ญ

code scanning์€ ํŒŒ์ผ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์•„๋ž˜์— ์ทจ์•ฝ์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ทจ์•ฝ์„ฑ๊ณผ ์ˆ˜์ • ์ฝ”๋“œ์˜ ์˜ˆ์ œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๊ถŒ์žฅ๋œ ์ˆ˜์ •์„ ๋ณด๋ ค๋ฉด Show more ๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.

code scanning ๊ฒฝ๊ณ ์˜ ์„ธ๋ถ€ ์ •๋ณด ์Šคํฌ๋ฆฐ์ƒท. "Show more"๋ผ๋Š” ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋œ ๋“œ๋กญ๋‹ค์šด์ด ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์•…์„ฑ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ž…๋ ฅ์„ ํ™•์ธํ•œ ๋‹ค์Œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ •๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒ

๊ถŒ์žฅ๋œ ์ˆ˜์ •์„ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฉด, Copilot Chat์— ์„ค๋ช…์„ ์š”์ฒญํ•˜์„ธ์š”.

ํƒ€์ž„๋ผ์ธ

๋งˆ์ง€๋ง‰์œผ๋กœ ํŽ˜์ด์ง€ ์•„๋ž˜์ชฝ์—์„œ ๊ฒฝ๊ณ ์˜ ํƒ€์ž„๋ผ์ธ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํƒ€์ž„๋ผ์ธ์—๋Š” ์ทจ์•ฝ์„ฑ์ด ์ฒ˜์Œ ๊ฐ์ง€๋œ ์ปค๋ฐ‹์ด ํฌํ•จ๋˜๋ฉฐ ์ทจ์•ฝ์„ฑ์„ ์ˆ˜์ •ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

code scanning ๊ฒฝ๊ณ ์˜ ํƒ€์ž„๋ผ์ธ ์Šคํฌ๋ฆฐ์ƒท

์ž๋™์œผ๋กœ ์ทจ์•ฝ์„ฑ ์ˆ˜์ •

ํ”„๋กœ์ ํŠธ๋ฅผ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๋ณด์•ˆํ•˜๊ธฐ ์œ„ํ•ด code scanning์šฉ GitHub Copilot Autofix๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ๊ฒฝ๊ณ  ์ œ๋ชฉ ์•„๋ž˜ "CodeQL์— ๋Œ€ํ•ด Copilot Autofix๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๊ฒฝ๊ณ ์˜ ์ˆ˜์ •์„ ๊ฐ€์†ํ™”"ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•˜๋Š” ์ƒ์ž์—์„œ Generate fix๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.

  2. Copilot์ด ์ˆ˜์ • ์ œ์•ˆ์„ ์ƒ์„ฑํ•˜๋ฉด ์ œ์•ˆํ•˜๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์„ค๋ช…ํ•˜๊ณ , ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ , ์ข…์†์„ฑ ๊ฐ•ํ™”๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ž ์‹œ ์‹œ๊ฐ„์„ ๋‚ด์–ด Copilot์˜ ์ž‘์—…์„ ์ฝ์–ด๋ณด์„ธ์š”.

  3. ์ˆ˜์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ๋งŒ๋“ค๋ ค๋ฉด Commit to new branch๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ, Commit change๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.

  4. ์ดˆ์•ˆ ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์ด ๋งŒ๋“ค์–ด์ง€๋ฉด ํŽ˜์ด์ง€ ์•„๋ž˜์ชฝ์—์„œ Ready for review๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

  5. ์ˆ˜์ •์„ ์ ์šฉํ•˜๋ ค๋ฉด Merge pull request๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ Confirm merge๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.

    ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์ด ๋ณ‘ํ•ฉ๋˜๊ณ  code scanning ์›Œํฌํ”Œ๋กœ๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋˜๋ฉด ๊ฒฝ๊ณ ๊ฐ€ ์ž๋™์œผ๋กœ ๋‹ซํžˆ๊ณ  ์ทจ์•ฝ์„ฑ์„ ์ˆ˜์ •ํ•˜๋Š” ์ปค๋ฐ‹์ด ํƒ€์ž„๋ผ์ธ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Copilot์—์„œ ์ œ์•ˆํ•œ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์ฝ”๋“œ์— ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ํ•ญ์ƒ ๊ฒ€ํ† ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์ด์ œ ๋ฐ๋ชจ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ code scanning ์‚ฌ์šฉ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•˜์—ฌ ํ˜„์žฌ ๋ฐ ๋ฏธ๋ž˜ ์ทจ์•ฝ์„ฑ์„ ๋นจ๋ฆฌ ์ฐพ์•„์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ง์ ‘ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ ๋ณด์•ˆ์„ ํ™•๋ณดํ–ˆ์œผ๋‹ˆ, ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€ ์ข…์†์„ฑ์˜ ๋ณด์•ˆ ์ƒํƒœ๋„ ํ™•์ธํ•ด ๋ณด์„ธ์š”. ์ฒซ ๋ฒˆ์งธ ์ข…์†์„ฑ ์ทจ์•ฝ์„ฑ ์ฐพ๊ธฐ ๋ฐ ์ˆ˜์ •ํ•˜๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.