์ฝ๋ฉ์ ํ์ตํ ๋ ์ค์๋ก ํ๋ก์ ํธ์ ์ทจ์ฝ์ฑ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์ ์์ ๋๋ค. ์์ ์ ๊ณต์ ํ๊ธฐ ์ ์ ์ด๋ฌํ ๋ณด์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ผ๋ฉด ๊ณต๊ฒฉ์๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์กฐ์ํ๊ณ ์ค์ํ ๋ฐ์ดํฐ์ ์ก์ธ์คํ ์ ์์ผ๋ฏ๋ก ๊ฐ๋ฅํ ๋นจ๋ฆฌ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํจ์นํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋คํํ, ๊ณต์ฉ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ทจ์ฝ์ฑ์ ์๋์ผ๋ก ์ฐพ๊ณ , ์ค๋ช ํ๊ณ ์์ ๊น์ง ํ๋ code scanning๊ณผ ๊ฐ์ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ์ด ์์ต์์์๋ code scanning์ ์ฌ์ฉํ์ฌ ์์ ์ ์์ ํ๊ฒ ์ ์งํ๋ ๋ฐฉ๋ฒ์ ์์๋ด ๋๋ค.
๋ฐ๋ชจ ๋ฆฌํฌ์งํ ๋ฆฌ ์ค์
๋จผ์ ๋ณด์ ์ทจ์ฝ์ฑ์ด ์๋ ๋ฐ๋ชจ ํ๋ก์ ํธ๋ฅผ ํฌํฌํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ ๊ฐ๋จํ ์น ํ์ด์ง๋ฅผ ๋น๋ํ์ง๋ง, ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ์ง ์์ผ๋ฏ๋ก, ์ด ์ฐ์ต์์๋ ๋ณด์ ์ํ์ด ์์ต๋๋ค.
new2code/code-scanning-demo
๋ฆฌํฌ์งํ ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.- ํ์ด์ง์ ์ค๋ฅธ์ชฝ ์์์ Fork๋ฅผ ํด๋ฆญํ์ธ์.
- ํ์๋๋ ํ์ด์ง์์ Create fork๋ฅผ ํด๋ฆญํ์ธ์.
์ฝ๋์์ ์ทจ์ฝ์ฑ ์ฐพ๊ธฐ
์ด์ ํ๋ก์ ํธ๋ฅผ ์ค์ ํ์ต๋๋ค. ํฌํฌ๊ฐ ์ฝ๋์ ์ทจ์ฝ์ฑ์ ํ์ธํ๋๋ก code scanning์ ์ผ๊ฒ ์ต๋๋ค.
- GitHub๋ก ๋์๊ฐ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ํ ํ์ด์ง์์ Security๋ฅผ ํด๋ฆญํ์ธ์.
- "Code scanning alerts" ํ์์ Set up code scanning ์ ํด๋ฆญํ์ธ์.
- "Tools" ์น์ ์ "CodeQL analysis" ์์ ์๋ Set up์ ์ ํํ ๋ค์ Default๋ฅผ ํด๋ฆญํ์ธ์.
- ํ์๋๋ ํ์ ์์ Enable CodeQL ๋ฅผ ํด๋ฆญํ์ธ์. ๊ทธ๋ฌ๋ฉด ์ฝ๋์์ ์ทจ์ฝ์ฑ์ ๊ฒ์ฌํ๋ GitHub Actions ์ํฌํ๋ก๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค.
- ์ํฌํ๋ก์ ์ํ๋ฅผ ํ์ธํ๋ ค๋ฉด ํ์ ํ์์ค์์ Actions๋ฅผ ํด๋ฆญํ์ธ์.
- ์ํฌํ๋ก๊ฐ ์๋ฃ๋๋ฉด ํ์ ํ์์ค์์ Security๋ฅผ ํด๋ฆญํ์ธ์.
- ์ํฌํ๋ก์์ ๋ฐ๊ฒฌ๋ code scanning ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ ค๋ฉด ์ธก๋ฉด ํ์์์ Code scanning ์ ํด๋ฆญํ ๋ค์, Reflected cross-site scripting์ ํด๋ฆญํ์ธ์.
code scanning ๊ฒฝ๊ณ ํด์
์ด์ code scanning์ด ์ฝ๋์์ ์ทจ์ฝ์ฑ์ ์๋ณํ์ต๋๋ค. ๊ฒฝ๊ณ ์ ์ ๊ณต๋ ์ ๋ณด๋ฅผ ๋ถ์ํด ๋ณด๊ฒ ์ต๋๋ค.
์์น
๊ฒฝ๊ณ ๋ ์ทจ์ฝ์ฑ์ ๋ง๋๋ ์ฝ๋ ์ค ์ค์์ ํ์ผ์ ์์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ํ์ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ, ์ทจ์ฝ์ฑ์ index.js
ํ์ผ์ 8์ค์์ ๊ฐ์ง๋์๊ณ , ์ฌ์ดํธ์ ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ์
๋ ฅ์ ๊ตฌํํฉ๋๋ค.
์์ธํ ์ดํด๋ณด๋ฉด ์
์ฑ ์ฝ๋๋ฅผ ํ์ธํ์ง ์๊ณ greet
๋ฅผ ์ฌ์ฉ์ ์
๋ ฅ์ ํ ๋นํ ๋ 7์ค์์ ๊ธฐ๋ณธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ฝ๋์ ์ทจ์ฝ์ฑ์ ๋ํ ๋จ๊ณ๋ณ ๋ณด๊ธฐ๋ฅผ ๋ณด๋ ค๋ฉด ์ทจ์ฝ์ฑ ์ค ์๋ ์ค๋ช
์ ์์ Show paths๋ฅผ ํด๋ฆญํ์ธ์.
์ค๋ช ๋ฐ ๊ถ์ฅ ์ฌํญ
code scanning์ ํ์ผ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์๋์ ์ทจ์ฝ์ฑ์ ๋ํ ์์ธํ ์ค๋ช ์ ์ ๊ณตํฉ๋๋ค. ์ทจ์ฝ์ฑ๊ณผ ์์ ์ฝ๋์ ์์ ๋ฟ๋ง ์๋๋ผ, ๊ถ์ฅ๋ ์์ ์ ๋ณด๋ ค๋ฉด Show more ๋ฅผ ํด๋ฆญํ์ธ์.
์ด ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฌ์ฉํ๊ธฐ ์ ์ ์ญ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฆ, ์ ์ฑ ์ฝ๋์ ๋ํ ์ ๋ ฅ์ ํ์ธํ ๋ค์ ํ์ํ ๊ฒฝ์ฐ ์ ๋ฆฌํด์ผ ํฉ๋๋ค.
ํ
๊ถ์ฅ๋ ์์ ์ ์์ ํ ์ดํดํ์ง ๋ชปํ๋ฉด, Copilot Chat์ ์ค๋ช ์ ์์ฒญํ์ธ์.
ํ์๋ผ์ธ
๋ง์ง๋ง์ผ๋ก ํ์ด์ง ์๋์ชฝ์์ ๊ฒฝ๊ณ ์ ํ์๋ผ์ธ์ ๋ณผ ์ ์์ต๋๋ค. ํ์๋ผ์ธ์๋ ์ทจ์ฝ์ฑ์ด ์ฒ์ ๊ฐ์ง๋ ์ปค๋ฐ์ด ํฌํจ๋๋ฉฐ ์ทจ์ฝ์ฑ์ ์์ ํ๋ฉด ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
์๋์ผ๋ก ์ทจ์ฝ์ฑ ์์
ํ๋ก์ ํธ๋ฅผ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ๋ณด์ํ๊ธฐ ์ํด code scanning์ฉ GitHub Copilot Autofix๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
-
๊ฒฝ๊ณ ์ ๋ชฉ ์๋ "CodeQL์ ๋ํด Copilot Autofix๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๊ฒฝ๊ณ ์ ์์ ์ ๊ฐ์ํ"ํ ๊ฒ์ ์ ์ํ๋ ์์์์ Generate fix๋ฅผ ํด๋ฆญํ์ธ์.
-
Copilot์ด ์์ ์ ์์ ์์ฑํ๋ฉด ์ ์ํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ค๋ช ํ๊ณ , ๋ณ๊ฒฝ ์ฌํญ์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ๋ ๋๋งํ๊ณ , ์ข ์์ฑ ๊ฐํ๋ฅผ ํธ์ถํฉ๋๋ค. ์ ์ ์๊ฐ์ ๋ด์ด Copilot์ ์์ ์ ์ฝ์ด๋ณด์ธ์.
-
์์ ์ ์ฌ์ฉํ์ฌ ๋์ด์ค๊ธฐ ์์ฒญ์ ๋ง๋ค๋ ค๋ฉด Commit to new branch๋ฅผ ํด๋ฆญํ ๋ค์, Commit change๋ฅผ ํด๋ฆญํ์ธ์.
-
์ด์ ๋์ด์ค๊ธฐ ์์ฒญ์ด ๋ง๋ค์ด์ง๋ฉด ํ์ด์ง ์๋์ชฝ์์ Ready for review๋ฅผ ํด๋ฆญํ์ฌ ๋ณํฉํ ์ ์๋๋ก ํฉ๋๋ค.
-
์์ ์ ์ ์ฉํ๋ ค๋ฉด Merge pull request๋ฅผ ํด๋ฆญํ ๋ค์ Confirm merge๋ฅผ ํด๋ฆญํ์ธ์.
๋์ด์ค๊ธฐ ์์ฒญ์ด ๋ณํฉ๋๊ณ code scanning ์ํฌํ๋ก๊ฐ ๋ค์ ์คํ๋๋ฉด ๊ฒฝ๊ณ ๊ฐ ์๋์ผ๋ก ๋ซํ๊ณ ์ทจ์ฝ์ฑ์ ์์ ํ๋ ์ปค๋ฐ์ด ํ์๋ผ์ธ์ ์ถ๊ฐ๋ฉ๋๋ค.
์ฐธ๊ณ ํญ๋ชฉ
์ค์ ํ๋ก์ ํธ์์๋ Copilot์์ ์ ์ํ ๋ณ๊ฒฝ ๋ด์ฉ์ ์ฝ๋์ ์ปค๋ฐํ๊ธฐ ์ ์ ํญ์ ๊ฒํ ํด์ผ ํฉ๋๋ค.
๋ค์ ๋จ๊ณ
์ด์ ๋ฐ๋ชจ ๋ฆฌํฌ์งํ ๋ฆฌ์์ code scanning ์ฌ์ฉ์ ์๋ํ์ต๋๋ค. ์์ ์ ํ๋ก์ ํธ์์ ์ด๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ์ฌ ํ์ฌ ๋ฐ ๋ฏธ๋ ์ทจ์ฝ์ฑ์ ๋นจ๋ฆฌ ์ฐพ์์ ์์ ํ ์ ์์ต๋๋ค.
์ด์ ์ง์ ์์ฑํ ์ฝ๋์ ๋ณด์์ ํ๋ณดํ์ผ๋, ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ ์ข ์์ฑ์ ๋ณด์ ์ํ๋ ํ์ธํด ๋ณด์ธ์. ์ฒซ ๋ฒ์งธ ์ข ์์ฑ ์ทจ์ฝ์ฑ ์ฐพ๊ธฐ ๋ฐ ์์ ํ๊ธฐ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.