์ฐธ๊ณ ํญ๋ชฉ
์ด ์ฝํ ์ธ ๋ CodeQL CLI์ ์ต์ ๋ฆด๋ฆฌ์ค์ ๋ํด ์ค๋ช ํฉ๋๋ค. ์ด ์์์ ๋ํ ์์ธํ ๋ด์ฉ์ https://github.com/github/codeql-cli-binaries/releases์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ด์ ๋ฆด๋ฆฌ์ค์์ ์ด ๋ช
๋ น์ ์ฌ์ฉํ ์ ์๋ ์ต์
์ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ํฐ๋ฏธ๋์์ ์ต์
์ ์ฌ์ฉํ์ฌ --help
๋ช
๋ น์ ์คํํฉ๋๋ค.
๊ฐ์
codeql database trace-command [--threads=<num>] [--ram=<MB>] [--extractor-option=<extractor-option-name=value>] <options>... -- <database> <command>...
codeql database trace-command [--threads=<num>] [--ram=<MB>] [--extractor-option=<extractor-option-name=value>] <options>... -- <database> <command>...
์ค๋ช
[์ฐ๊ฒฐ] ์ถ์ ๋ ๋น๋์ ์ผ๋ถ๋ก ๋จ์ผ ๋ช ๋ น์ ์คํํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ถ์ ๊ธฐ์์ ์ง์ ๋ ๋จ์ผ ๋ช ๋ น์ค์ ์คํํ๋ฏ๋ก ์ผ๋ถ ์ถ์ถ์ ์ํํ ์ ์์ง๋ง ๊ฒฐ๊ณผ๋ก ๋ํ๋ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์๋ฃ๋์ง ์์ต๋๋ค.
์ต์
๊ธฐ๋ณธ ์ต์
<database>
[ํ์] ์์ฑ ์ค์ธ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฒฝ๋ก์ ๋๋ค. codeql ๋ฐ์ดํฐ๋ฒ ์ด์ค init์ ์ฌ์ฉํ์ฌ ์ถ์ถํ ์ค๋น๊ฐ ๋์ด ์์ด์ผ ํฉ๋๋ค.
--db-cluster
์ต์
์ด ์ง์ ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฒด๊ฐ ์๋๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ _ํฌํจ_ํ๋ ๋๋ ํฐ๋ฆฌ์ด๋ฉฐ ์ด๋ฌํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํจ๊ป ์ฒ๋ฆฌ๋ฉ๋๋ค.
<command>...
์คํํ ๋ช ๋ น์ ๋๋ค. ํ๋ก์ธ์ค๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ ํ๋ ์ด์์ ์ธ์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ธ์์ ์ธ์ ๊ฐ์ ํผ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ช ๋ น ์ธ์๋ฅผ ๋์ดํ๊ธฐ ์ ์ '--' ์ธ์๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด ๋ช ๋ น์ ์ํ ์ฝ๋ 0์ผ๋ก ์ข ๋ฃ๋์ด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ์ข ๋ฃ ์ฝ๋๋ ์ค๋ฅ๋ก ํด์๋ฉ๋๋ค.
--index-traceless-dbs
๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ ๋ช
๋ น์ ์๋ตํ ์ ์์ต๋๋ค.
-j, --threads=<num>
์ถ์ถ๊ธฐ์์ ํด๋น ์ค๋ ๋ ์๋ฅผ ์ฌ์ฉํ๋๋ก ์์ฒญํฉ๋๋ค. ์ด ์ต์ ์ ์ ์์ผ๋ก์จ ์ถ์ถ๊ธฐ๋ก ์ ๋ฌ๋ฉ๋๋ค. CODEQL_THREADS ํ๊ฒฝ ๋ณ์๊ฐ ์ค์ ๋๋ฉด ํ๊ฒฝ ๋ณ์ ๊ฐ์ด ์ด ์ต์ ๋ณด๋ค ์ฐ์ ํฉ๋๋ค.
0์ ์ ๋ฌํ์ฌ ์ปดํจํฐ์ ์ฝ์ด๋น ํ๋์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ -_N_์ ์ ๋ฌํ์ฌ _N_๊ฐ์ ์ฝ์ด๋ฅผ ์ฌ์ฉํ์ง ์์ ์ํ๋ก ๋ ์ ์์ต๋๋ค(ํ๋ ์ด์์ ์ค๋ ๋๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์ธ).
-M, --ram=<MB>
์ถ์ถ๊ธฐ์์ ํด๋น ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ก ์์ฒญํฉ๋๋ค. ์ด ์ต์ ์ ์ ์์ผ๋ก์จ ์ถ์ถ๊ธฐ๋ก ์ ๋ฌ๋ฉ๋๋ค. CODEQL_RAM ํ๊ฒฝ ๋ณ์๊ฐ ์ค์ ๋๋ฉด ํ๊ฒฝ ๋ณ์ ๊ฐ์ด ์ด ์ต์ ๋ณด๋ค ์ฐ์ ํฉ๋๋ค.
--[no-]db-cluster
๋ช ๋ น์ค์ ์ง์ ๋ ๋๋ ํฐ๋ฆฌ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฒด๊ฐ ์๋๋ผ ์์ฑ ์ค์ธ ํ๋ ์ด์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ _ํฌํจ_ํ๋ ๋๋ ํฐ๋ฆฌ์์ ๋ํ๋ ๋๋ค. ์ด๋ฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํจ๊ป ์ฒ๋ฆฌ๋ฉ๋๋ค.
--no-tracing
[๊ณ ๊ธ] ์ง์ ๋ ๋ช ๋ น์ ์ถ์ ํ์ง ์๊ณ ๋ช ๋ น์ ์์กดํ์ฌ ํ์ํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์์ฑํฉ๋๋ค.
--extra-tracing-config=<tracing-config.lua>
[๊ณ ๊ธ] ์ถ์ ๊ธฐ ๊ตฌ์ฑ ํ์ผ์ ๊ฒฝ๋ก์ ๋๋ค. ๋น๋ ์ถ์ ๊ธฐ์ ๋์์ ์์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋น๋ ๋ช ๋ น์ ์ผ๋ถ๋ก ์คํ๋๋ ์ปดํ์ผ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๊ณ ๋ค๋ฅธ ๋๊ตฌ์ ์คํ์ ํธ๋ฆฌ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ถ์ถ๊ธฐ๋ ๋๋ถ๋ถ์ ์ํฉ์์ ์๋ํด์ผ ํ๋ ๊ธฐ๋ณธ ์ถ์ ๊ธฐ ๊ตฌ์ฑ ํ์ผ์ ์ ๊ณตํฉ๋๋ค.
--[no-]index-traceless-dbs
์ง์ ๋ ๋ช
๋ น ์ธ์๋ ๋น๋ ํ๋ก์ธ์ค ์ถ์ ์ ์์กดํ์ง ์๋ ์ถ์ถ๊ธฐ์ ๋ํด ๊ธฐ๋ณธ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค. --db-cluster
๋ก ์ฌ๋ฌ ์ธ์ด์ ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ ์ด ์ต์
์ codeql database trace-command์ ์ ํํ ํ ๋ฒ ํธ์ถํ ๋ ์ง์ ํด์ผ ํฉ๋๋ค.
--[no-]use-build-mode
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๋ ๋ชจ๋์ ๋ฐ๋ผ ๋ฌด์์ ์คํํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ์ด ์ต์
์ --index-traceless-dbs
๊ณผ(์) ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค.
--working-dir=<dir>
[๊ณ ๊ธ] ์ง์ ๋ ๋ช
๋ น์ ์คํํด์ผ ํ๋ ๋๋ ํฐ๋ฆฌ์
๋๋ค. ์ด ์ธ์๊ฐ ์ ๊ณต๋์ง ์์ผ๋ฉด ๋ช
๋ น์ด codeql ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง๋ค๊ธฐ์ ์ ๋ฌ๋ --source-root
๊ฐ(์๋ ๊ฒฝ์ฐ)์ผ๋ก ์คํ๋ฉ๋๋ค. --source-root
์ธ์๊ฐ ์ ๊ณต๋์ง ์์ผ๋ฉด ๋ช
๋ น์ด ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ์์ ์คํ๋ฉ๋๋ค.
--no-run-unnecessary-builds
[๊ณ ๊ธ] ์์ฑ ์ค์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋น๋ ํ๋ก์ธ์ค ์ถ์ ์ ์์กดํ๋ ์ถ์ถ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง ์ง์ ๋ ๋น๋ ๋ช ๋ น์ ์คํํฉ๋๋ค. ์ด ์ต์ ์ ์ง์ ํ์ง ์์ผ๋ฉด ๋ค๋ฅธ ์ด์ ๋ก ์ธํด ๋ถ์์ฉ์ด ํ์ํ๋ค๋ ๊ฐ์ ํ์ CodeQL์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ ๋ช ๋ น์ด ์คํ๋ฉ๋๋ค.
์ถ์ถ๊ธฐ ๋์ ์ ์ด ์ต์
-O, --extractor-option=<extractor-option-name=value>
CodeQL ์ถ์ถ๊ธฐ์ ๋ํ ์ต์
์ ์ค์ ํฉ๋๋ค. extractor-option-name
์(๋) extractor_name.group1.group2.option_name ๋๋ group1.group2.option_name์ ํ์์ด์ด์ผ ํฉ๋๋ค. extractor_option_name
์ด(๊ฐ) ์ถ์ถ๊ธฐ ์ด๋ฆ์ผ๋ก ์์ํ๋ ๊ฒฝ์ฐ, ํ์๋ ์ถ์ถ๊ธฐ๋ group1.group2.option_name ์ต์
์ ์ ์ธํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ต์
group1.group2.option_name์ ์ ์ธํ๋ ๋ชจ๋ ์ถ์ถ๊ธฐ์์ ์ต์
์ ์ค์ ํฉ๋๋ค. value
์(๋) ์ค์ ํฌํจํ์ง ์๋ ๋ชจ๋ ๋ฌธ์์ด์ผ ์ ์์ต๋๋ค.
์ด ๋ช
๋ น์ค ์ต์
์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ถ์ถ๊ธฐ ์ต์
์ ์ค์ ํ ์ ์์ต๋๋ค. ๋์ผํ ์ถ์ถ๊ธฐ ์ต์
์ ์ฌ๋ฌ ๊ฐ์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ, ๋์์ ์ถ์ถ๊ธฐ ์ต์
์ด ์์ํ๋ ํ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ฌธ์์ด ์ต์
์ ์ ๊ณต๋ ๋ง์ง๋ง ๊ฐ์ ์ฌ์ฉํฉ๋๋ค. ๋ฐฐ์ด ์ต์
์ ์ ๊ณต๋ ๋ชจ๋ ๊ฐ์ ์์๋๋ก ์ฌ์ฉํฉ๋๋ค. ์ด ๋ช
๋ น์ค ์ต์
์ ์ฌ์ฉํ์ฌ ์ง์ ๋ ์ถ์ถ๊ธฐ ์ต์
์ ์ถ์ถ๊ธฐ ์ต์
์ ํตํด --extractor-options-file
์ด(๊ฐ) ์ ๊ณต๋ ํ์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
codeql ๋ฐ์ดํฐ๋ฒ ์ด์ค init ๋๋ codeql database begin-tracing
์ ์ ๋ฌ๋๋ฉด ์ต์
์ด ๊ฐ์ ์ถ์ ํ๊ฒฝ์๋ง ์ ์ฉ๋ฉ๋๋ค. ์ํฌํ๋ก์์ codeql ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ถ์ ๋ช
๋ น์ ํธ์ถํ๋ ๊ฒฝ์ฐ, ์ํ๋ ๊ฒฝ์ฐ์ ์ต์
๋ ์ ๋ฌํด์ผ ํฉ๋๋ค.
๊ฐ ์ถ์ถ๊ธฐ์์ ์ ์ธํ ์ต์ ์ ๋์ดํ๋ ๋ฐฉ๋ฒ์ ํฌํจํ์ฌ CodeQL ์ถ์ถ๊ธฐ ์ต์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ https://codeql.github.com/docs/codeql-cli/extractor-options์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
--extractor-options-file=<extractor-options-bundle-file>
์ถ์ถ๊ธฐ ์ต์
๋ฒ๋ค ํ์ผ์ ์ง์ ํฉ๋๋ค. ์ถ์ถ๊ธฐ ์ต์
๋ฒ๋ค ํ์ผ์ ์ถ์ถ๊ธฐ ์ต์
์ ์ค์ ํ๋ JSON ํ์ผ(ํ์ฅ๋ช
.json
) ๋๋ YAML ํ์ผ(ํ์ฅ๋ช
.yaml
๋๋ .yml
)์
๋๋ค. ํ์ผ์๋ ์ต์์ ๋งต ํค 'extractor'๊ฐ ์์ด์ผ ํ๋ฉฐ, ๊ทธ ์๋์๋ ์ถ์ถ๊ธฐ ์ด๋ฆ์ด ๋ ๋ฒ์งธ ์์ค ๋งต ํค๋ก ์ง์ ๋์ด์ผ ํฉ๋๋ค. ์ง๋์ ์ถ๊ฐ ์์ค์ ์ค์ฒฉ๋ ์ถ์ถ๊ธฐ ๊ทธ๋ฃน์ ๋ํ๋ด๋ฉฐ ๋ฌธ์์ด ๋ฐ ๋ฐฐ์ด ์ต์
์ ๋ฌธ์์ด ๋ฐ ๋ฐฐ์ด ๊ฐ์ด ์๋ ์ง๋ ํญ๋ชฉ์
๋๋ค.
์ถ์ถ๊ธฐ ์ต์
๋ฒ๋ค ํ์ผ์ ์ง์ ๋ ์์๋๋ก ์ฝ์ต๋๋ค.
๋ค๋ฅธ ์ถ์ถ๊ธฐ ์ต์
๋ฒ๋ค ํ์ผ์์ ๋์ผํ ์ถ์ถ๊ธฐ ์ต์
์ ์ง์ ํ๋ ๊ฒฝ์ฐ, ๋์์ ์ถ์ถ๊ธฐ ์ต์
์ด ์์ํ๋ ํ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ฌธ์์ด ์ต์
์ ์ ๊ณต๋ ๋ง์ง๋ง ๊ฐ์ ์ฌ์ฉํฉ๋๋ค. ๋ฐฐ์ด ์ต์
์ ์ ๊ณต๋ ๋ชจ๋ ๊ฐ์ ์์๋๋ก ์ฌ์ฉํฉ๋๋ค. ์ด ๋ช
๋ น์ค ์ต์
์ ์ฌ์ฉํ์ฌ ์ง์ ๋ ์ถ์ถ๊ธฐ ์ต์
์ ์ถ์ถ๊ธฐ ์ต์
์ ํตํด --extractor-option
์ด(๊ฐ) ์ ๊ณต๋๊ธฐ ์ ์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
codeql ๋ฐ์ดํฐ๋ฒ ์ด์ค init ๋๋ codeql database begin-tracing
์ ์ ๋ฌ๋๋ฉด ์ต์
์ด ๊ฐ์ ์ถ์ ํ๊ฒฝ์๋ง ์ ์ฉ๋ฉ๋๋ค. ์ํฌํ๋ก์์ codeql ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ถ์ ๋ช
๋ น์ ํธ์ถํ๋ ๊ฒฝ์ฐ, ์ํ๋ ๊ฒฝ์ฐ์ ์ต์
๋ ์ ๋ฌํด์ผ ํฉ๋๋ค.
๊ฐ ์ถ์ถ๊ธฐ์์ ์ ์ธํ ์ต์ ์ ๋์ดํ๋ ๋ฐฉ๋ฒ์ ํฌํจํ์ฌ CodeQL ์ถ์ถ๊ธฐ ์ต์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ https://codeql.github.com/docs/codeql-cli/extractor-options์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ผ๋ฐ ์ต์
-h, --help
์ด ๋์๋ง ํ ์คํธ๋ฅผ ํ์ํฉ๋๋ค.
-J=<opt>
[๊ณ ๊ธ] ๋ช ๋ น์ ์คํํ๋ JVM์ ์ต์ ์ ์ง์ ํฉ๋๋ค.
(๊ณต๋ฐฑ์ ํฌํจํ๋ ์ต์ ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌ๋์ง ์์ ์ ์์ผ๋ ์ฃผ์ํ์ธ์.)
-v, --verbose
์ถ๋ ฅ๋๋ ์งํ๋ฅ ๋ฉ์์ง ์๋ฅผ ์ ์ง์ ์ผ๋ก ๋๋ฆฝ๋๋ค.
-q, --quiet
์ถ๋ ฅ๋๋ ์งํ๋ฅ ๋ฉ์์ง ์๋ฅผ ์ ์ง์ ์ผ๋ก ์ค์ ๋๋ค.
--verbosity=<level>
[๊ณ ๊ธ] ์ธ๋ถ ์ ๋ณด ํ์ ์์ค์ ์ค๋ฅ, ๊ฒฝ๊ณ , ์งํ๋ฅ , ์งํ๋ฅ +, ์งํ๋ฅ ++, ์งํ๋ฅ +++ ์ค ํ๋๋ก ๋ช
์์ ์ผ๋ก ์ค์ ํฉ๋๋ค. -v
๋ฐ -q
๋ฅผ ์ฌ์ ์ํฉ๋๋ค.
--logdir=<dir>
[๊ณ ๊ธ] ํ์์คํฌํ์ ์คํ ์ค์ธ ํ์ ๋ช ๋ น์ ์ด๋ฆ์ ํฌํจํ๋ ์์ฑ๋ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์ง์ ๋ ๋๋ ํฐ๋ฆฌ์ ์๋ ํ๋ ์ด์์ ํ์ผ์ ์์ธํ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
(๋ชจ๋ ๊ถํ์ ๊ฐ์ง ์ด๋ฆ์ผ๋ก ๋ก๊ทธ ํ์ผ์ ์์ฑํ๋ ค๋ฉด --log-to-stderr
์(๋ฅผ) ์ง์ ํ๊ณ stderr๋ฅผ ์ํ๋ ๋๋ก ๋ฆฌ๋๋ ์
ํฉ๋๋ค.)
--common-caches=<dir>
[๊ณ ๊ธ] ๋ค์ด๋ก๋ํ QL ํฉ ๋ฐ ์ปดํ์ผ๋ ์ฟผ๋ฆฌ ๊ณํ๊ณผ ๊ฐ์ด ์ฌ๋ฌ CLI ์คํ ๊ฐ์ ์ ์ง๋๋ ๋์คํฌ์ ์บ์๋ ๋ฐ์ดํฐ์ ์์น๋ฅผ ์ ์ดํฉ๋๋ค. ๋ช
์์ ์ผ๋ก ์ค์ ํ์ง ์์ ๊ฒฝ์ฐ ์ด ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉ์์ ํ ๋๋ ํฐ๋ฆฌ์ ์ด๋ฆ์ด ์ง์ ๋ .codeql
๋๋ ํฐ๋ฆฌ๋ก ์ค์ ๋๋ฉฐ, ์์ง ์๋ ๊ฒฝ์ฐ ๋ง๋ค์ด์ง๋๋ค.
v2.15.2
๋ถํฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.