์ฌ์ฉ์ ์ง์ ์ฟผ๋ฆฌ ๋ฐ CodeQL CLI ์์๋ณด๊ธฐ
๊ณ ์ ํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ฌ CodeQL ๋ถ์์ ์ฌ์ฉ์ ์ง์ ํจ์ผ๋ก์จ ํน์ ํ ์ทจ์ฝ์ฑ ๋๋ ์ค๋ฅ๋ฅผ ๊ฐ์กฐ ํ์ํ ์ ์์ต๋๋ค.
์ด ํญ๋ชฉ์์๋ ํนํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถ์ ๋ช ๋ น๊ณผ ํจ๊ป ์ฌ์ฉํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ฌ ํด์๋ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
์ฐธ๊ณ ํญ๋ชฉ
์ฟผ๋ฆฌ๋ ์๊ฒฉํ ๋ฉํ๋ฐ์ดํฐ ์๊ตฌ ์ฌํญ์ผ๋ก database analyze
์(๊ณผ) ์คํ๋ฉ๋๋ค. ๋ค์ ๋ฐฐ๊ด ์์ค ํ์ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์๋ ์์ต๋๋ค.
- database run-queries- ํด์๋์ง ์์ ๊ฒฐ๊ณผ๋ฅผ BQRS๋ผ๋ ์ค๊ฐ ์ด์ง ํ์์ผ๋ก ์ถ๋ ฅํฉ๋๋ค.
- ์ฟผ๋ฆฌ ์คํ- BQRS ํ์ผ์ ์ถ๋ ฅํ๊ฑฐ๋ ๊ฒฐ๊ณผ ํ ์ด๋ธ์ ๋ช ๋ น์ค์ ์ง์ ์ถ๋ ฅํฉ๋๋ค. ๋ช ๋ น์ค์์ ์ง์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ๊ฒ์ CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต ์ฟผ๋ฆฌ๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ช ๋ น์ผ๋ก ์คํ๋๋ ์ฟผ๋ฆฌ์๋ ๋์ผํ ๋ฉํ๋ฐ์ดํฐ ์๊ตฌ ์ฌํญ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๋์ด ์ฝ์ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค๋ฉด bqrs ๋์ฝ๋ฉ ๋ฐฐ๊ด ํ์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๊ฐ BQRS ๊ฒฐ๊ณผ ํ์ผ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋๋ถ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถ์์ ์ฌ์ฉํ์ฌ ํด์๋ ๊ฒฐ๊ณผ๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ฝ์ต๋๋ค.
์ ํจํ ์ฟผ๋ฆฌ ์์ฑํ๊ธฐ
์ฌ์ฉ์ ์ง์ ๋ถ์์ ์คํํ๊ธฐ ์ ์ ์ ํจํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ .ql
ํ์ฅ์๋ก ๋ ํ์ผ์ ์ ์ฅํด์ผ ํฉ๋๋ค. ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋๋ ๊ด๋ฒ์ํ ์ค๋ช
์๋ฅผ ์ฐธ๊ณ ํ์ค ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ์ฟผ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฟผ๋ฆฌ ๋ฉํ๋ฐ์ดํฐ ํฌํจํ๊ธฐ
์ฟผ๋ฆฌ ๋ฉํ๋ฐ์ดํฐ๋ ๊ฐ ์ฟผ๋ฆฌ ํ์ผ์ ๋งจ ์์ ํฌํจ๋ฉ๋๋ค. ์ฟผ๋ฆฌ ๋ฉํ๋ฐ์ดํฐ๋ ์ฌ์ฉ์์๊ฒ ์ฟผ๋ฆฌ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ CodeQL CLI์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ค๋๋ค.
database analyze
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํด์๋๋๋ก ํ๋ ค๋ฉด ๋ค์ ๋ ๊ฐ์ง ์์ฑ์ ํฌํจํด์ผ ํฉ๋๋ค.
-
์ฟผ๋ฆฌ ์๋ณ์(
@id
): ์๋ฌธ์ ๋๋ ์ซ์๋ก ๊ตฌ์ฑ๋๊ณ/
๋๋-
์ ์ํด ๊ตฌ๋ถ๋๋ ๋จ์ด ์ํ์ค๋ก, ์ฟผ๋ฆฌ๋ฅผ ์๋ณ ๋ฐ ๋ถ๋ฅํฉ๋๋ค. -
์ฟผ๋ฆฌ ์ ํ(
@kind
): ์ฟผ๋ฆฌ๋ฅผ ๊ฐ๋จํ ๊ฒฝ๊ณ (@kind problem
), ์ฝ๋ ์์น ์ํ์ค์ ์ํด ๋ฌธ์ํ๋ ๊ฒฝ๊ณ (@kind path-problem
), ์ถ์ถ๊ธฐ ๋ฌธ์ ํด๊ฒฐ์ฉ(@kind diagnostic
) ๋๋ ์์ฝ ๋ฉํธ๋ฆญ(@kind metric
๋ฐ@tags summary
)์ ์ ํ์ผ๋ก ๊ตฌ๋ถํฉ๋๋ค.
์ด๋ฌํ ๋ฉํ๋ฐ์ดํฐ ์์ฑ์ ๋ํ ์์ธํ ๋ด์ฉ์ CodeQL ์ฟผ๋ฆฌ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ ๋ฐ ์ฟผ๋ฆฌ ๋ฉํ๋ฐ์ดํฐ ์คํ์ผ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฐธ๊ณ ํญ๋ชฉ
์ฟผ๋ฆฌ๋ฅผ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ๋ฉํ๋ฐ์ดํฐํฐ ์๊ตฌ ์ฌํญ์ด ๋ค๋ฅผ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ์ฟผ๋ฆฌ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฌ์ฉ์ ์ง์ QL ์ฟผ๋ฆฌ ํจํค์งํ๊ธฐ
๋ค๋ฅธ ์ฌ์ฉ์์ ๊ณต์ ํ๋ ค๋ ์๋๋ก ์ฌ์ฉ์ ๊ณ ์ ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋๋ ์ฌ์ฉ์ ์ง์ CodeQL ํฉ์ ์ ์ฅํด์ผ ํฉ๋๋ค. CodeQL ํฉ์ผ๋ก ํฉ์ GitHub Packages์ ๊ฒ์ํ ์ ์์ต๋๋ค. GitHub Container registry. ์์ธํ ๋ด์ฉ์ CodeQL ํฉ์ ์ฌ์ฉํ์ฌ ๋ถ์ ์ฌ์ฉ์ ์ง์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
CodeQL ํฉ์ CodeQL ๋ถ์์ ์ฌ์ฉ๋๋ ํ์ผ์ ๊ตฌ์ฑํ๊ณ ์ฟผ๋ฆฌ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ, ์ฟผ๋ฆฌ ๋ชจ์ ๋ฐ ์ค์ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. ๊ทธ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์๋ ํ์ผ ์ด๋ฆ์ด qlpack.yml
(์ผ)๋ก ์ง์ ๋ ํ์ผ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค. ์ฌ์ฉ์ ์ง์ ์ฟผ๋ฆฌ๋ CodeQL ํฉ ๋ฃจํธ ๋๋ ๊ทธ ํ์ ๋๋ ํฐ๋ฆฌ์ ์ ์ฅ๋์ด์ผ ํฉ๋๋ค.
๊ฐ CodeQL ํฉ์ ๋ํด qlpack.yml
ํ์ผ์๋ CodeQL CLI์ ์ฟผ๋ฆฌ๋ฅผ ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ, ํฉ์ด ์์กดํ๋ ๋ค๋ฅธ CodeQL ํฉ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ฟผ๋ฆฌ ๋ชจ์ ์ ์๋ฅผ ์ฐพ์ ์ ์๋ ์์น๋ฅผ ์๋ ค์ฃผ๋ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ด ํ์ผ์ ํฌํจํ ํญ๋ชฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ CodeQL ํฉ์ ์ฌ์ฉํ์ฌ ๋ถ์ ์ฌ์ฉ์ ์ง์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
SARIF ํ์ผ์ ์ฌ์ฉ์ ์ง์ CodeQL ์ฟผ๋ฆฌ์ ๋ํ ์ฟผ๋ฆฌ ๋์๋ง ํฌํจํ๊ธฐ
CodeQL CLI๋ฅผ ์ฌ์ฉํ์ฌ ์ 3์ CI/CD ์์คํ ์์ ์ฝ๋ ์ค์บ ๋ถ์์ ์คํํ๋ ๊ฒฝ์ฐ, ๋ถ์ ์ค์ ์์ฑ๋ SARIF ํ์ผ์ ์ฌ์ฉ์ ์ง์ ์ฟผ๋ฆฌ์ ๋ํ ์ฟผ๋ฆฌ ๋์๋ง์ ํฌํจํ ์ ์์ต๋๋ค. SARIF ํ์ผ์ GitHub์ ์ ๋ก๋ํ๋ฉด ์ฌ์ฉ์ ์ง์ ์ฟผ๋ฆฌ์์ ์์ฑ๋ ๋ชจ๋ ๊ฒฝ๊ณ ์ ๋ํ ์ฟผ๋ฆฌ ๋์๋ง์ด ์ฝ๋ ์ค์บ UI์ ํ์๋ฉ๋๋ค.
CodeQL CLI v2.7.1 ์ด์์์๋ codeql database analyze
์คํ ์ --sarif-add-query-help
์ต์
์ ์ ๊ณตํ์ฌ SARIF ํ์ผ์ Markdown ๋ ๋๋ง ๋ ์ฟผ๋ฆฌ ๋์๋ง์ ํฌํจํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ง์ ์ฟผ๋ฆฌ์ ๋ํ ์ฟผ๋ฆฌ ๋์๋ง์ Markdown ํ์ผ์ ์ง์ ์์ฑํ๊ณ ํด๋น ์ฟผ๋ฆฌ์ ํจ๊ป ์ ์ฅํ ์ ์์ต๋๋ค. ๋๋ ํ์ค CodeQL ์ฟผ๋ฆฌ์์ ์ผ๊ด์ฑ์ ์ํด ์ฟผ๋ฆฌ ๋์๋ง์ .qhelp
ํ์์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค. .qhelp
ํ์ผ์ ์์ฑ๋ ์ฟผ๋ฆฌ ๋์๋ง์ SARIF ํ์ผ์ ํฌํจ๋ ์ ์์ผ๋ฉฐ ์ฝ๋ ์ค์บ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ผ๋ฏ๋ก ๋ถ์์ ์คํํ๊ธฐ ์ ์ Markdown์ผ๋ก ๋ณํํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฟผ๋ฆฌ ๋์๋ง ํ์ผ ๋ฐ ์ฟผ๋ฆฌ ๋์๋ง ํ์ผ ํ
์คํธํ๊ธฐ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
CodeQL ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ธฐ์ฌํ๊ธฐ
๋ค๋ฅธ CodeQL ์ฌ์ฉ์์ ์ฟผ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ ค๋ฉด CodeQL ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋์ด์ค๊ธฐ ์์ฒญ์ ์ด ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ "CodeQL์ ๊ธฐ์ฌํ๊ธฐ"๋ฅผ ์ฐธ์กฐํ์ธ์.