์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ ์ ๋ณด
ํ๋ก๊ทธ๋จ์ AST(์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ)๋ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ฌธ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ ๋๋ค. AST์ ๋ ธ๋๋ ๋ฌธ ๋ฐ ์๊ณผ ๊ฐ์ ์์๋ฅผ ๋ํ๋ ๋๋ค. CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ํตํด ์ด๋ฌํ ํ๋ก๊ทธ๋จ ์์์ ํด๋น ์์ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ธ์ฝ๋ฉํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๋ํ ์์ธํ ๋ด์ฉ์ CodeQL ์ค๋ช ์์์ "CodeQL ์ฉ์ด์ง"์ ์ฐธ์กฐํ์ธ์.
Visual Studio Code์ฉ CodeQL์๋ AST ๋ทฐ์ด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๋ทฐ์ด๋ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ์ผ์ AST๋ฅผ ํ์ํ ์ ์๋ ๊ทธ๋ํ ์๊ฐํ ๋ณด๊ธฐ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์๋ณธ ํ์ผ์ ์ด๋ ๋ถ๋ถ์ ํด๋นํ๋ CodeQL ํด๋์ค๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์๋ณธ ํ์ผ์ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ ๋ณด๊ธฐ
์ฐธ๊ณ ํญ๋ชฉ
์์
์์ญ์ ์ ์ ํ ์ฟผ๋ฆฌ(์ผ๋ฐ์ ์ผ๋ก printAST.ql
)๊ฐ ์๋ ๊ฒฝ์ฐ ๋ค์ ๋จ๊ณ์์ CodeQL: AST ๋ณด๊ธฐ ๋ช
๋ น์ด ์๋ํ์ง ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด main
๋ถ๊ธฐ์์ ๋ฆฌํฌ์งํ ๋ฆฌ์ github/codeql
๋ณต์ฌ๋ณธ์ ์
๋ฐ์ดํธํ๋ฉด ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฟผ๋ฆฌ ์บ์๊ฐ ํด์ ๋ ์ ์์ผ๋ฏ๋ก ๋ค์ ์ฟผ๋ฆฌ ์คํ ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค.
-
์ต์คํ ์ ์์ "๋ฐ์ดํฐ๋ฒ ์ด์ค" ๋ณด๊ธฐ๋ฅผ ์ด๊ณ ํ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋จ์ถ๋ก ํด๋ฆญํฉ๋๋ค. ์์ ์์ญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ณธ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
ํ์ผ ํ์๊ธฐ์์ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ณธ ํ์ผ๋ก ์ด๋ํฉ๋๋ค.
-
VS Code Command Palette์์ CodeQL: AST ๋ณด๊ธฐ๋ฅผ ์คํํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํ์ฑ ํ์ผ์์ CodeQL ์ฟผ๋ฆฌ(์ผ๋ฐ์ ์ผ๋ก
printAST.ql
)๊ฐ ์คํ๋๋ฉฐ ๋ช ์ด ์ ๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ์ฟผ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด AST ๋ทฐ์ด์ ์๋ณธ ํ์ผ์ ๊ตฌ์กฐ๊ฐ ํ์๋ฉ๋๋ค. -
์๋ณธ ํ์ผ์ ์ค์ฒฉ๋ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ ค๋ฉด ํ์ดํ๋ฅผ ํด๋ฆญํ๊ณ ๋ ธ๋๋ฅผ ํ์ฅํฉ๋๋ค.
AST ๋ทฐ์ด์์ ๋ ธ๋๋ฅผ ํด๋ฆญํ์ฌ ์์ค ์ฝ๋์์ ํด๋น ๋ ธ๋๋ก ์ด๋ํ ์ ์์ต๋๋ค. ๋ฐ๋๋ก ์์ค ์ฝ๋์ ์น์ ์ ํด๋ฆญํ๋ฉด AST ๋ทฐ์ด์ ํด๋น ๋ ธ๋๊ฐ ํ์๋ฉ๋๋ค.