code scanning ๋ถ์์ ๋น๋ ์๊ฐ์ ๋จ์ถํ๊ธฐ ์ํด ์๋ํ ์ ์๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋๋ ์ฝ์ด ๋๋ฆฌ๊ธฐ
GitHub ํธ์คํ ์คํ๊ธฐ๋ฅผ code scanning ๋ถ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ํ ๋ฌ๋๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ ๊ณ ๋ คํ ์ ์์ต๋๋ค. ํด๋น ์คํ๊ธฐ๋ ํ์ค ์คํ๊ธฐ๋ณด๋ค RAM, CPU, ๋์คํฌ ๊ณต๊ฐ์ด ๋ ๋ง์ GitHub ํธ์คํ ์คํ๊ธฐ์ ๋๋ค. ๋ํ ๋ฌ๋ ๋ฐ code scanning์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ ํฐ ์คํ๊ธฐ ์ฌ์ฉ ๋ฐ ๊ธฐ๋ณธ ์ค์ ์ ๋ํด ๋ํ ๋ฌ๋ ๊ตฌ์ฑํ๊ธฐ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์์ฒด ํธ์คํ ์คํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ code scanning ๋ถ์์ ์คํํ๋ ๊ฒฝ์ฐ ํด๋น ์คํ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ๋๋ ์ฝ์ด ์๋ฅผ ๋๋ฆด ์ ์์ต๋๋ค. ๋ถ์์ ์ํด ๊ณ ๊ธ ์ค์ ์ผ๋ก CodeQL์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, CodeQL์ ๊ถ์ฅ๋๋ ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ๊ฒํ ํ์ฌ ์์ฒด ํธ์คํ ์คํ๊ธฐ๊ฐ ์ด๋ฌํ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL์ ์คํํ๊ธฐ ์ํ ๊ถ์ฅ ํ๋์จ์ด ๋ฆฌ์์ค์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
ํ๋ ฌ ๋น๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ
์ฌ๋ฌ ์์ ์ด ํฌํจ๋ ์ํฌํ๋ก์ ๋ถ์ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ํ๋ ฌ์ ์ฌ์ฉํ๋๋ก ์ํฌํ๋ก๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ํฌํ๋ก์์ ์์ ๋ณํ ์คํ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๊ธฐ๋ณธ CodeQL ๋ถ์ ์ํฌํ๋ก๋ ์ธ์ด ํ๋ ฌ์ ์ฌ์ฉํ๋ฏ๋ก ๊ฐ ์ธ์ด์ ๋ถ์์ด ๋ณ๋ ฌ๋ก ์คํ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ณ ๊ธ ์ค์ ์ผ๋ก CodeQL์ ์ฌ์ฉํ๊ณ "CodeQL ์ด๊ธฐํ" ๋จ๊ณ์์ ์ง์ ๋ถ์ํ ์ธ์ด๋ฅผ ์ง์ ํ ๊ฒฝ์ฐ ๊ฐ ์ธ์ด์ ๋ํ ๋ถ์์ด ์์ฐจ์ ์ผ๋ก ์ํ๋ฉ๋๋ค. ์ด ๊ตฌ์ฑ์์๋ ํ๋ ฌ์ ์ฌ์ฉํ๋๋ก ๊ณ ๊ธ ์ค์ ์ํฌํ๋ก๋ฅผ ์์ ํ์ฌ ๋ถ์ ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค. ์์ ๋ ์ผ๋ถ ์ธ์ด๋ CodeQL ๊ณ ๊ธ ์ค์ ์ผ๋ก ๋ถ์๋์ง ์์์ต๋๋ค.์ ์ํฌํ๋ก ์ถ์ถ์ ์ฐธ์กฐํ์ธ์.
๋จ์ผ ์ํฌํ๋ก์์ ๋ถ์๋๋ ์ฝ๋์ ์์ ์ค์ ๋๋ค.
๋ถ์ ์๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก ๋ถ์๋๋ ์ฝ๋์ ์์ ๋น๋กํฉ๋๋ค. ๊ณ ๊ธ ์ค์ ์ผ๋ก CodeQL์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํ ๋ฒ์ ๋ถ์๋๋ ์ฝ๋์ ์์ ์ค์ฌ ๋ถ์ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ ์คํธ ์ฝ๋๋ฅผ ์ ์ธํ๊ฑฐ๋ ํ ๋ฒ์ ์ฝ๋์ ํ์ ์งํฉ๋ง ๋ถ์ํ๋ ์ฌ๋ฌ ์ํฌํ๋ก๋ก ๋ถ์์ ๋ถ๋ฆฌํฉ๋๋ค.
Java, Kotlin, Go, C, C++, C#๊ณผ ๊ฐ์ ์ปดํ์ผ๋ ์ธ์ด์ ๊ฒฝ์ฐ CodeQL์ ์ํฌํ๋ก ์คํ ์ค์ ๋น๋๋ ๋ชจ๋ ์ฝ๋๋ฅผ ๋ถ์ํฉ๋๋ค. ๋ถ์๋๋ ์ฝ๋์ ์์ ์ ํํ๋ ค๋ฉด run
๋ธ๋ก์ ๊ณ ์ ํ ๋น๋ ๋จ๊ณ๋ฅผ ์ง์ ํ์ฌ ๋ถ์ํ๋ ค๋ ์ฝ๋๋ง ๋น๋ํฉ๋๋ค. ์ฌ์ฉ์ ๊ณ ์ ์ ๋น๋ ๋จ๊ณ ์ง์ ์ pull_request
๋ฐ push
์ด๋ฒคํธ์์ paths
๋๋ paths-ignore
ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ์๋ง ์ํฌํ๋ก๊ฐ ์คํ๋๋๋ก ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ GitHub Actions์ ๋ํ ์ํฌํ๋ก ๊ตฌ๋ฌธ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์์ค ์ฝ๋๋ฅผ ์ปดํ์ผํ์ง ์๊ณ CodeQL์ด ๋ถ์ํ๋ JavaScript, Python ๋ฐ TypeScript์ ๊ฐ์ ์ธ์ด์ ๊ฒฝ์ฐ ๋ถ์ํ ์ฝ๋ ์์ ์ ํํ๋ ์ถ๊ฐ ๊ตฌ์ฑ ์ต์ ์ ์ง์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฝ๋ ๊ฒ์์ ์ํ ๊ณ ๊ธ ์ค์ ์ฌ์ฉ์ ์ง์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
CodeQL ๋ถ์์ ์ฌ๋ฌ ์ํฌํ๋ก๋ก ๋ถํ ํ๋ ๊ฒฝ์ฐ, ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ชจ๋ ์ฝ๋๋ฅผ ๋ถ์ํ๋ schedule
์์ ์คํ๋๋ ์ํฌํ๋ก๋ฅผ ํ๋ ์ด์ ๋ณด์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. CodeQL์(๋) ๊ตฌ์ฑ ์์ ๊ฐ์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ถ์ํ๋ฏ๋ก ์ผ๋ถ ๋ณต์กํ ๋ณด์ ๋์์ ์ ์ฒด ๋น๋์์๋ง ๊ฒ์๋ ์ ์์ต๋๋ค.
schedule
์ด๋ฒคํธ ์ค์๋ง ์คํ
๋ถ์์ด push
๋๋ pull_request
์ด๋ฒคํธ ์ค ๋๋ ค์ง ์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด schedule
์ด๋ฒคํธ์์๋ง ํธ๋ฆฌ๊ฑฐ๋๋๋ก ๋ถ์์ ์ค์ ํ ์ ์์ต๋๋ค. CodeQL์ code scanning ๋ถ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ณ ๊ธ ์ค์น ์ํฌํ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑํ ์ ์์ง๋ง ๊ธฐ๋ณธ ์ค์ ์์๋ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ GitHub Actions ์ดํด์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ํฌํ๋ก๊ฐ ์คํ๋๋ ์ฟผ๋ฆฌ ๋๋ ๊ท์น ํ์ธ
๋ถ์ ์๊ฐ์ ์ค์ด๋ ๋ ๋ค๋ฅธ ์ต์ ์ ๋์ด์ค๊ธฐ ์์ฒญ์์ ์คํ๋๋ ์ํฌํ๋ก์์ ์ค์ํ๋ค๊ณ ์๊ฐ๋๋ ์ฟผ๋ฆฌ ๋๋ ๊ท์น๋ง ์คํํ๋ ๊ฒ์ ๋๋ค. code scanning์ ํ์ฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํด๋น ๋๊ตฌ์ ๋ํ ์ค๋ช ์๋ฅผ ์ฐธ์กฐํด์ผ ํฉ๋๋ค.
CodeQL์๋ ๊ฐ ์ธ์ด์ ์ฌ์ฉํ ์ ์๋ ๋ ๊ฐ์ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ ๋๊ตฌ ๋ชจ์์ด ์์ต๋๋ค. CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋น๋๋ฅผ ์ต์ ํํ๋๋ฐ ์ฒ๋ฆฌ ์๊ฐ์ด ์ฌ์ ํ ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ ์คํํ๋ ์ฟผ๋ฆฌ ์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ์ฟผ๋ฆฌ ๋๊ตฌ ๋ชจ์์ ์๋์ผ๋ก ์คํ๋๋ฉฐ ํ์ง๊ณผ ์๋ ์ฌ์ด์์ ๊ฐ๋ฅํ ์ต์์ ์ ์ถฉ์์ ์ ๊ณตํฉ๋๋ค.
๊ณ ๊ธ ์ค์ ์ผ๋ก CodeQL์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ ์ธ์๋ ์ถ๊ฐ ์ฟผ๋ฆฌ ๋๋ ์ฟผ๋ฆฌ ๋๊ตฌ ๋ชจ์์ ์คํํ ์ ์์ต๋๋ค. ์ํฌํ๋ก๊ฐ queries
์์๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ ์ถ๊ฐ ์ฟผ๋ฆฌ ๋๊ตฌ ๋ชจ์ ๋๋ ์ถ๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์ ์ํ๋์ง ํ์ธํฉ๋๋ค. ์ถ๊ฐ ์ฟผ๋ฆฌ ๋๊ตฌ ๋ชจ์ ๋๋ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ์ค์ ํ์ฌ ์คํํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฝ๋ ๊ฒ์์ ์ํ ๊ณ ๊ธ ์ค์ ์ฌ์ฉ์ ์ง์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.