์ฐธ๊ณ ํญ๋ชฉ
CodeQL ๋ชจ๋ธ ํฉ์ ํ์ฌ ๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ํ์ด๋ฉฐ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ๋ชจ๋ธ ํฉ์ C/C++, C#, Java/Kotlin, Python, Ruby ๋ถ์์ ์ํด ์ง์๋ฉ๋๋ค.
Visual Studio Code์ ๋ํ CodeQL ํ์ฅ์ CodeQL ๋ชจ๋ธ ํธ์ง๊ธฐ์์ C#, Java/Kotlin, Python, Ruby์ ๋ํ ๋ชจ๋ธ๋ง ์ข ์์ฑ์ ์ง์ํฉ๋๋ค.
CodeQL ๋ชจ๋ธ ํธ์ง๊ธฐ ์ ๋ณด
CodeQL ๋ชจ๋ธ ํฉ์ ์ฌ์ฉํ๋ฉด CodeQL code scanning ๋ถ์์ ํ์ฅํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋์ง ์๋ ์ฝ๋๋ฒ ์ด์ค์์ ์ฌ์ฉ๋๋ ์ฌ์ฉ์ ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์ธ์ํ ์ ์์ต๋๋ค. CodeQL ๋ชจ๋ธ ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ํ ๋ชจ๋ธ ํฉ์ ๋ง๋ค ์ ์์ต๋๋ค. ๋ชจ๋ธ ํธ์ง๊ธฐ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ๋ถ ์์กด ๊ด๊ณ์ ๋ํ ํธ์ถ์ ๋ชจ๋ธ๋งํ๊ฑฐ๋ ์ธ๋ถ ์์กด ๊ด๊ณ์ ๋ชจ๋ ๊ณต์ฉ ํญ๋ชฉ ๋ฐ ์ข ๋ฃ ์ง์ ์ ์์ ํ ๋ชจ๋ธ๋งํ๋ ๋ฐฉ๋ฒ์ ์๋ดํฉ๋๋ค.
๋ชจ๋ธ ํฉ์ผ๋ก code scanning ๋ถ์์ ์ฌ์ฉ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ธฐ๋ณธ ์ค์ ๊ตฌ์ฑ ํธ์ง ๋ฐ ์ฝ๋ ๊ฒ์์ ์ํ ๊ณ ๊ธ ์ค์ ์ฌ์ฉ์ ์ง์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๋ชจ๋ธ ํธ์ง๊ธฐ๋ฅผ ์ด๋ฉด ํ์ฌ ์ ํํ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ถ์ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ธ๋ถ API ๋ฐ ๋ชจ๋ ๊ณต์ฉ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ์์น๋ฅผ ์๋ณํฉ๋๋ค. ์ธ๋ถ(๋๋ ํ์ฌ) API๋ ์ ํํ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ์ง ์๋ API์ ๋๋ค.
๋ชจ๋ธ ํธ์ง๊ธฐ์๋ ๋ค์์ ๋ ๊ฐ์ง ๋ชจ๋๊ฐ ์์ต๋๋ค.
-
์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋(๊ธฐ๋ณธ ๋ณด๊ธฐ): ์ ํํ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉํ๋ ๊ฐ ์ธ๋ถ ํ๋ ์์ํฌ๋ฅผ ํธ์ง๊ธฐ์ ๋์ดํฉ๋๋ค. ํ๋ ์์ํฌ๋ฅผ ํ์ฅํ๋ฉด ๊ฐ ํธ์ถ์ ํตํด ๋ฐ์ดํฐ ํ๋ฆ์ ๋ชจ๋ธ๋งํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ต์ ๊ณผ ํจ๊ป ์ธ๋ถ API์์ ๋ชจ๋ ํธ์ถ ๋ชฉ๋ก์ด ํ์๋ฉ๋๋ค. ์ด ๋ชจ๋๋ ํน์ ์ฝ๋๋ฒ ์ด์ค์ ๋ํ CodeQL ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ํ๋ ๋ฐ ๊ฐ์ฅ ์ ์ฉํฉ๋๋ค.
-
์ข ์์ฑ ๋ชจ๋: ์ ํํ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ณต๊ฐ์ ์ผ๋ก ์ก์ธ์คํ ์ ์๋ ๋ชจ๋ API๋ฅผ ํธ์ง๊ธฐ์์ ์๋ณํฉ๋๋ค. ์ด ๋ณด๊ธฐ๋ ์ฝ๋๋ฒ ์ด์ค์์ ์ฌ์ฉํ ์ ์๋ ๊ฐ ๊ณต์ฉ API๋ฅผ ๋ชจ๋ธ๋งํ๋ ๋จ๊ณ๋ฅผ ์๋ดํฉ๋๋ค. ์ ์ฒด API ๋ชจ๋ธ๋ง์ ์๋ฃํ๋ฉด ๋ชจ๋ธ์ ์ ์ฅํ๊ณ ์ฌ์ฉํ์ฌ ์ข ์์ฑ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฝ๋๋ฒ ์ด์ค์ ๋ํ CodeQL ๋ถ์์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์์ ๋๋จธ์ง ๋ถ๋ถ์์๋ CodeQL ๋ชจ๋ธ ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ข ์์ฑ์ ๋ชจ๋ธ๋งํ๋ ์ค์ง์ ์ธ ๋ด์ฉ์ ๋ค๋ฃน๋๋ค. ๊ธฐ์ ์ ๋ณด๋ CodeQL ์ธ์ด ์ค๋ช ์์์ Java ๋ฐ Kotlin์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋ธ ์ฌ์ฉ์ ์ง์ , Python์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋ธ ์ฌ์ฉ์ ์ง์ , Ruby์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋ธ ์ฌ์ฉ์ ์ง์ , C#์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋ธ ์ฌ์ฉ์ ์ง์ ์ ์ฐธ์กฐํ์ธ์.
CodeQL ๋ชจ๋ธ ํธ์ง๊ธฐ ํ์
์ฐธ๊ณ ํญ๋ชฉ
์ด ๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด Visual Studio Code์ฉ ์ต์ ๋ฒ์ ์ CodeQL ํ์ฅ์ ์ค์นํฉ๋๋ค.
-
VS Code์์ CodeQL ์์ ์์ญ์ ์ฝ๋๋ค. ์๋ฅผ ๋ค๋ฉด
vscode-codeql-starter
์์ ์์ญ์ ์ฝ๋๋ค. ์์ ์์ ์์ญ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐmain
์ql
ํ์ ๋ชจ๋์ ์ ๋ฐ์ดํธํ์ฌ ๋ชจ๋ธ ํธ์ง๊ธฐ์ฉ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฟผ๋ฆฌ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค. -
Visual Studio Code์์ ์ผ์ชฝ ์ฌ์ด๋๋ฐ์ QL์ ํด๋ฆญํ์ฌ GitHub Copilot ์ต์คํ ์ ์ ํ์ํฉ๋๋ค.
-
"๋ฐ์ดํฐ๋ฒ ์ด์ค" ๋ณด๊ธฐ์์ ๋ชจ๋ธ๋งํ๋ ค๋ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํฉ๋๋ค.
-
CodeQL "๋ฉ์๋ ๋ชจ๋ธ๋ง" ๋ณด๊ธฐ์์ ๋ชจ๋ธ๋ง ์์์ ํด๋ฆญํ์ฌ ๋ชจ๋ธ ํธ์ง๊ธฐ๋ฅผ ํ์ํฉ๋๋ค. ๋๋ VS Code Command Palette์(๋ฅผ) ์ฌ์ฉํ์ฌ CodeQL: ๋ชจ๋ธ ํธ์ง๊ธฐ ์ด๊ธฐ(๋ฒ ํ) ๋ช ๋ น์ ์คํํฉ๋๋ค.
-
CodeQL ๋ชจ๋ธ ํธ์ง๊ธฐ๋ ์ฝ๋์์ API๋ฅผ ์๋ณํ๊ธฐ ์ํด ์ผ๋ จ์ ์๊ฒฉ ๋ถ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉฐ ํธ์ง๊ธฐ๋ ์ ํญ์ ํ์๋ฉ๋๋ค.
-
์๊ฒฉ ๋ถ์ ์ฟผ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด ์๋ณ๋ API๊ฐ ํธ์ง๊ธฐ์ ํ์๋ฉ๋๋ค.
ํ
ํธ์ถ ๋๋ ๋ฉ์๋๋ฅผ ๋ชจ๋ธ๋งํ๋ ๋์ ๋ ๋ง์ ๊ณต๊ฐ์ ํ๋ณดํ๊ธฐ ์ํด CodeQL โ๋ฉ์๋ ๋ชจ๋ธ๋งโ ๋ณด๊ธฐ๋ฅผ ๊ธฐ๋ณธ ์ฌ์ด๋๋ฐ์์ ๋ณด์กฐ ์ฌ์ด๋๋ฐ๋ก ์ด๋ํ ์ ์์ต๋๋ค. ๋ณด๊ธฐ๋ฅผ ๋ซ์ ๊ฒฝ์ฐ VS Code์ "๋ณด๊ธฐ" ๋ฉ๋ด์์ ๋ค์ ์ด์ด ๋ณด๊ธฐ ์ด๊ธฐ... ๋ฅผ ํด๋ฆญํ ์ ์์ต๋๋ค.
์ฝ๋๋ฒ ์ด์ค๊ฐ ์ธ๋ถ API์ ๋ํด ํธ์ถํ๋ ๋ชจ๋ธ๋ง
์ด ๋ฐฉ๋ฒ์ ์ผ๋ฐ์ ์ผ๋ก CodeQL ๊ฒฐ๊ณผ์ ์ ๋ฐ๋๋ฅผ ํฅ์ํ๋ ค๋ ํน์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ณผ ๋ ์ฌ์ฉํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฝ๋๋ฒ ์ด์ค๊ฐ CodeQL์์ ์ง์ํ์ง ์๋ ํ๋ ์์ํฌ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ํ๋ ์์ํฌ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ค ์ฝ๋๊ฐ ๋ถ์์ ํฌํจ๋์ง ์์ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
์ด ์น์ ์์๋ "sofa-jraft"๋ผ๋ ์คํ ์์ค Java ํ๋ก์ ํธ๋ฅผ ์๋ก ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ์ปดํ์ผ๋ ์ธ์ด๋ก ์์ฑ๋ ์ธ๋ถ API์ ๋ํ ํธ์ถ์ ๋ชจ๋ธ๋งํ๋ ํ๊ฒฝ๋ ๋น์ทํฉ๋๋ค.
-
Visual Studio Code์์ CodeQL ์ ์ฉ ๋ฒ์๋ฅผ ๊ฐ์ ํ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํฉ๋๋ค.
-
CodeQL ๋ชจ๋ธ ํธ์ง๊ธฐ๋ฅผ ํ์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํธ์ง๊ธฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋์์ ์คํ๋๋ฏ๋ก ์ ํํ ์ฝ๋๋ฒ ์ด์ค์์ ์ฌ์ฉํ๋ ์ธ๋ถ API ๋ชฉ๋ก์ด ํ์๋ฉ๋๋ค.
-
์ธ๋ถ API๋ฅผ ํ์ฅํ๊ณ ์ฝ๋๋ฒ ์ด์ค์์ ์ธ๋ถ ์์กด ๊ด๊ณ๋ก์ ํธ์ถ ๋ชฉ๋ก์ ๋ณด๋ ค๋ฉด ํด๋ฆญํฉ๋๋ค.
-
API ํธ์ถ ๋๋ ๋ฉ์๋์ ์ฐ๊ฒฐ๋ ๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ์ฝ๋๋ฒ ์ด์ค์์ ์ฌ์ฉ๋๋ ์์น๋ฅผ ํ์ํฉ๋๋ค.
-
์ฝ๋๋ฒ ์ด์ค์์ API๋ก์ ์ฒซ ๋ฒ์งธ ํธ์ถ์ด ํฌํจ๋ ํ์ผ์ด ์ด๋ฆฌ๊ณ CodeQL "๋ฉ์๋ ์ฌ์ฉ๋" ๋ณด๊ธฐ๊ฐ VS Code์ ํ์๋ฉ๋๋ค(์ฌ๊ธฐ์ "๋ฌธ์ " ๋ฐ "ํฐ๋ฏธ๋" ๋ณด๊ธฐ๋ ์ผ๋ฐ์ ์ผ๋ก ํ์๋จ). CodeQL "๋ฉ์๋ ์ฌ์ฉ๋" ๋ณด๊ธฐ๋ ์ฝ๋์์ API๋ก์ ๋ชจ๋ ํธ์ถ ๋ชฉ๋ก์ ๋ฉ์๋๋ณ๋ก ๊ทธ๋ฃนํํฉ๋๋ค. ๊ฐ ์ฌ์ฉ์ ํตํด ํด๋ฆญํ์ฌ ๋ฉ์๋ ์ฌ์ฉ์ ๋ชจ๋ธ๋งํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
-
๋ฉ์๋ ์ฌ์ฉ์ ๋ชจ๋ธ๋งํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ชจ๋ธ ์ ํ์ ์ ํํ ์ ์์ต๋๋ค. CodeQL ์ต์คํ ์ ์ CodeQL "๋ฉ์๋ ๋ชจ๋ธ๋ง" ๋ณด๊ธฐ์์ "๋ชจ๋ธ ์ ํ" ์๋์ ๋๋กญ๋ค์ด์ ํด๋ฆญํฉ๋๋ค. ์ด ๋ณ๊ฒฝ ๋ด์ฉ์ ๊ธฐ๋ณธ ๋ชจ๋ธ ํธ์ง๊ธฐ์์ ์๋์ผ๋ก ๋ฐ์๋ฉ๋๋ค.
-
ํด๋น ํ์ ๋๋จธ์ง ํ๋๋ ์ ํํ ๋ชจ๋ธ ์ ํ์ ์ฌ์ฉํ ์ ์๋ ์ต์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
- "์๋ณธ": ๋ชจ๋ธ๋งํ "์ถ๋ ฅ" ์์๋ฅผ ์ ํํฉ๋๋ค.
- "์ฑํฌ": ๋ชจ๋ธ๋งํ "์ ๋ ฅ" ์์๋ฅผ ์ ํํฉ๋๋ค.
- "ํ๋ฆ ์์ฝ": ๋ชจ๋ธ๋งํ "์ ๋ ฅ" ๋ฐ "์ถ๋ ฅ" ์์๋ฅผ ์ ํํฉ๋๋ค.
-
๋ชจ๋ธ์ ๋ํ ๋ฐ์ดํฐ ํ๋ฆ์ "์ข ๋ฅ"๋ฅผ ์ ์ํฉ๋๋ค.
-
๋ชจ๋ธ๋ง์ ๋ง์ณค์ผ๋ฉด ๊ธฐ๋ณธ ๋ชจ๋ธ ํธ์ง๊ธฐ๋ฅผ ํ์ํ๊ณ ๋ชจ๋ ์ ์ฅ ๋๋ ์ ์ฅ์ ํด๋ฆญํฉ๋๋ค(ํ์ฅ๋ ๊ฐ ๋ฉ์๋ ๋ชฉ๋ก์ ์ค๋ฅธ์ชฝ ์๋์ ํ์๋จ). ํธ์ง๊ธฐ์์ ๋ชจ๋ธ๋ง๋ ๋ฉ์๋์ ๋ฐฑ๋ถ์จ์ด ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
๋ชจ๋ธ์ .github/codeql/extensions/CODEQL-MODEl-PACK
์์
์์ญ์ ์ ์ฅ๋๋ฉฐ, ์ฌ๊ธฐ์ CODEQL-MODEL-PACK
์ ์ ํํ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ฆ์
๋๋ค. ์ฆ, CodeQL์์ ๋ถ์ํ ๋ฆฌํฌ์งํ ๋ฆฌ, ํ์ดํ, ์ธ์ด์ ์ด๋ฆ์
๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ํฉ ๋ง๋ค๊ธฐ ๋ฐ ์์
์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๋ชจ๋ธ์ ๊ฐ ์ธ๋ถ API์ ๋ํด ํ๋์ฉ ์ผ๋ จ์ YAML ๋ฐ์ดํฐ ํ์ฅ ํ๋ก๊ทธ๋จ ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค. ์์:
.github/codeql/extensions/sofa-jraft-java # the model pack directory
models
jmh-core.model.yml # models calls to jmh-core@1.20
rocksdbjni.model.yml # models calls to rocksdbjni@7.7.3
์ฝ๋๋ฒ ์ด์ค์ ๊ณต์ฉ API ๋ชจ๋ธ๋ง
์ผ๋ฐ์ ์ผ๋ก ์กฐ์ง์์ ๋ ์ด์์ ์ฝ๋๋ฒ ์ด์ค์ ์ฌ์ฉํ๋ ํ๋ ์์ํฌ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ชจ๋ธ๋งํ๋ ค๋ ๊ฒฝ์ฐ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ชจ๋ธ ๋ง๋ค๊ธฐ ๋ฐ ํ ์คํธ๋ฅผ ๋ง์ณค์ผ๋ฉด ์ ์ฒด ์กฐ์ง์์ ์ฌ์ฉํ GitHub Container registry์ CodeQL ๋ชจ๋ธ ํฉ์ ๊ฒ์ํ ์ ์์ต๋๋ค.
์ด ์น์ ์์๋ "sofa-jraft"๋ผ๋ ์คํ ์์ค Java ํ๋ก์ ํธ๋ฅผ ์๋ก ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ์ปดํ์ผ๋ ์ธ์ด๋ก ์์ฑ๋ ์ธ๋ถ API์ ๋ํ ํธ์ถ์ ๋ชจ๋ธ๋งํ๋ ํ๊ฒฝ๋ ๋น์ทํฉ๋๋ค.
-
๋ชจ๋ธ๋งํ๋ ค๋ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํฉ๋๋ค.
-
CodeQL ๋ชจ๋ธ ํธ์ง๊ธฐ๋ฅผ ํ์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํธ์ง๊ธฐ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋์์ ์คํ๋ฉ๋๋ค. ์ข ์์ฑ ๋ชจ๋๋ฅผ ํ์ํ๋ ค๋ฉด ์ข ์์ฑ์ผ๋ก ๋ชจ๋ธ๋ง์ ํด๋ฆญํฉ๋๋ค. ํ๋ ์์ํฌ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ณต์ฉ API๋ฅผ ํ์ํ๋๋ก ํ๋ฉด์ด ๋ณ๊ฒฝ๋ฉ๋๋ค.
-
ํจํค์ง๋ฅผ ํ์ฅํ๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ์๋ ๋ชฉ๋ก์ ๋ณด๋ ค๋ฉด ํด๋ฆญํฉ๋๋ค.
-
๋ฉ์๋์ ์ฐ๊ฒฐ๋ ๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ํด๋น ์ ์๋ฅผ ํ์ํฉ๋๋ค.
-
๋ฉ์๋๋ฅผ ๋ชจ๋ธ๋งํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ ๊ฒฝ์ฐ "๋ชจ๋ธ ํ์"์ ์ ์ํฉ๋๋ค.
-
ํด๋น ํ์ ๋๋จธ์ง ํ๋๋ ์ ํํ ๋ชจ๋ธ ์ ํ์ ์ฌ์ฉํ ์ ์๋ ์ต์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
- "์๋ณธ": ๋ชจ๋ธ๋งํ "์ถ๋ ฅ" ์์๋ฅผ ์ ํํฉ๋๋ค.
- "์ฑํฌ": ๋ชจ๋ธ๋งํ "์ ๋ ฅ" ์์๋ฅผ ์ ํํฉ๋๋ค.
- "ํ๋ฆ ์์ฝ": ๋ชจ๋ธ๋งํ "์ ๋ ฅ" ๋ฐ "์ถ๋ ฅ" ์์๋ฅผ ์ ํํฉ๋๋ค.
-
๋ชจ๋ธ์ ๋ํ ๋ฐ์ดํฐ ํ๋ฆ์ "์ข ๋ฅ"๋ฅผ ์ ์ํฉ๋๋ค.
-
๋ชจ๋ธ๋ง์ ๋ง์ณค์ผ๋ฉด ๋ชจ๋ ์ ์ฅ ๋๋ ์ ์ฅ์ ํด๋ฆญํฉ๋๋ค(ํ์ฅ๋ ๊ฐ ํธ์ถ ๋ชฉ๋ก์ ์ค๋ฅธ์ชฝ ์๋์ ํ์๋จ). ํธ์ง๊ธฐ์์ ๋ชจ๋ธ๋ง๋ ํธ์ถ์ ๋ฐฑ๋ถ์จ์ด ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
๋ชจ๋ธ์ .github/codeql/extensions/CODEQL-MODEL-PACK
์์
์์ญ์ ์ ์ฅ๋๋ฉฐ, ์ฌ๊ธฐ์ CODEQL-MODEL-PACK
์ ์ ํํ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ฆ์
๋๋ค. ์ฆ, CodeQL์์ ๋ถ์ํ ๋ฆฌํฌ์งํ ๋ฆฌ, ํ์ดํ, ์ธ์ด์ ์ด๋ฆ์
๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ํฉ ๋ง๋ค๊ธฐ ๋ฐ ์์
์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๋ชจ๋ธ์ ๊ฐ ๊ณต์ฉ ๋ฉ์๋์ ๋ํด ํ๋์ฉ ์ผ๋ จ์ YAML ๋ฐ์ดํฐ ํ์ฅ ํ๋ก๊ทธ๋จ ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค. ์์:
.github/codeql/extensions/sofa-jraft-java # the model pack directory
models
com.alipay.sofa.jraft.option.model.yml # models public methods in package
com.alipay.sofa.jraft.rhea.options.model.yml
ํธ์ง๊ธฐ์์ ๋ชจ๋ธ๋งํ๋ ๊ฐ ํจํค์ง์ ๋ํด ๋ณ๋์ ๋ชจ๋ธ ํ์ผ์ ๋ง๋ญ๋๋ค.
์ฌ๋ฌ ์ ์ฌ์ ์ธ ํ๋ฆ์ ์ฌ์ฉํ์ฌ ๋ฉ์๋ ๋ชจ๋ธ๋ง
์ผ๋ถ ๋ฉ์๋๋ ๋ ์ด์์ ๋ฐ์ดํฐ ํ๋ฆ์ ์ง์ํฉ๋๋ค. ๋ฉ์๋์ ๋ํ ๋ชจ๋ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ชจ๋ธ๋งํ๋ ๊ฒ์ด ์ค์ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ฉ์๋ ์ฌ์ฉ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค. ๋จผ์ ๋ฉ์๋์ ๋ํด ํ๋์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ชจ๋ธ๋งํ ๋ค์ ๋ฉ์๋ ํ์ + ๋ฒํผ์ ์ฌ์ฉํ์ฌ ๋ ๋ฒ์งธ ๋ฐ์ดํฐ ํ๋ฆ ๋ชจ๋ธ์ ์ง์ ํฉ๋๋ค.
VS Code์ CodeQL ๋ชจ๋ธ ํฉ ํ ์คํธ
"์คํ ์ค์ธ ์ฟผ๋ฆฌ: ์ต์คํ ์ ํฉ ์ฌ์ฉ" ์ค์ ์ ์ฌ์ฉํ์ฌ VS Code์์ ๋ง๋ CodeQL ๋ชจ๋ธ ํฉ์ ํ ์คํธํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ค์ ์ฌ์ฉ์ ์ง์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์. ์ด ๋ฉ์๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณํ ๋ถ์ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ชจ๋์์ ์๋ํฉ๋๋ค.
-
์์ ์์ญ์
.github/codeql/extensions
๋๋ ํฐ๋ฆฌ ๋ด์ ์ ์ฅ๋ ๋ชจ๋ธ ํฉ์ ์ฌ์ฉํ์ฌ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ค๋ฉด"codeQL.runningQueries.useExtensionPacks": "all",
๋กsettings.json
ํ์ผ์ ์ ๋ฐ์ดํธํฉ๋๋ค. -
๋ชจ๋ธ ํฉ์ ์ฌ์ฉํ์ง ์๊ณ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ค๋ฉด
"codeQL.runningQueries.useExtensionPacks": "none",
์ ์ฌ์ฉํ์ฌsettings.json
ํ์ผ์ ์ ๋ฐ์ดํธํฉ๋๋ค.
๋ชจ๋ธ์ด ์ ์๋ํ๋ ๊ฒฝ์ฐ ๋ ์คํ์ ๊ฒฐ๊ณผ์ ์ฐจ์ด๊ฐ ํ์๋ฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ฐจ์ด๊ฐ ์๋ ๊ฒฝ์ฐ ์๋ ค์ง ๋ฒ๊ทธ๋ฅผ ๋์ ํ์ฌ ๋ชจ๋ธ์ด ์์๋๋ก ์๋ํ๋์ง ํ์ธํด์ผ ํ ์ ์์ต๋๋ค.