CodeQL ์ฟผ๋ฆฌ ์คํ ์ ๋ณด
github/codeql
๋ฆฌํฌ์งํ ๋ฆฌ์๋ ๋ง์ ์์ ์์ ์ฟผ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. "์ฟผ๋ฆฌ" ๋ณด๊ธฐ๋ฅผ ํตํด ์์
์์ญ์ ๊ธฐ์กด ์ฟผ๋ฆฌ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
ํ์ ์กฐ๊ฑด
์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ถ์ํ๋ ค๋ฉด ์ฝ๋์์ ์ถ์ถ๋ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฏ๋ก ์ต์คํ ์ ์์ ์์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํด์ผ ํฉ๋๋ค. ๋ก์ปฌ(ZIP ๋ณด๊ด ํ์ผ ๋๋ ๋ณด๊ดํ์ง ์์ ํด๋์์), ๊ณต์ฉ URL ๋๋ GitHub.com์ ํ๋ก์ ํธ URL์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๋จ์ผ ์ฟผ๋ฆฌ ์คํ
-
์ฌ์ด๋๋ฐ์์ "์ฟผ๋ฆฌ" ๋ณด๊ธฐ๋ฅผ ์ฝ๋๋ค.
-
์ ํํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ค๋ฉด ์ํ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ง์ฐ์ค๋ก ๊ฐ๋ฆฌํจ ๋ค์ ๋ก์ปฌ ์ฟผ๋ฆฌ ์คํ ์์ด์ฝ์ ํด๋ฆญํฉ๋๋ค.
CodeQL ์ต์คํ ์ ์ ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋ฅธ์ชฝ ํ๋จ์ ์งํ๋ฅ ์ ๋ณด๊ณ ํฉ๋๋ค. ๊ฒฐ๊ณผ๊ฐ ์ค๋น๋๋ฉด CodeQL "์ฟผ๋ฆฌ ๊ฒฐ๊ณผ" ๋ณด๊ธฐ์ ํ์๋ฉ๋๋ค.
์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋ฅธ์ชฝ ํ๋จ์ ์๋ฆผ์ด ํ์๋ฉ๋๋ค. ์๋ฆผ์๋ ์ค๋ฅ ๋ฉ์์ง ์ธ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ธ๋ถ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค.
๋๋ ํฐ๋ฆฌ์์ ๋ชจ๋ ์ฟผ๋ฆฌ ์คํ
๋๋ ํฐ๋ฆฌ์ ๋ชจ๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
-
์ฌ์ด๋๋ฐ์์ "์ฟผ๋ฆฌ" ๋ณด๊ธฐ๋ฅผ ์ฝ๋๋ค.
-
์ํ๋ ์ฟผ๋ฆฌ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง์ฐ์ค๋ก ๊ฐ๋ฆฌํจ ๋ค์ ๋ก์ปฌ ์ฟผ๋ฆฌ ์คํ ์์ด์ฝ์ ํด๋ฆญํฉ๋๋ค.
์ฟผ๋ฆฌ ์ ํ ์คํ
๋จ์ผ ๋ช ๋ น์ผ๋ก ์ฌ๋ฌ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
-
ํ์ผ ํ์๊ธฐ๋ก ์ด๋ํฉ๋๋ค.
-
์ฟผ๋ฆฌ๊ฐ ํฌํจ๋ ์ฌ๋ฌ ํ์ผ ๋๋ ํด๋๋ฅผ ์ ํํฉ๋๋ค.
-
๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ฅผ ํด๋ฆญํ๊ณ CodeQL: ์ ํํ ํ์ผ์์ ์ฟผ๋ฆฌ ์คํ์ ์ ํํฉ๋๋ค.
์ค์ ์์ด ์ฟผ๋ฆฌ ์คํ
์ ์ฟผ๋ฆฌ๋ฅผ ์์
ํ ๋ ์์
์์ญ์ .ql
ํ์ผ์ ์ ์ฅํ์ง ์๊ณ ๋ "๋น ๋ฅธ ์ฟผ๋ฆฌ" ํญ์ ์ด์ด ์ฝ๋๋ฅผ ์ฝ๊ฒ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. VS Code Command Palette์์ CodeQL: ๋น ๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ์ ํํ ๋ค์ CodeQL: ์ ํํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ ์คํ์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์คํํฉ๋๋ค.
"์ฟผ๋ฆฌ ๊ธฐ๋ก" ๋ณด๊ธฐ์ ํ์ฌ ์ธ์ ์์ ์คํํ ๋ชจ๋ ๋น ๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ํญ๋ชฉ์ ํด๋ฆญํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ ๋น ๋ฅธ ์ฟผ๋ฆฌ์ ์ ํํ ํ ์คํธ๋ฅผ ํ์ธํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฟผ๋ฆฌ ๊ธฐ๋ก ๋ณด๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋น ๋ฅธ ์ฟผ๋ฆฌ์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ ๋์ค์ ์ก์ธ์คํ ์ ์๋๋ก CodeQL ํฉ์ ์ ์ฅํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ํฉ์ ์ฌ์ฉํ์ฌ ๋ถ์ ์ฌ์ฉ์ ์ง์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ฟผ๋ฆฌ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํน์ ๋ถ๋ถ ์คํ
์ด๋ ์ฟผ๋ฆฌ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋๋ฒ๊น ํ๊ณ ์๋ชป๋ ๋ถ๋ถ์ ์ฐพ์ผ๋ ค๋ ๊ฒฝ์ฐ์ ์ ์ฉํ ์ ์์ต๋๋ค.
CodeQL: ์ ํํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ ์คํ์ ์ฌ์ฉํ๋ ๋์ , ์ ์ฒด ์ฟผ๋ฆฌ(select ์ ๋ฐ ์ฟผ๋ฆฌ ์กฐ๊ฑด์)๋ฅผ ์คํํ์ฌ CodeQL: ๋น ๋ฅธ ํ๊ฐ๋ฅผ ํตํด .ql
๋๋ .qll
ํ์ผ์ ํน์ ๋ถ๋ถ์ ์คํํ ์ ์์ต๋๋ค.
CodeQL: ๋น ๋ฅธ ํ๊ฐ๋ ์ ์ฒด ์ฟผ๋ฆฌ ๋์ ์ ํํ ์ฝ๋ ์กฐ๊ฐ์ ํ๊ฐํ๊ณ ํด๋น ์ ํ ๊ฒฐ๊ณผ๋ฅผ "๊ฒฐ๊ณผ" ๋ณด๊ธฐ์ ํ์ํฉ๋๋ค.
๋น ๋ฅธ ํ๊ฐ๋ฅผ ์ํ ๊ฐ๋ฅํ ๋์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
CodeQL ์ํฐํฐ์ ์ด๋ฆ(์: ํด๋์ค ๋๋ ์กฐ๊ฑด์)์ ์ ํํ์ฌ ํด๋น ์ํฐํฐ๋ฅผ ํ๊ฐํฉ๋๋ค.
-
์์ ๋ณ์๊ฐ ์๋ ์์ ๋๋ ์์ ์ ํํ์ฌ ํด๋น ์์ ๋๋ ์์ ํ๊ฐํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ์กฐ๊ฐ์์ ๋น ๋ฅธ ํ๊ฐ๋ฅผ ์ํด ์กฐ๊ฑด์ ์ด๋ฆ foo
๋๋ s = "bar"
์์์ ์ ํํ ์ ์์ต๋๋ค.
predicate foo(string s) { s = "bar" }
์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ ์คํ
์ด๋ ์ฌ๋ฌ ์ฝ๋๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ๋ฅผ ํ ์คํธํ๊ฑฐ๋ ์ฌ๋ฌ ํ๋ก์ ํธ์์ ์ทจ์ฝ์ฑ์ ์ฐพ์ผ๋ ค๋ ๊ฒฝ์ฐ์ ์ ์ฉํ ์ ์์ต๋๋ค.
-
์ฟผ๋ฆฌ(
.ql
) ํ์ผ์ ์ฝ๋๋ค. -
CodeQL: ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ ์คํ์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ก ํด๋ฆญํ๊ณ ์ ํํฉ๋๋ค.
-
๋๋กญ๋ค์ด ๋ฉ๋ด์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํฉ๋๋ค.
์ฟผ๋ฆฌ ๊ธฐ๋ก ๋ณด๊ธฐ
ํ์ฌ ์ธ์ ์์ ์คํํ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ ค๋ฉด "์ฟผ๋ฆฌ ๊ธฐ๋ก" ๋ณด๊ธฐ๋ฅผ ์ฝ๋๋ค.
"์ฟผ๋ฆฌ ๊ธฐ๋ก" ๋ณด๊ธฐ์๋ ์ฟผ๋ฆฌ๊ฐ ์คํ๋ ๋ ์ง ๋ฐ ์๊ฐ, ์ฟผ๋ฆฌ ์ด๋ฆ, ์คํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ํฌํจํ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค.
-
ํ์๋๋ ์ ๋ณด๋ฅผ ์ฌ์ฉ์ ์ง์ ํ๋ ค๋ฉด ํญ๋ชฉ์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ก ํด๋ฆญํ๊ณ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ๋ฅผ ์ ํํฉ๋๋ค.
-
ํ์์ ๋ฐ๋ผ ์ธ์ด ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ด๋ณ๋ก ๋ณด๊ธฐ๋ฅผ ํํฐ๋งํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ธ์ด๋ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ์ฟผ๋ฆฌ ํํฐ๋ง์ ์ฐธ์กฐํ์ธ์.
-
ํญ๋ชฉ์ ํด๋ฆญํ์ฌ ํด๋น ๊ฒฐ๊ณผ๋ฅผ ํ์ํ๊ณ ๋ ๋ฒ ํด๋ฆญํ์ฌ ํธ์ง๊ธฐ์์ ์ฟผ๋ฆฌ ์์ฒด๋ฅผ ํ์ํ๊ฑฐ๋ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ฅผ ํด๋ฆญํ๊ณ ์ฟผ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ์ ํํฉ๋๋ค.
-
ํน์ ํญ๋ชฉ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ ์ ํํ ํ ์คํธ๋ฅผ ํ์ํ๋ ค๋ฉด ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ก ํด๋ฆญํ๊ณ ์ฟผ๋ฆฌ ํ ์คํธ ๋ณด๊ธฐ๋ฅผ ์ ํํฉ๋๋ค. ์ฟผ๋ฆฌ ํ์ผ์ด ๋ง์ง๋ง์ผ๋ก ์คํ๋ ์ดํ ์์ ๋์์ ์ ์์ผ๋ฏ๋ก ์ฟผ๋ฆฌ ๋ณด๊ธฐ์ ๋ค๋ฅผ ์ ์์ต๋๋ค.
-
๋ณด๊ธฐ์์ ์ฟผ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด ์ ๊ฑฐํ๋ ค๋ ๋ชจ๋ ์ฟผ๋ฆฌ๋ฅผ ์ ํํ ๋ค์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ฅผ ํด๋ฆญํ๊ณ ์ญ์ ๋ฅผ ์ ํํฉ๋๋ค.
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ํด์
-
"์ฟผ๋ฆฌ ๊ธฐ๋ก" ๋ณด๊ธฐ์์ ์ฟผ๋ฆฌ๋ฅผ ํด๋ฆญํ์ฌ ๊ฒฐ๊ณผ๋ฅผ "๊ฒฐ๊ณผ" ๋ณด๊ธฐ์ ํ์ํฉ๋๋ค.
์ฐธ๊ณ ํญ๋ชฉ
์ฟผ๋ฆฌ์ ๋ฐ๋ผ CSV, CodeQL CLI SARIF ์ถ๋ ฅ, DIL ํ์๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ณด๊ธฐ๋ฅผ ์ ํํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด DIL ํ์์ ๋ณด๋ ค๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ก ํด๋ฆญํ๊ณ DIL ๋ณด๊ธฐ๋ฅผ ์ ํํฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ์ถ๋ ฅ ๋ณด๊ธฐ๋ ์ฟผ๋ฆฌ์ ํ์ ๋ฐ ๋ฉํ๋ฐ์ดํฐ์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ์ฟผ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
-
"๊ฒฐ๊ณผ" ๋ณด๊ธฐ์ ๋๋กญ๋ค์ด ๋ฉ๋ด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๊ฒฐ๊ณผ์ ํ์ํ ์์(์: ์์์ด ์ง์ ๋ ๊ฒฝ๊ณ ๋ฉ์์ง ๋๋ ์์ ๊ฒฐ๊ณผ ํ ์ด๋ธ)์ ์ ํํฉ๋๋ค.
-
ํน์ ์ด์ ํญ๋ชฉ์ ๊ธฐ์ค์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ๋ ค๋ฉด ์ด ๋จธ๋ฆฌ๊ธ์ ํด๋ฆญํฉ๋๋ค.
๊ฒฐ๊ณผ๊ฐ ์์ค ์ฝ๋ ํฌ์ธํธ์ ์ฐ๊ฒฐ๋๋ ๊ฒฝ์ฐ ํด๋น ์์๋ฅผ ํด๋ฆญํ์ฌ ์๋ณธ์ ํ์ํ ์ ์์ต๋๋ค.
์์ค ์ฝ๋์์ ํ์ค ์ฝ๋ ํ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์์๋ฅผ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ก ํด๋ฆญํ๊ณ ์ ์๋ก ์ด๋ ๋๋ ์ฐธ์กฐ๋ก ์ด๋ ๋ช ๋ น์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ํ์ฑ ํ์ผ์์ CodeQL ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ฉฐ, ๋ช ์ด ์ ๋ ์์๋ ์ ์์ต๋๋ค. ์ด ์ฟผ๋ฆฌ๋ ๋ชจ๋ ํ์ผ์ ๋ํด ํ ๋ฒ ์คํ๋์ด์ผ ํ๋ฏ๋ก ๋์ผํ ํ์ผ์ ์ถ๊ฐ ์ฐธ์กฐ๋ ๋น ๋ฆ ๋๋ค.
์ฐธ๊ณ ํญ๋ชฉ
์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์๋ก ์ด๋ ๋ฐ ์ฐธ์กฐ๋ก ์ด๋๊ณผ ๊ฐ์ ์ฝ๋ ํ์ ๋ช
๋ น์ด ์๋ํ์ง ์์ ์ ์์ต๋๋ค. ์ฝ๋ ํ์์ ์ฌ์ฉํ๋ ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ถ์ ํ๊ณ CodeQL CLI์(๋ฅผ) ์ฌ์ฉํ์ฌ ์์ถ์ ํผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ codeql database cleanup <database>
๋ฅผ ์คํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ Visual Studio Code์ ๋ค์ ์ถ๊ฐํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ฆฌ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๋น๊ต
์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ฑฐ๋ ๋๋ฒ๊น ํ ๋ ๋ณ๊ฒฝ ๋ด์ฉ์ด ๊ฒฐ๊ณผ์ ๋ฏธ์น๋ ์ํฅ์ ํ์ธํ๋ ๊ฒ์ด ์ ์ฉํฉ๋๋ค. ๋ ๊ฐ์ ๊ฒฐ๊ณผ ์งํฉ์ ๋น๊ตํ์ฌ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ์ ํํ๊ฒ ํ์ธํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ๋ ค๋ฉด ๋ ์ฟผ๋ฆฌ๋ฅผ ๋์ผํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์คํํด์ผ ํฉ๋๋ค.
-
"์ฟผ๋ฆฌ ๊ธฐ๋ก" ๋ณด๊ธฐ์์ ์ฟผ๋ฆฌ๋ฅผ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ก ํด๋ฆญํ๊ณ ๊ฒฐ๊ณผ ๋น๊ต๋ฅผ ์ ํํฉ๋๋ค.
-
๋น ๋ฅธ ์ ํ ๋ฉ๋ด์๋ ๋น๊ตํ ์ ํจํ ๋ชจ๋ ์ฟผ๋ฆฌ๊ฐ ํ์๋ฉ๋๋ค. ์ฟผ๋ฆฌ๋ฅผ ์ ํํฉ๋๋ค.
-
"๋น๊ต" ๋ณด๊ธฐ๋ ๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ์ฐจ์ด๋ฅผ ๋ณด์ฌ ์ค๋๋ค.
๋ฌธ์ ํด๊ฒฐ
ํน์ ์ฟผ๋ฆฌ ์คํ์ ๋ก๊ทธ๋ฅผ ๋ณด๋ ค๋ฉด "์ฟผ๋ฆฌ ๊ธฐ๋ก" ๋ณด๊ธฐ์์ ์ฟผ๋ฆฌ๋ฅผ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ก ํด๋ฆญํ๊ณ ์ฟผ๋ฆฌ ๋ก๊ทธ ํ์๋ฅผ ์ ํํฉ๋๋ค. ๋ก๊ทธ ํ์ผ์ด ๋๋ฌด ์ปค์ ์ต์คํ ์ ์ด VS Code์์ ์ด๋ฆฌ์ง ์๋ ๊ฒฝ์ฐ ํ์ผ ํ์๊ธฐ์ ํ์ผ์ด ํ์๋๋ฏ๋ก ์ธ๋ถ ํ๋ก๊ทธ๋จ์ผ๋ก ์ด ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ ์ปดํ์ผ ๋ฐ ์คํ์ ๋ํ ์์ธํ ๋ด์ฉ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทธ๋ ์ด๋์ ๋ํ ์์ธํ ๋ด์ฉ์ CodeQL ์ฟผ๋ฆฌ ์๋ฒ ๋ก๊ทธ๋ฅผ ํ์ธํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ก๊ทธ ์ก์ธ์ค์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๊ธฐ๋ณธ์ ์ผ๋ก ์ต์คํ ์ ์ ๊ฐ ์์ ์์ญ ์ธ์ ํ์ ๋ก๊ทธ๋ฅผ ์ญ์ ํฉ๋๋ค. ์ด ๋์์ ์ฌ์ ์ํ๋ ค๋ฉด ์ฟผ๋ฆฌ ์๋ฒ ๋ก๊ทธ์ ๋ํ ์ฌ์ฉ์ ์ง์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ง์ ํ๋ฉด ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ค์ ์ฌ์ฉ์ ์ง์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
CodeQL: ์ฟผ๋ฆฌ ์๋ฒ ๋ค์ ์์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ์๋ฒ๋ฅผ ๋ค์ ์์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด CodeQL ์ธ์ ๊ธฐ๋ก์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์๋ฒ๊ฐ ๋ค์ ์์๋ฉ๋๋ค. ์ต์คํ ์ ์์ ์ฌ์ฉ ์ค์ธ ํ์ผ์ ์ธ๋ถ๋ก ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ์๋ฒ๋ฅผ ๋ค์ ์์ํด์ผ ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์๋ฅผ ๋ค์ด VS Code์ ์ด๋ ค ์๋ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค์ ์์ฑํฉ๋๋ค. ๋ก๊ทธ์ ๋ฌธ์ ์ธ์๋ ์ฝ๋ ๊ฐ์กฐ ํ์ ์ค๋ฅ, ์๋ชป๋ ๊ฒฐ๊ณผ ํฉ๊ณ ๋๋ ์ฟผ๋ฆฌ๊ฐ ์คํ ์ค์ธ ์ค๋ณต ์๋ฆผ์ด ํ์๋ ์ ์์ต๋๋ค.
๋ค์ ๋จ๊ณ
ํ์์ ๋ฐ๋ผ ์ต์คํ ์ ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ง์ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฌ์ฉ์ ์ง์ ์ฟผ๋ฆฌ ๋ง๋ค๊ธฐ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๋ง์ CodeQL๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋๊ท๋ชจ๋ก ๋ถ์์ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์ค ๋ฆฌํฌ์งํ ๋ฆฌ ๋ณํ ๋ถ์์ ์ฌ์ฉํ์ฌ ๋๊ท๋ชจ CodeQL ์ฟผ๋ฆฌ ์คํ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.