Skip to main content

CodeQL CLI ๊ณ ๊ธ‰ ์„ค์ •

CodeQL CLI ์„ค์ •์„ ์ˆ˜์ •ํ•˜์—ฌ ๋ถ„์„์„ ์œ„ํ•ด CodeQL ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋กœ์ปฌ ์ฒดํฌ ์•„์›ƒ์„ ์‚ฌ์šฉํ•˜๊ณ , ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ CodeQL CLI๋ฅผ ์„ค์ •ํ•˜๊ณ , GitHub์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

CodeQL์€(๋Š”) ๋‹ค์Œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์œ ํ˜•์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • GitHub Code Security๋ฅผ ์ง€์›ํ•˜๋Š” ์กฐ์ง ์†Œ์œ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ

CodeQL CLI ๊ณ ๊ธ‰ ์„ค์ • ์ •๋ณด

์ฝ”๋“œ ๊ฒ€์‚ฌ ์ด์ƒ์˜ ์šฉ๋„๋กœ CodeQL์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ CodeQL CLI์˜ ๊ณ ๊ธ‰ ์„ค์ •์„ ์„ ํ˜ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ CodeQL CLI ์„ค์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL CLI ์„ค์ •ํ•˜๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

CodeQL ์†Œ์Šค ์ฝ”๋“œ ์ง์ ‘ ์ฒดํฌ ์•„์›ƒ

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

1. CodeQL CLI tar ๋ณด๊ด€ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ

CodeQL CLI ๋‹ค์šด๋กœ๋“œ ํŒจํ‚ค์ง€๋Š” ๋„๊ตฌ, ์Šคํฌ๋ฆฝํŠธ ๋ฐ ๋‹ค์–‘ํ•œ CodeQL ๊ด€๋ จ ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” tar ๋ณด๊ด€ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. GitHub Enterprise ๋ผ์ด์„ ์Šค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ์ด ๋ณด๊ด€ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด GitHub CodeQL ์ด์šฉ ์•ฝ๊ด€์— ๋™์˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

https://github.com/github/codeql-action/releases์—์„œ CodeQL ๋ฒˆ๋“ค์„ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒˆ๋“ค์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • CodeQL CLI ์ œํ’ˆ
  • https://github.com/github/codeql์—์„œ ํ˜ธํ™˜๋˜๋Š” ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „
  • ๋ฒˆ๋“ค์— ํฌํ•จ๋˜๋Š” ๋ชจ๋“  ์ฟผ๋ฆฌ์˜ ์‚ฌ์ „ ์ปดํŒŒ์ผ ๋ฒ„์ „

์ฐธ๊ณ  ํ•ญ๋ชฉ

GitHub Enterprise Server 3.17์˜ ๊ฒฝ์šฐ, CodeQL CLI 2.20.7๋ฒ„์ „์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

ํ•ญ์ƒ CodeQL ๋ฒˆ๋“ค์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒˆ๋“ค์€ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•˜๊ณ  CodeQL CLI ์ฟผ๋ฆฌ๋ฅผ ๋ณ„๋„๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  CodeQL ์ฟผ๋ฆฌ๋ฅผ ์ฒดํฌ ์•„์›ƒํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋‚˜์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํŠน์ • ํ”Œ๋žซํผ์—์„œ๋งŒ CLI๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์ ์ ˆํ•œ codeql-bundle-PLATFORM.tar.zst ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ์ง€์›๋˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์— ํ•ด๋‹นํ•˜๋Š” CLI๊ฐ€ ํฌํ•จ๋œ codeql-bundle.tar.zst๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒˆ๋“ค์˜ tar.gz ๋ณ€ํ˜•๋„ ์žˆ์œผ๋ฉฐ, ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง€๋Š” gzip ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์••์ถ•๋œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” tar.zst ๋ณ€ํ˜•๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. tar.gz ๋ณ€ํ˜•์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ์œ ์ผํ•œ ์ด์œ ๋Š” ํ‘œ์ค€ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ด์ „ ์••์ถ• ํ•ด์ œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

2. ์ƒˆ CodeQL ๋””๋ ‰ํ„ฐ๋ฆฌ ๋งŒ๋“ค๊ธฐ

CLI ๋ฐ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ฟผ๋ฆฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์˜ˆ๋“ค ๋“ค์–ด $HOME/codeql-home์ž…๋‹ˆ๋‹ค.

CLI์˜ ๊ธฐ๋ณธ ์ œ๊ณต ๊ฒ€์ƒ‰ ์ž‘์—…์€ ๋ชจ๋“  ํ˜•์ œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ ๋ฐ ๋ถ„์„์— ์‚ฌ์šฉ๋˜๋Š” ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ์ฐพ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ž์ฒด ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์œ ์ง€ํ•˜๋ฉด ๋ช…๋ น์ค„์—์„œ ์ถ”๊ฐ€ ์˜ต์…˜์„ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ชจ๋“  ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด์„œ CLI๊ฐ€ ๊ด€๋ จ ์—†๋Š” ํ˜•์ œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. CodeQL ์ฟผ๋ฆฌ์˜ ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ ๊ฐ€์ ธ์˜ค๊ธฐ

CodeQL ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—๋Š” ์ง€์›๋˜๋Š” ๋ชจ๋“  ์–ธ์–ด์˜ CodeQL ๋ถ„์„์— ํ•„์š”ํ•œ ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ณต์‚ฌ๋ณธ์„ codeql-home์— ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณต์ œ๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ codeql์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 1๋‹จ๊ณ„์—์„œ ์ถ”์ถœํ•  CodeQL CLI๊ณผ(์™€) ์ถฉ๋Œํ•˜์ง€ ์•Š๋„๋ก ์ด ํด๋” codeql-repo์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๋ช…๋ น์ค„์—์„œ git์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ codeql-home์—์„œ git clone git@github.com:github/codeql.git codeql-repo์„ ์‹คํ–‰ํ•˜์—ฌ ํ•œ ๋‹จ๊ณ„์”ฉ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ณต์ œํ•˜๊ณ  ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์—์„œ ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” CodeQL ํŒฉ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ์ž์ฒด์™€ ํ•จ๊ป˜ CodeQL ํŒฉ์—๋Š” CodeQL CLI์—๊ฒŒ ์ฟผ๋ฆฌ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ๋Š” ์ค‘์š”ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ํŒฉ ๋งŒ๋“ค๊ธฐ ๋ฐ ์ž‘์—…์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ฐธ๊ณ  ํ•ญ๋ชฉ

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” CodeQL ์ฟผ๋ฆฌ์˜ ๋ฒ„์ „์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๋Š” ๋ฒ„์ „์„ ์ฒดํฌ ์•„์›ƒํ•ฉ๋‹ˆ๋‹ค.

  • ์ตœ์‹  CodeQL CLI ๋ฆด๋ฆฌ์Šค์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ codeql-cli/latest ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ๋ถ„๊ธฐ๋ฅผ ์ฒดํฌ ์•„์›ƒํ•ฉ๋‹ˆ๋‹ค. CodeQL CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ–ˆ๊ฑฐ๋‚˜ ์ตœ๊ทผ GitHub์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ด ๋ถ„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ตœ์‹  CodeQL ์ฟผ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด main ๋ถ„๊ธฐ๋ฅผ ์ฒดํฌ ์•„์›ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ถ„๊ธฐ๋Š” CodeQL ๋ถ„์„์˜ ์ตœ์‹  ๋ฒ„์ „์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

4. CodeQL CLI tar ๋ณด๊ด€ ํŒŒ์ผ ์ถ”์ถœ

2๋‹จ๊ณ„์—์„œ ๋งŒ๋“  ๋””๋ ‰ํ„ฐ๋ฆฌ์— tar ๋ณด๊ด€ ํŒŒ์ผ์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, CodeQL ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ณต์‚ฌ๋ณธ์˜ ๊ฒฝ๋กœ๊ฐ€ $HOME/codeql-home/codeql-repo์ธ ๊ฒฝ์šฐ CLI๋ฅผ $HOME/codeql-home/(์œผ)๋กœ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

5.codeql ์‹œ์ž‘

์ถ”์ถœํ•œ ํ›„์—๋Š” codeql ์‹คํ–‰ ํŒŒ์ผ์„ ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์‹คํ–‰ํ•˜์—ฌ CodeQL ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • <extraction-root>/codeql/codeql์„(๋ฅผ) ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ <extraction-root>๋Š” CodeQL CLI ํŒจํ‚ค์ง€๋ฅผ ์ถ”์ถœํ•œ ํด๋”์ž…๋‹ˆ๋‹ค.
  • codeql์ฒ˜๋Ÿผ ์‹คํ–‰ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก PATH์— <extraction-root>/codeql๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ CodeQL ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CodeQL CLI ๋ช…๋ น์˜ ์ „์ฒด ๋ชฉ๋ก์€ CodeQL CLI ๋ช…๋ น ์„ค๋ช…์„œ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

6. CodeQL CLI ์„ค์ • ํ™•์ธ

CodeQL CLI์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๋ถ„์„ํ•˜๋„๋ก ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜์œ„ ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋ฅผ ํ‘œ์‹œํ•˜๋ ค๋ฉด codeql resolve languages๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด CodeQL CLI ํŒจํ‚ค์ง€์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜๋Š” ์–ธ์–ด๊ฐ€ ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค.
  • codeql resolve qlpacks๋ฅผ ์‹คํ–‰ํ•˜์—ฌ CLI์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” CodeQL ํŒฉ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด CodeQL CLI์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  CodeQL ํŒฉ์˜ ์ด๋ฆ„์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€์›๋˜๋Š” ๊ฐ ์–ธ์–ด์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ ํŒฉ(์˜ˆ: codeql/{language}-queries). ์ด๋Ÿฌํ•œ ํŒฉ์—๋Š” ๊ฐ ๋ถ„์„์— ๋Œ€ํ•ด ์‹คํ–‰๋  ํ‘œ์ค€ ์ฟผ๋ฆฌ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • ์ง€์›๋˜๋Š” ๊ฐ ์–ธ์–ด์— ๋Œ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ(์˜ˆ: codeql/{language}-all). ์ด๋Ÿฌํ•œ ํŒฉ์—๋Š” ์ฟผ๋ฆฌ ์ž‘์„ฑ๊ธฐ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์–ด ํ๋ฆ„ ๋ฐ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ฐ™์€ ์ฟผ๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ง€์›๋˜๋Š” ๊ฐ ์–ธ์–ด์— ๋Œ€ํ•œ ์˜ˆ์‹œ ํŒฉ(์˜ˆ: codeql/{language}-examples). ์ด๋Ÿฌํ•œ ํŒฉ์—๋Š” ์ฟผ๋ฆฌ ์ž‘์„ฑ์ž์—๊ฒŒ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์šฉํ•œ CodeQL ์ฝ”๋“œ ์กฐ๊ฐ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ „ ์ œํ’ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“  ์‚ฌ์šฉ์ž ์ง€์ • ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ์ž์˜ CodeQL ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋„๋ก ํ•˜๋Š” ๋ ˆ๊ฑฐ์‹œ ํŒฉ.

๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์˜ CodeQL CLI ์‚ฌ์šฉ

์ตœ์‹  CodeQL ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ ๋˜๋Š” CodeQL ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์ง€๋งŒ GitHub Enterprise Server์—์„œ ํŠน์ • ๋ฒ„์ „์˜ CodeQL ์ฝ”๋“œ ๊ฒ€์‚ฌ์™€ ํ˜ธํ™˜๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ค€๋น„ํ•˜๋ ค๋ฉด ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์˜ CLI๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” CodeQL CLI์˜ ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ๋™์ผํ•œ ๋ถ€๋ชจ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋‘ CLI ๋ณด๊ด€ ํŒŒ์ผ์˜ ์••์ถ•์„ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GitHub.com์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‹ค์šด๋กœ๋“œ

GitHub์€(๋Š”) GitHub.com์— 200,000๊ฐœ ์ด์ƒ์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ CodeQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” REST API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ชฉ๋ก์€ ๋ณด์•ˆ ์—ฐ๊ตฌ๋ฅผ ์œ„ํ•œ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํฌํ•จํ•˜๋„๋ก ์ง€์†์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๊ณ  ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

VS Code ํ™•์žฅ์šฉ CodeQL์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ GitHub.com์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ถ„์„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ์ฟผ๋ฆฌ ์‹คํ–‰์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— /repos/<owner>/<repo>/code-scanning/codeql/databases ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” CodeQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด GitHub CLI์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ CodeQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gh api /repos/<owner>/<repo>/code-scanning/codeql/databases

์ด ๋ช…๋ น์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ์–ธ์–ด ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ ์‹œ๊ธฐ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” CodeQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” CodeQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์—†์œผ๋ฉด ์‘๋‹ต์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€์‹ฌ ์žˆ๋Š” ์–ธ์–ด์— ๋Œ€ํ•œ CodeQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ–ˆ์œผ๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gh api /repos/<owner>/<repo>/code-scanning/codeql/databases/<language> -H 'Accept: application/zip' > path/to/local/database.zip

์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”๋“œํฌ์ธํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•œ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

CodeQL CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„์„์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์••์ถ•์„ ํ’‰๋‹ˆ๋‹ค.