Visual Studio Code ์ต์คํ ์ ์ฉ CodeQL์ ์ค์ ์ ๋ณด
๋ค์์ ํฌํจํ์ฌ Visual Studio Code ์ต์คํ ์ ์ฉ CodeQL์ ๋ํ ๋ค์ํ ์ค์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- ์ต์คํ ์ ์์ ์ฌ์ฉํ๋ CodeQL CLI์ ๋ฒ์ .
- ์ต์คํ ์ ์์ ์ด์ ์ฟผ๋ฆฌ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ.
- ์ต์คํ ์ ์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ.
CodeQL ํ์ฅ ์ค์ ํธ์ง
-
"์ต์คํ ์ " ๋ณด๊ธฐ๋ฅผ ์ด๊ณ CodeQL ์(๋ฅผ) ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ก ํด๋ฆญํ ๋ค์ ์ต์คํ ์ ์ค์ ์ ํด๋ฆญํฉ๋๋ค.
-
์ค์ ์ฐฝ์์ ์ํ๋ ๋๋ก ์ค์ ์ ํธ์งํฉ๋๋ค. ์ ์ค์ ์ด ์๋์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
ํ
๋๋ VS Code Command Palette๋ฅผ ์ด๊ณ ๊ธฐ๋ณธ ์ค์ : ์ฌ์ฉ์ ์ค์ ์ด๊ธฐ(JSON) ๋ฅผ ์ ํํ์ฌ JSON ํ์์ผ๋ก ์ค์ ์ ํธ์งํ ์ ์์ต๋๋ค.
CodeQL CLI์ ๋ฒ์ ์ ํ
๊ธฐ๋ณธ ๋์์ ์ฌ์ ์ํ๊ณ ํน์ ๋ฒ์ ์ CodeQL CLI์(๋ฅผ) ์ฌ์ฉํ๊ธฐ ์ํด ์ต์คํ
์
์ค์ ์์ CodeQL CLI "์คํ ๊ฒฝ๋ก"๋ฅผ ์ง์ ํ๊ณ CodeQL CLI์ ๊ธฐ์กด ๋ณต์ฌ๋ณธ์ ๊ฐ๋ฆฌํฌ ์ ์์ต๋๋ค. ์ฆ, ๋ช
๋ช
๋ codeql
ํ์ผ(Linux ๋ฐ macOS) ๋๋ codeql.exe
(Windows)์
๋๋ค. ๊ธฐ๋ณธ ๋์์ ๋ํ ์์ธํ ์ ๋ณด๋ CodeQL CLI์ ๋ํ ์ก์ธ์ค ๊ตฌ์ฑ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ฟผ๋ฆฌ ๊ธฐ๋ก ํญ๋ชฉ์ ๋ ์ด๋ธ ๋ณ๊ฒฝ
์ฟผ๋ฆฌ ๊ธฐ๋ก "ํ์" ์ค์ ์ ์ต์คํ ์ ์ด ์ฟผ๋ฆฌ ๊ธฐ๋ก์ ์ฟผ๋ฆฌ๋ฅผ ๋์ดํ๋ ๋ฐฉ๋ฒ์ ์ ์ดํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ ํญ๋ชฉ์๋ ๋ค์ ํ์์ ๋ ์ด๋ธ์ด ์์ต๋๋ค.
QUERY-NAME on DATABASE-NAME - QUERY-STATUS NUMBER-OF-RESULTS [QUERY-RUNTIME]
๊ธฐ๋ณธ ๋ ์ด๋ธ์ ์ฌ์ ์ํ๋ ค๋ฉด ์ฟผ๋ฆฌ ๊ธฐ๋ก ํญ๋ชฉ์ ๋ค๋ฅธ ํ์์ ์ง์ ํ๋ฉด ๋ฉ๋๋ค.
์ฟผ๋ฆฌ ๊ธฐ๋ก ํญ๋ชฉ์ ๋ณด์กด ๊ธฐ๊ฐ ๋ณ๊ฒฝ
๊ธฐ๋ณธ์ ์ผ๋ก "์ฟผ๋ฆฌ ๊ธฐ๋ก" ๋ณด๊ธฐ์ ํญ๋ชฉ์ 30์ผ ๋์ ์ ์ง๋ฉ๋๋ค. "์ฟผ๋ฆฌ ๊ธฐ๋ก: Ttl" ์ค์ ์ ๋ณ๊ฒฝํ์ฌ ๋ค๋ฅธ TTL(Time to Live)์ ์ค์ ํ ์ ์์ต๋๋ค. ํญ๋ชฉ์ ๋ฌด๊ธฐํ ๋ณด์กดํ๋ ค๋ฉด ๊ฐ์ 0์ผ๋ก ์ค์ ํฉ๋๋ค.
๋ก์ปฌ๋ก ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ํ ์ค์ ๊ตฌ์ฑ
"์ฟผ๋ฆฌ ์คํ" ์๋์๋ ์ฌ๋ฌ ๊ฐ์ง ์ค์ ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฟผ๋ฆฌ๊ฐ ๋๋ฌด ๋๋ฆฌ๊ฒ ์คํ๋๊ณ ์๊ฐ์ด ์์ฃผ ์ด๊ณผ๋๋ ๊ฒฝ์ฐ "์ฟผ๋ฆฌ ์คํ: ๋ฉ๋ชจ๋ฆฌ" ์ค์ ์ ๋ณ๊ฒฝํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ฆด ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๊ฒ์ฌํ๋ ค๋ฉด ํ์ด๋ฐ ๋ฐ ํํ ์๋ฅผ ํฌํจํ๋๋ก "์ฟผ๋ฆฌ ์คํ: ๋๋ฒ๊ทธ" ์ค์ ์ ์ฌ์ฉํ๋๋ก ์ค์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด "์ถ๋ ฅ" ๋ณด๊ธฐ์ CodeQL "์ฟผ๋ฆฌ ์๋ฒ" ํญ์ ๋ก๊ทธ์ ํ์๋ฉ๋๋ค. ํํ ์๋ ์ฟผ๋ฆฌ์์ ๊ณ์ฐํ ์กฐ๊ฑด์์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๊ธฐ ๋๋ฌธ์ ์ ์ฉํฉ๋๋ค.
์ฌ์ฉ์ ์ง์ ์์น์ ์ฟผ๋ฆฌ ์๋ฒ ๋ก๊ทธ๋ฅผ ์ ์ฅํ๋ ค๋ฉด "์ฟผ๋ฆฌ ์คํ: ์ฌ์ฉ์ ์ง์ ๋ก๊ทธ ๋๋ ํฐ๋ฆฌ" ์ค์ ์ ํธ์งํฉ๋๋ค. ์ฌ์ฉ์ ์ง์ ๋ก๊ทธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ต์คํ ์ ์ ๊ฐ ์์ ์์ญ ์ธ์ ํ์ ์๋์ผ๋ก ์ญ์ ํ๋ ๋์ ๋ก๊ทธ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ด๋ฌํ ๋ก๊ทธ๋ฅผ ์กฐ์ฌํ์ฌ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์ํ๋ ค๋ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
๋ณํ ๋ถ์์ ์ํ ์ค์ ๊ตฌ์ฑ
databases.json
์ด๋ผ๋ Visual Studio Code ์์
์์ญ์์ ํ์ผ์ ํธ์งํ์ฌ "๋ณํ ๋ถ์ ๋ฆฌํฌ์งํ ๋ฆฌ" ๋ณด๊ธฐ์ ํ์๋ ํญ๋ชฉ์ ํธ์งํ ์๋ ์์ต๋๋ค. ์ด ํ์ผ์๋ ๋ณด๊ธฐ์ ํ์๋ ๋ชจ๋ ํญ๋ชฉ์ JSON ํํ์ด ํฌํจ๋์ด ์์ต๋๋ค. ํธ์ง๊ธฐ ์ฐฝ์์ databases.json
ํ์ผ์ ์ด๋ ค๋ฉด "๋ณํ ๋ถ์ ๋ฆฌํฌ์งํ ๋ฆฌ" ๋ณด๊ธฐ์ ์ค๋ฅธ์ชฝ ์์ ์๋ { } ์์ด์ฝ์ ํด๋ฆญํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ณด๊ธฐ์์ ๋ฆฌํฌ์งํ ๋ฆฌ, ์กฐ์ง ๋ฐ ๋ชฉ๋ก์ ๊ตฌ์กฐํ๋ ํํ์ ํ์ธํ ์ ์์ต๋๋ค. ์์:
{
"version": 1,
"databases": {
"variantAnalysis": {
"repositoryLists": [
{
"name": "My favorite JavaScript repos",
"repositories": [
"facebook/react",
"babel/babel",
"angular/angular"
]
}
],
"owners": [
"microsoft"
],
"repositories": [
"apache/hadoop"
]
}
},
"selected": {
"kind": "variantAnalysisSystemDefinedList",
"listName": "top_10"
}
}
๋ณด๊ธฐ์ ํ์๋ ํญ๋ชฉ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ด ํ์ผ์ ์ง์ ํธ์งํ์ฌ ์ ํญ๋ชฉ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํ ์ค์ ๊ตฌ์ฑ
์์ ์์ญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ณธ ํด๋๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ๋ ค๋ฉด "๋ฐ์ดํฐ๋ฒ ์ด์ค ์ถ๊ฐ: ์์ ์์ญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ณธ ์ถ๊ฐ" ์ค์ ์ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
์ด ์ค์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋๋ก ์ค์ ๋ฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ค ์ฝ๋๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ฐพ์๋ณด๋ ๊ฒฝ์ฐ(์: ์ฝ๋์ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ฅผ ๋ณด๋ ค๋ฉด) ์ค์ ์ ์ฌ์ฉํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์์ค ์ฝ๋์ ๊ตฌ์กฐ ํ์์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ฐธ๊ณ ํญ๋ชฉ
๋จ์ผ ํด๋ ์์ ์์ญ์ ์๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ณธ ํด๋๋ฅผ ์ถ๊ฐํ๋ฉด ์์ ์์ญ์ด ๋ค์ค ๋ฃจํธ ์์ ์์ญ์ผ๋ก ๋ค์ ๋ก๋๋ฉ๋๋ค. ์ด๋ก ์ธํด ์ฟผ๋ฆฌ ๊ธฐ๋ก ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชฉ๋ก์ด ๋ค์ ์ค์ ๋ ์ ์์ต๋๋ค.
์ด ์ค์ ์ ์ฌ์ฉํ๋๋ก ์ค์ ํ๊ธฐ ์ ์ ์์ ์์ญ์ ๋ค์ค ๋ฃจํธ ์์ ์์ญ์ผ๋ก ์ ์ฅํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์์ธํ ๋ด์ฉ์ Visual Studio Code ์ค๋ช ์์ ๋ค์ค ๋ฃจํธ ์์ ์์ญ์ ์ฐธ์กฐํ์ธ์.
๋ก์ปฌ์์ ์ฟผ๋ฆฌ๋ฅผ ํ ์คํธํ๊ธฐ ์ํ ์ค์ ๊ตฌ์ฑ
์ฟผ๋ฆฌ ํ ์คํธ์ ์ฌ์ฉ๋๋ ์ค๋ ๋ ์๋ฅผ ๋๋ฆฌ๋ ค๋ฉด "์คํ ์ค์ธ ํ ์คํธ: ์ค๋ ๋ ์" ์ค์ ์ ์ ๋ฐ์ดํธํ๋ฉด ๋ฉ๋๋ค.
ํ ์คํธ๋ฅผ ์คํํ ๋ CodeQL CLI์ ์ถ๊ฐ ์ธ์๋ฅผ ์ ๋ฌํ๋ ค๋ฉด "ํ ์คํธ ์คํ: ์ถ๊ฐ ํ ์คํธ ์ธ์" ์ค์ ์ ์ ๋ฐ์ดํธํ๋ฉด ๋ฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ ์คํธ ์คํ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์๊ฒฉ ๋ถ์ ๋ฐ ๋ฐ์ดํฐ ์์ง์ ๋ํ ์ค์ ๊ตฌ์ฑ
CodeQL ์ต์คํ ์ ์์ ์๊ฒฉ ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์์งํ ์ง ์ฌ๋ถ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด ์ต์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ Visual Studio Code์ฉ CodeQL์ ์๊ฒฉ ๋ถ์์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ถ๊ฐ ์ฐธ๊ณ ์๋ฃ
- Visual Studio Code ์ค๋ช ์์ ์ฌ์ฉ์ ๋ฐ ์์ ์์ญ ์ค์