Skip to main content

CodeQL ์ฟผ๋ฆฌ ์‹คํ–‰

CodeQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  Visual Studio Code์—์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CodeQL ์ฟผ๋ฆฌ ์‹คํ–‰ ์ •๋ณด

github/codeql ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—๋Š” ๋งŽ์€ ์ˆ˜์˜ ์˜ˆ์ œ ์ฟผ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. "์ฟผ๋ฆฌ" ๋ณด๊ธฐ๋ฅผ ํ†ตํ•ด ์ž‘์—… ์˜์—ญ์˜ ๊ธฐ์กด ์ฟผ๋ฆฌ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ์กฐ๊ฑด

์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ถ„์„ํ•˜๋ ค๋ฉด ์ฝ”๋“œ์—์„œ ์ถ”์ถœ๋œ CodeQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์ต์Šคํ…์…˜์—์„œ ์ž‘์—…ํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ(ZIP ๋ณด๊ด€ ํŒŒ์ผ ๋˜๋Š” ๋ณด๊ด€ํ•˜์ง€ ์•Š์€ ํด๋”์—์„œ), ๊ณต์šฉ URL ๋˜๋Š” GitHub.com์˜ ํ”„๋กœ์ ํŠธ URL์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹จ์ผ ์ฟผ๋ฆฌ ์‹คํ–‰

  1. ์‚ฌ์ด๋“œ๋ฐ”์—์„œ "์ฟผ๋ฆฌ" ๋ณด๊ธฐ๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

  2. ์„ ํƒํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์›ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋งˆ์šฐ์Šค๋กœ ๊ฐ€๋ฆฌํ‚จ ๋‹ค์Œ ๋กœ์ปฌ ์ฟผ๋ฆฌ ์‹คํ–‰ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

"๋กœ์ปฌ ์ฟผ๋ฆฌ ์‹คํ–‰" ๋ฒ„ํŠผ์ด ์ง„ํ•œ ์ฃผํ™ฉ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ "์ฟผ๋ฆฌ" ๋ณด๊ธฐ์˜ ์Šคํฌ๋ฆฐ์ƒท

CodeQL ์ต์Šคํ…์…˜์€ ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ์— ์ง„ํ–‰๋ฅ ์„ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ ์ค€๋น„๋˜๋ฉด CodeQL "์ฟผ๋ฆฌ ๊ฒฐ๊ณผ" ๋ณด๊ธฐ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ์— ์•Œ๋ฆผ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์•Œ๋ฆผ์—๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์™ธ์—๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋ชจ๋“  ์ฟผ๋ฆฌ ์‹คํ–‰

๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๋ชจ๋“  ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์ด๋“œ๋ฐ”์—์„œ "์ฟผ๋ฆฌ" ๋ณด๊ธฐ๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

  2. ์›ํ•˜๋Š” ์ฟผ๋ฆฌ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งˆ์šฐ์Šค๋กœ ๊ฐ€๋ฆฌํ‚จ ๋‹ค์Œ ๋กœ์ปฌ ์ฟผ๋ฆฌ ์‹คํ–‰ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ์„ ํƒ ์‹คํ–‰

๋‹จ์ผ ๋ช…๋ น์œผ๋กœ ์—ฌ๋Ÿฌ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. ์ฟผ๋ฆฌ๊ฐ€ ํฌํ•จ๋œ ์—ฌ๋Ÿฌ ํŒŒ์ผ ๋˜๋Š” ํด๋”๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋ฅผ ํด๋ฆญํ•˜๊ณ  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" }

์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฟผ๋ฆฌ ์‹คํ–‰

์ด๋Š” ์—ฌ๋Ÿฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ฟผ๋ฆฌ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ์ทจ์•ฝ์„ฑ์„ ์ฐพ์œผ๋ ค๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ฟผ๋ฆฌ(.ql) ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค.

  2. CodeQL: ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฟผ๋ฆฌ ์‹คํ–‰์„ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋กœ ํด๋ฆญํ•˜๊ณ  ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ๊ธฐ๋ก ๋ณด๊ธฐ

ํ˜„์žฌ ์„ธ์…˜์—์„œ ์‹คํ–‰ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ ค๋ฉด "์ฟผ๋ฆฌ ๊ธฐ๋ก" ๋ณด๊ธฐ๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

"์ฟผ๋ฆฌ ๊ธฐ๋ก" ๋ณด๊ธฐ์—๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋œ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„, ์ฟผ๋ฆฌ ์ด๋ฆ„, ์‹คํ–‰๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ ํฌํ•จํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ํ‘œ์‹œ๋˜๋Š” ์ •๋ณด๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋ ค๋ฉด ํ•ญ๋ชฉ์„ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋กœ ํด๋ฆญํ•˜๊ณ  ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  • ํ•„์š”์— ๋”ฐ๋ผ ์–ธ์–ด ์„ ํƒ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ธ์–ด๋ณ„๋กœ ๋ณด๊ธฐ๋ฅผ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์–ธ์–ด๋ณ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ์ฟผ๋ฆฌ ํ•„ํ„ฐ๋ง์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  • ํ•ญ๋ชฉ์„ ํด๋ฆญํ•˜์—ฌ ํ•ด๋‹น ๊ฒฐ๊ณผ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ๋‘ ๋ฒˆ ํด๋ฆญํ•˜์—ฌ ํŽธ์ง‘๊ธฐ์—์„œ ์ฟผ๋ฆฌ ์ž์ฒด๋ฅผ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋ฅผ ํด๋ฆญํ•˜๊ณ  ์ฟผ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  • ํŠน์ • ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•œ ์ •ํ™•ํ•œ ํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•˜๋ ค๋ฉด ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋กœ ํด๋ฆญํ•˜๊ณ  ์ฟผ๋ฆฌ ํ…์ŠคํŠธ ๋ณด๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ํŒŒ์ผ์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹คํ–‰๋œ ์ดํ›„ ์ˆ˜์ •๋˜์—ˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฟผ๋ฆฌ ๋ณด๊ธฐ์™€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ณด๊ธฐ์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ์ œ๊ฑฐํ•˜๋ ค๋Š” ๋ชจ๋“  ์ฟผ๋ฆฌ๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋ฅผ ํด๋ฆญํ•˜๊ณ  ์‚ญ์ œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ํ•ด์„

  1. "์ฟผ๋ฆฌ ๊ธฐ๋ก" ๋ณด๊ธฐ์—์„œ ์ฟผ๋ฆฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ "๊ฒฐ๊ณผ" ๋ณด๊ธฐ์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    ์ฐธ๊ณ  ํ•ญ๋ชฉ

    ์ฟผ๋ฆฌ์— ๋”ฐ๋ผ CSV, CodeQL CLI SARIF ์ถœ๋ ฅ, DIL ํ˜•์‹๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ณด๊ธฐ๋ฅผ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด DIL ํ˜•์‹์„ ๋ณด๋ ค๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋กœ ํด๋ฆญํ•˜๊ณ  DIL ๋ณด๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถœ๋ ฅ ๋ณด๊ธฐ๋Š” ์ฟผ๋ฆฌ์˜ ํ˜•์‹ ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ์ฟผ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  2. "๊ฒฐ๊ณผ" ๋ณด๊ธฐ์˜ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œ์‹œํ•  ๊ฒฐ๊ณผ์™€ ํ‘œ์‹œํ•  ์–‘์‹(์˜ˆ: ์„œ์‹์ด ์ง€์ •๋œ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ๋˜๋Š” ์›์‹œ ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”)์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. ํŠน์ • ์—ด์˜ ํ•ญ๋ชฉ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•˜๋ ค๋ฉด ์—ด ๋จธ๋ฆฌ๊ธ€์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ ํฌ์ธํŠธ์— ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์š”์†Œ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์›๋ณธ์— ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ์—์„œ ํ‘œ์ค€ ์ฝ”๋“œ ํƒ์ƒ‰ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์š”์†Œ๋ฅผ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋กœ ํด๋ฆญํ•˜๊ณ  ์ •์˜๋กœ ์ด๋™ ๋˜๋Š” ์ฐธ์กฐ๋กœ ์ด๋™ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ™œ์„ฑ ํŒŒ์ผ์—์„œ CodeQL ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ, ๋ช‡ ์ดˆ ์ •๋„ ์†Œ์š”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฟผ๋ฆฌ๋Š” ๋ชจ๋“  ํŒŒ์ผ์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋™์ผํ•œ ํŒŒ์ผ์˜ ์ถ”๊ฐ€ ์ฐธ์กฐ๋Š” ๋น ๋ฆ…๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

์ด์ „ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ •์˜๋กœ ์ด๋™ ๋ฐ ์ฐธ์กฐ๋กœ ์ด๋™๊ณผ ๊ฐ™์€ ์ฝ”๋“œ ํƒ์ƒ‰ ๋ช…๋ น์ด ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์••์ถ•์„ ํ’€๊ณ  CodeQL CLI์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ ์••์ถ•์„ ํ‘ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ codeql database cleanup <database>๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ Visual Studio Code์— ๋‹ค์‹œ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๋ฆฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๋น„๊ต

์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ๋””๋ฒ„๊น…ํ•  ๋•Œ ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด ๊ฒฐ๊ณผ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์ •ํ™•ํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•˜๋ ค๋ฉด ๋‘ ์ฟผ๋ฆฌ๋ฅผ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. "์ฟผ๋ฆฌ ๊ธฐ๋ก" ๋ณด๊ธฐ์—์„œ ์ฟผ๋ฆฌ๋ฅผ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋กœ ํด๋ฆญํ•˜๊ณ  ๊ฒฐ๊ณผ ๋น„๊ต๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  2. ๋น ๋ฅธ ์„ ํƒ ๋ฉ”๋‰ด์—๋Š” ๋น„๊ตํ•  ์œ ํšจํ•œ ๋ชจ๋“  ์ฟผ๋ฆฌ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  3. "๋น„๊ต" ๋ณด๊ธฐ๋Š” ๋‘ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์˜ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ

ํŠน์ • ์ฟผ๋ฆฌ ์‹คํ–‰์˜ ๋กœ๊ทธ๋ฅผ ๋ณด๋ ค๋ฉด "์ฟผ๋ฆฌ ๊ธฐ๋ก" ๋ณด๊ธฐ์—์„œ ์ฟผ๋ฆฌ๋ฅผ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋กœ ํด๋ฆญํ•˜๊ณ  ์ฟผ๋ฆฌ ๋กœ๊ทธ ํ‘œ์‹œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ ํŒŒ์ผ์ด ๋„ˆ๋ฌด ์ปค์„œ ์ต์Šคํ…์…˜์ด VS Code์—์„œ ์—ด๋ฆฌ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์— ํŒŒ์ผ์ด ํ‘œ์‹œ๋˜๋ฏ€๋กœ ์™ธ๋ถ€ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—…๊ทธ๋ ˆ์ด๋“œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ์ฟผ๋ฆฌ ์„œ๋ฒ„ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ๊ทธ ์•ก์„ธ์Šค์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ต์Šคํ…์…˜์€ ๊ฐ ์ž‘์—… ์˜์—ญ ์„ธ์…˜ ํ›„์— ๋กœ๊ทธ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋™์ž‘์„ ์žฌ์ •์˜ํ•˜๋ ค๋ฉด ์ฟผ๋ฆฌ ์„œ๋ฒ„ ๋กœ๊ทธ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„ค์ • ์‚ฌ์šฉ์ž ์ง€์ •์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

CodeQL: ์ฟผ๋ฆฌ ์„œ๋ฒ„ ๋‹ค์‹œ ์‹œ์ž‘ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด CodeQL ์„ธ์…˜ ๊ธฐ๋ก์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ์„œ๋ฒ„๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์ต์Šคํ…์…˜์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ํŒŒ์ผ์„ ์™ธ๋ถ€๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ ์ฟผ๋ฆฌ ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด VS Code์— ์—ด๋ ค ์žˆ๋Š” CodeQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์˜ ๋ฌธ์ œ ์™ธ์—๋„ ์ฝ”๋“œ ๊ฐ•์กฐ ํ‘œ์‹œ ์˜ค๋ฅ˜, ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ ํ•ฉ๊ณ„ ๋˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ์ค‘๋ณต ์•Œ๋ฆผ์ด ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„

ํ•„์š”์— ๋”ฐ๋ผ ์ต์Šคํ…์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ง€์ • ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‚ฌ์šฉ์ž ์ง€์ • ์ฟผ๋ฆฌ ๋งŒ๋“ค๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋งŽ์€ CodeQL๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋Œ€๊ทœ๋ชจ๋กœ ๋ถ„์„์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์ค‘ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ณ€ํ˜• ๋ถ„์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ CodeQL ์ฟผ๋ฆฌ ์‹คํ–‰์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.