Skip to main content

์„ค์ • ์‚ฌ์šฉ์ž ์ง€์ •

ํ•„์š”์— ๋งž๊ฒŒ Visual Studio Code ์ต์Šคํ…์…˜์šฉ CodeQL์— ๋Œ€ํ•œ ์„ค์ •์„ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Visual Studio Code ์ต์Šคํ…์…˜์šฉ CodeQL์˜ ์„ค์ • ์ •๋ณด

๋‹ค์Œ์„ ํฌํ•จํ•˜์—ฌ Visual Studio Code ์ต์Šคํ…์…˜์šฉ CodeQL์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ต์Šคํ…์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” CodeQL CLI์˜ ๋ฒ„์ „.
  • ์ต์Šคํ…์…˜์—์„œ ์ด์ „ ์ฟผ๋ฆฌ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•.
  • ์ต์Šคํ…์…˜์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•.

CodeQL ํ™•์žฅ ์„ค์ • ํŽธ์ง‘

  1. "์ต์Šคํ…์…˜" ๋ณด๊ธฐ๋ฅผ ์—ด๊ณ  CodeQL ์„(๋ฅผ) ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ”๋กœ ํด๋ฆญํ•œ ๋‹ค์Œ ์ต์Šคํ…์…˜ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

    ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ ๋‹จ์ถ” ํด๋ฆญ ๋ฉ”๋‰ด๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  "์ต์Šคํ…์…˜ ์„ค์ •"์ด ์ง„ํ•œ ์ฃผํ™ฉ์ƒ‰ ์œค๊ณฝ์„ ์œผ๋กœ ํ‘œ์‹œ๋œ "์ต์Šคํ…์…˜" ๋ณด๊ธฐ์˜ ์Šคํฌ๋ฆฐ์ƒท

  2. ์„ค์ • ์ฐฝ์—์„œ ์›ํ•˜๋Š” ๋Œ€๋กœ ์„ค์ •์„ ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ์„ค์ •์ด ์ž๋™์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

    VS Code ๋‚ด์— ํ‘œ์‹œ๋œ VS Code ์ต์Šคํ…์…˜ ์„ค์ •์šฉ 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 "์ฟผ๋ฆฌ ์„œ๋ฒ„" ํƒญ์˜ ๋กœ๊ทธ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํŠœํ”Œ ์ˆ˜๋Š” ์ฟผ๋ฆฌ์—์„œ ๊ณ„์‚ฐํ•œ ์กฐ๊ฑด์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

๋ณ€ํ˜• ๋ถ„์„์„ ์œ„ํ•œ ์„ค์ • ๊ตฌ์„ฑ

"๋ณ€ํ˜• ๋ถ„์„" ์•„๋ž˜์—๋Š” ๋ณ€ํ˜• ๋ถ„์„์„ ์œ„ํ•ด GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ชฉ๋ก์„ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ํŽธ์ง‘ํ•˜๊ณ  ๋‹ค๋ฅธ ์ปจํŠธ๋กค๋Ÿฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์šฉ๋„ ๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์ค‘ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ณ€ํ˜• ๋ถ„์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ 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์˜ ์›๊ฒฉ ๋ถ„์„์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ถ”๊ฐ€ ์ฐธ๊ณ  ์ž๋ฃŒ