Go Code 20 ์ •์  ๋ถ„์„ ๋„๊ตฌ

๋” ๋‚˜์€ Go ์ฝ”๋“œ ์ž‘์„ฑ: ๋ฒ„๊ทธ๋ฅผ ๋ฏธ๋ฆฌ ์žก์•„์ฃผ๋Š” 20๊ฐ€์ง€ ์ •์  ๋ถ„์„ ๋„๊ตฌ

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

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

Go๋Š” ํŠนํžˆ ์ •์  ๋ถ„์„์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์—„๊ฒฉํ•˜๊ณ , ๊ตฌ๋ฌธ์€ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฉฐ, Go ์ƒํƒœ๊ณ„๋Š” ์ž๋™ํ™”์— ๊นŠ์ด ํˆฌ์ž๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. go vet, go fmt์˜ˆ์‚ฐ ๋ฐ golint ์˜ค๋žซ๋™์•ˆ ํ‘œ์ค€ Go ํˆด์ฒด์ธ์˜ ์ผ๋ถ€์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์™ธ์—๋„ ๊ณ ๊ธ‰ ๋ถ„์„๊ธฐ, ๋ฆฐํ„ฐ, ๋ณด์•ˆ ์Šค์บ๋„ˆ, ์ฝ”๋“œ ํ’ˆ์งˆ ํ”Œ๋žซํผ ๋“ฑ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ์ƒํƒœ๊ณ„๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€๋Š” ๊ด€์šฉ์ ์ธ Go ๊ทœ์น™์„ ์ ์šฉํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๊ณ , ๋‹ค๋ฅธ ์ผ๋ถ€๋Š” ๋™์‹œ ์ฝ”๋“œ์—์„œ ๋ฏธ๋ฌ˜ํ•œ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ๋ฐ ํŠนํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ผ๋ถ€๋Š” ํ”„๋กœ๋•์…˜๊ธ‰ ์‹œ์Šคํ…œ์—์„œ ๋ณด์•ˆ ๊ฐ์‚ฌ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฆ๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ ํ•ฉํ•œ ์ •์  ๋ถ„์„ ๋„๊ตฌ๋ฅผ ๋„์ž…ํ•˜๋ฉด ์˜จ๋ณด๋”ฉ ์†๋„๋ฅผ ๋†’์ด๊ณ , ๊ฒ€ํ†  ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๋ฉฐ, ํšŒ๊ท€๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ๊ทœ๋ชจ ํŒ€์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋„๊ตฌ๊ฐ€ ์•ˆ์ „๋ง์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ๋Š” ๋Œ€๊ทœ๋ชจ ์ผ๊ด€์„ฑ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” Go์—์„œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ด๊ณ  ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ •์  ๋ถ„์„ ๋„๊ตฌ 20๊ฐ€์ง€๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ๊ฐ ๋„๊ตฌ๋Š” ์ฃผ์š” ๊ธฐ๋Šฅ, ๊ฐ•์ , ํ†ตํ•ฉ ๊ธฐ๋Šฅ, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ๊ฐœ๋ฐœ ํŒŒ์ดํ”„๋ผ์ธ๊ณผ์˜ ์—ฐ๊ด€์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ฒฝ์šฐ, ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋Š” ๋”์šฑ ์ž์‹  ์žˆ๊ฒŒ ๋”์šฑ ๊น”๋”ํ•˜๊ณ  ์•ˆ์ „ํ•˜๋ฉฐ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•œ Go ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฐจ๋ก€

SMART TS XL

SMART TS XL ๋Œ€๊ทœ๋ชจ Go ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ณต์žก์„ฑ์„ ๊ธฐ์กด ๋ฆฐํ„ฐ๋ฅผ ๋›ฐ์–ด๋„˜๋Š” ์‹ฌ์ธต์ ์ธ ๋ถ„์„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ฐ•๋ ฅํ•œ ์ •์  ๋ถ„์„ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์›๋ž˜ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋ถ„์„์„ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ์ง€๋งŒ, ์ด์ œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค, ๋ชจ๋†€๋ฆฌ์Šค ๋ฐ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์ตœ์‹  Golang ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

์ฃผ์š” ๊ธฐ๋Šฅ SMART TS XL Go์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

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

SMART TS XL ํŠนํžˆ ๋ณต์žก์„ฑ์ด ๋†’๊ณ  ๊ฐ€๋™ ์‹œ๊ฐ„ ์š”๊ฑด์ด ์—„๊ฒฉํ•œ ๋Œ€๊ทœ๋ชจ Go ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒ€์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. CI/CD ์›Œํฌํ”Œ๋กœ ํ†ตํ•ฉ์„ ์ง€์›ํ•˜๊ณ  ์„ฑ์žฅํ•˜๋Š” ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ํ’ˆ์งˆ ์œ ์ง€๋ฅผ ์ง€์›ํ•˜์—ฌ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ํ˜„๋Œ€ํ™” ์ž‘์—…์— ๋Œ€ํ•œ ํ™•์‹ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

GolangCI Lint

GolangCI Lint Go ์ƒํƒœ๊ณ„์—์„œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๊ณ  ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”ํƒ€ ๋ฆฐํ„ฐ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ฆฐํ„ฐ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ตํ•ฉ ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• ์„ ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „์ฒด์—์„œ ๋‹ค์–‘ํ•œ ์ •์  ๊ฒ€์‚ฌ๋ฅผ ๋น ๋ฅด๊ณ  ์ผ๊ด€๋˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ๋ช…๋ น์œผ๋กœ 50๊ฐœ ์ด์ƒ์˜ ๊ฐœ๋ณ„ ๋ฆฐํ„ฐ๋ฅผ ์ง€์›ํ•˜๋Š” golangci-lint๋Š” ์Šคํƒ€์ผ ์ ์šฉ ๋ฐ ๋ณต์žก์„ฑ ๊ฒ€์‚ฌ๋ถ€ํ„ฐ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ํŒจํ„ด ๋ฐ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ๊ฐ์ง€๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋น ๋ฅธ ์†๋„, ๊ตฌ์„ฑ ๊ฐ€๋Šฅ์„ฑ, ๊ทธ๋ฆฌ๊ณ  CI/CD ํ™˜๊ฒฝ์—์„œ์˜ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ ๋•๋ถ„์— ๊ฐ€๋ณ์ง€๋งŒ ํšจ๊ณผ์ ์ธ ์ •์  ๋ถ„์„์„ ์›ํ•˜๋Š” ํŒ€์—๊ฒŒ ์ตœ์ ์˜ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ๊ตฌ์„ฑ, ๋ฆฐํ„ฐ ์ œ์™ธ, ์„ฑ๋Šฅ ํŠœ๋‹, ๊ทธ๋ฆฌ๊ณ  ํŽธ์ง‘๊ธฐ ๋ฐ ํŒŒ์ดํ”„๋ผ์ธ๊ณผ์˜ ์›ํ™œํ•œ ํ†ตํ•ฉ์„ ์œ„ํ•œ ์ถœ๋ ฅ ํ˜•์‹ ์ง€์ • ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

golangci-lint๊ฐ€ ๋ถ€์กฑํ•œ ์ 

golangci-lint๋Š” ์žฅ์ ์ด ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

GolangCI Lint๋Š” Go ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์œ„ํ•œ ๊ท€์ค‘ํ•œ 1์ฐจ ๋ฐฉ์–ด์„ ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌ ์‹œ์Šคํ…œ, ๋Œ€๊ทœ๋ชจ ๋‹จ์ผ ์ €์žฅ์†Œ ๋˜๋Š” ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ค๋ฃจ๋Š” ํŒ€์€ ์•ˆ์ „์„ฑ, ๋™์‹œ์„ฑ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ ์šฉ์ด์„ฑ์„ ๋”์šฑ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋ณด์žฅํ•˜๋Š” ์‹ฌ์ธต์ ์ธ ์˜๋ฏธ ๋ถ„์„๊ธฐ๋ฅผ ์ถ”๊ฐ€๋กœ ๋„์ž…ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •์  ๊ฒ€์‚ฌ

์ •์  ๊ฒ€์‚ฌ ์ •ํ™•๋„, ์„ฑ๋Šฅ, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ์‚ฌ์šฉ์˜ ์—ฐ๊ด€์„ฑ์„ ๊ท ํ˜• ์žˆ๊ฒŒ ๊ฐ–์ถ˜ ๊ฒƒ์œผ๋กœ ์œ ๋ช…ํ•œ Go ์ •์  ๋ถ„์„ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋„๋ฏธ๋‹ˆํฌ ํ˜ธ๋„คํ”„(Dominik Honnef)๊ฐ€ ๊ฐœ๋ฐœํ•œ Staticcheck๋Š” ๋‹จ์ˆœํžˆ ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๋Š” ๋ฐ ๊ทธ์น˜์ง€ ์•Š๊ณ  ์ค‘๋ณต ์—ฐ์‚ฐ, ์ž˜๋ชป๋œ ํƒ€์ž… ๋ณ€ํ™˜, ์„ฑ๋Šฅ ์ €ํ•˜, ์˜์‹ฌ์Šค๋Ÿฌ์šด ์ฝ”๋“œ ๊ตฌ์กฐ ๋“ฑ ๋ฏธ๋ฌ˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋ฆฐํ„ฐ์™€ ๋‹ฌ๋ฆฌ Staticcheck๋Š” ์‹ฌ์ธต์ ์ธ ์–ธ์–ด ์ดํ•ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ต์ฐฐ๋ ฅ ์žˆ๋Š” ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Go ์ฝ”๋“œ์—์„œ ์ผ๋ฐ˜์ ์ธ ๋ฒ„๊ทธ, API ์˜ค์šฉ, ์œ„ํ—˜ํ•œ ๊ด€์šฉ์–ด๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ์ง„๋‹จ ๊ฒฐ๊ณผ๋Š” ์‹ค์ˆ˜์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ณ  ์˜๋„์ ์ธ ์˜ˆ์™ธ ์‚ฌ๋ก€์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์€ ๋ฌธ์ œ๋ฅผ ๋ชจ๋‘ ๋ฐ˜์˜ํ•˜๋„๋ก ์‹ ์ค‘ํ•˜๊ฒŒ ์„ ๋ณ„๋˜์–ด ์†Œ๊ทœ๋ชจ ํŒ€๊ณผ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ํ”„๋กœ์ ํŠธ ๋ชจ๋‘์—์„œ ์‹ ๋ขฐ๋ฐ›๋Š” ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

IDE, CI ์‹œ์Šคํ…œ๊ณผ ์ž˜ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. golangci-lint ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. Staticcheck๋Š” ๋ชจ๋“ˆ์„ ์ง€์›ํ•˜๊ณ  ํŒจํ‚ค์ง€ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“ค๋ฉฐ ์ž‘๋™ํ•˜๋ฏ€๋กœ, ํ”„๋กœ๋•์…˜ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ฝ”๋“œ ์œ„์ƒ ๋ฐ ์•ˆ์ •์„ฑ์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๊ธฐ์ค€ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

Staticcheck์˜ ํ•œ๊ณ„์™€ ์ƒ์ถฉ ๊ด€๊ณ„

Staticcheck๋Š” ๊ฒฌ๊ณ ํ•˜๊ณ  ์‹ ์ค‘ํ•˜๊ฒŒ ์„ค๊ณ„๋˜์—ˆ์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡๋ช‡ ์˜์—ญ์—์„œ๋Š” ์™„๋ฒฝํ•œ ๋ณดํ˜ธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

  • ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ ๋ถ„์„ ๋ถ€์กฑ
    Staticcheck๋Š” ํŒจํ‚ค์ง€ ์ˆ˜์ค€์—์„œ ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•˜์ง€๋งŒ, ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ ์™„์ „ํ•œ ํ˜ธ์ถœ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ฑฐ๋‚˜ ํƒ์ƒ‰ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ธด๋ฐ€ํ•˜๊ฒŒ ์ƒํ˜ธ ์—ฐ๊ฒฐ๋œ ์‹œ์Šคํ…œ์ด๋‚˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ, ์ด๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋Š๊น€์ด๋‚˜ ํŒจํ‚ค์ง€ ๊ฐ„ ๋ถ€์ž‘์šฉ๊ณผ ๊ฐ™์€ ๊ฒฝ๊ณ„ ๊ฐ„ ๋ฌธ์ œ๋ฅผ ๊ฐ„๊ณผํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ฌ์ธต์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด๋‚˜ ์˜ค์—ผ ๋ถ„์„ ์—†์Œ
    Staticcheck๋Š” ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๋ฅผ ํฌ์ฐฉํ•˜๋Š” ๋ฐ๋Š” ๋›ฐ์–ด๋‚˜์ง€๋งŒ, ํ•จ์ˆ˜ ์ฒด์ธ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ด๋™ํ•˜๋Š”์ง€, ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ž…๋ ฅ์ด ์ค‘์š” ์ž‘์—…์— ์–ด๋–ป๊ฒŒ ๋„๋‹ฌํ•˜๋Š”์ง€ ์ถ”์ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ณ ๊ธ‰ ๋ณด์•ˆ ๋ถ„์„์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ˆ˜๋ช… ์ฃผ๊ธฐ ๊ฐ์‚ฌ์— ํ™œ์šฉํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  • ์ œํ•œ๋œ ๋™์‹œ์„ฑ ๋ชจ๋ธ๋ง
    Go์˜ ๋™์‹œ์„ฑ ๋ชจ๋ธ์€ ๊ณ ๋ฃจํ‹ด, ์ฑ„๋„ ๋ฐ select Staticcheck๋Š” ์—ฌ๊ธฐ์—์„œ ์ œํ•œ์ ์ธ ์ ์šฉ ๋ฒ”์œ„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ฑฐ๋‚˜, ์ฑ„๋„ ์˜ค์šฉ์„ ๊ฐ์ง€ํ•˜๊ฑฐ๋‚˜, ์ž ์žฌ์  ๊ต์ฐฉ ์ƒํƒœ ๋˜๋Š” ๊ฒฝ์Ÿ ์œ„ํ—˜์„ ๊ฒ€์ฆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๊ทœ์น™ ์—”์ง„ ์—†์Œ
    ์ด ๋„๊ตฌ๋Š” ์˜๋„์ ์œผ๋กœ ๋…๋‹จ์ ์œผ๋กœ ์„ค๊ณ„๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ทœ์น™์„ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„ค๊ณ„ ๋ฐฉ์‹์€ ์ผ๊ด€์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค์ง€๋งŒ, ์กฐ์ง๋ณ„ ์ •์ฑ…์ด๋‚˜ ๋ช…๋ช… ๊ทœ์น™์„ ์ ์šฉํ•˜๋ ค๋Š” ํŒ€์˜ ์œ ์—ฐ์„ฑ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
  • ๋””์ž์ธ์— ๋”ฐ๋ฅธ ์ข์€ ์ดˆ์ 
    Staticcheck๋Š” ์˜๋„์ ์œผ๋กœ ๋‹ค๋ฅธ ๋„๊ตฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ์ค‘๋ณต์„ ํ”ผํ•ฉ๋‹ˆ๋‹ค. gosec, gosimple๋ฐ unused์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ„๊ฒฐํ•œ ๋ถ„์„์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ํŒ€์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ „์ฒด ์ŠคํŽ™ํŠธ๋Ÿผ ์ •์  ๋ถ„์„์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ๋ณด์™„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Staticcheck๋Š” ๋ชจ๋“  Go ํ”„๋กœ์ ํŠธ์—์„œ ๊ณ ์‹ ํ˜ธ, ์ €์žก์Œ ํ’ˆ์งˆ ๊ฒ€์‚ฌ๊ธฐ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ์œ ์ง€ ๊ด€๋ฆฌ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ํ”ํ•œ ์‹ค์ˆ˜๋ฅผ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌํ•ด ์•Œ๋ ค์ฃผ์ง€๋งŒ, ์•„ํ‚คํ…์ฒ˜ ๊ฒ€์ฆ, ๋™์‹œ์„ฑ ์ •ํ™•์„ฑ, ๋˜๋Š” ์‹ฌ์ธต์ ์ธ ์ทจ์•ฝ์  ์Šค์บ๋‹์„ ์œ„ํ•œ ๋”์šฑ ์ „๋ฌธํ™”๋œ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์˜์‚ฌ์—๊ฒŒ ๊ฐ€์„ธ์š”

์ˆ˜์˜์‚ฌ์—๊ฒŒ ๊ฐ€์„ธ์š” Go ํˆด์ฒด์ธ์— ํฌํ•จ๋œ ๊ณต์‹ ์ •์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ ๋ฒ„๊ทธ๋ฅผ ์œ ๋ฐœํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” Go ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฏธ๋ฌ˜ํ•œ ์˜ค๋ฅ˜๋ฅผ ์‹๋ณ„ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Go Vet์€ ์ •์ƒ์ ์œผ๋กœ ์ปดํŒŒ์ผ๋˜์ง€๋งŒ ์œ„ํ—˜ํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ํŒจํ„ด์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์˜ ์ •์ƒ์„ฑ ๊ฒ€์‚ฌ๊ธฐ๋กœ ์ž์ฃผ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค.

์˜ค์šฉ ๋“ฑ์˜ ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Printf ํ˜•์‹ ๋™์‚ฌ, ์ˆจ๊ฒจ์ง„ ๋ณ€์ˆ˜, ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ, ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํ˜•์‹ ์–ด์„ค์…˜ ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Go Vet์€ ํ•ต์‹ฌ Go ํŒ€์—์„œ ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ์–ธ์–ด์™€ ํ•จ๊ป˜ ๋ฐœ์ „ํ•˜๋ฉฐ ๊ด€์šฉ์ ์ธ ๊ธฐ๋Œ€์น˜๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜๋ฉฐ, go ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ , ์ง€์†์ ์ธ ํ†ตํ•ฉ ์›Œํฌํ”Œ๋กœ๋‚˜ ๊ฐœ๋ฐœ์ž ํˆด๋ง์—์„œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” 1์ฐจ ๊ฒ€์ฆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Go Vet์€ Vet Checker๋ฅผ ํ†ตํ•ด ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํŠน์ • ๋ถ„์„๊ธฐ๋ฅผ ํ™œ์„ฑํ™” ๋˜๋Š” ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ ์ œํ•œ์ ์ธ ์‚ฌ์šฉ์ž ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ž˜ ๊ตฌ์กฐํ™”๋œ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๋กœ ํฌ๋งทํ„ฐ ๋ฐ ๋ฆฐํ„ฐ์™€ ํ•จ๊ป˜ ์ง€์†์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

Go Vet์˜ ๊ฒฉ์ฐจ์™€ ์ œ์•ฝ

Go Vet์€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ •์  ๊ฒ€์‚ฌ๊ธฐ์ด์ง€๋งŒ, ํฌ๊ด„์ ์ธ ๋ถ„์„์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ œํ•œ ์‚ฌํ•ญ์„ ์ธ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์–•์€ ์ •์  ๋ฒ”์œ„
    Go Vet์€ ์ฃผ๋กœ ๋กœ์ปฌ ํŒจํ‚ค์ง€์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ์ „์ฒด ์ข…์†์„ฑ ํŠธ๋ฆฌ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด ํ๋ฆ„์„ ํƒ์ƒ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ํŒจํ‚ค์ง€ ๊ฐ„ ์˜ค๋ฅ˜, ์•„ํ‚คํ…์ฒ˜ ์œ„๋ฐ˜ ๋˜๋Š” ์„œ๋น„์Šค ๊ฐ„ ๋ถ€์ž‘์šฉ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์˜๋ฏธ ํ๋ฆ„ ์ธ์‹ ์—†์Œ
    ์ด ๋„๊ตฌ๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ์ œ์–ด ํ๋ฆ„์„ ๋ชจ๋ธ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์กฐ๊ฑด์ด ํ•ญ์ƒ ๊ฑฐ์ง“์ธ์ง€, ๋ณ€์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ์ „์ฒด์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”์ง€, ๋˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์˜๋„๋œ ์ƒํƒœ ๋…ผ๋ฆฌ๋ฅผ ์œ„๋ฐ˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋” ์‹ฌ์ธต์ ์ธ ๊ฒ€์ฆ์„ ์œ„ํ•ด์„œ๋Š” Staticcheck ๋˜๋Š” SMART TS XL ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ
    Go Vet์€ ๋™์‹œ์„ฑ ๊ธฐ๋ณธ ์š”์†Œ์— ๋Œ€ํ•œ ์ตœ์†Œํ•œ์˜ ๋ถ„์„๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๋ฃจํ‹ด ๋™์ž‘, ์ฑ„๋„ ์กฐ์ •, ๋ฉ”๋ชจ๋ฆฌ ๊ฒฝ์Ÿ์€ ๋ถ„์„ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋™์‹œ์„ฑ์ด ๋†’์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์œ ์šฉ์„ฑ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.
  • ์ตœ์†Œํ•œ์˜ ๋ณด์•ˆ ํ†ต์ฐฐ๋ ฅ
    ์ด ๋„๊ตฌ๋Š” ํ™•์ธ๋˜์ง€ ์•Š์€ ์ž…๋ ฅ, ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์—ญ์ง๋ ฌํ™”, ์ž๊ฒฉ ์ฆ๋ช… ๋…ธ์ถœ๊ณผ ๊ฐ™์€ ๋ณด์•ˆ ๊ฒฐํ•จ์„ ํฌ์ฐฉํ•˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. gosec ๊ธฐ๋ณธ์ ์ธ ์ทจ์•ฝ์  ์Šค์บ๋‹์—๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ํ’ˆ์งˆ์ด๋‚˜ ์Šคํƒ€์ผ ์ ์šฉ ์—†์Œ
    Go Vet์€ ๋ฆฐํ„ฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ฝ”๋“œ ์Šคํƒ€์ผ, ๋ช…๋ช… ๊ทœ์น™ ๋˜๋Š” ์„œ์‹์„ ๊ฐ•์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. golangci-lint, revive๋ฐ golint ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ œํ•œ๋œ ๊ตฌ์„ฑ ์˜ต์…˜
    ๊ฐœ๋ณ„ ์ˆ˜์˜์‚ฌ ๊ฒ€์‚ฌ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Go Vet์—๋Š” ๊ณ ๊ธ‰ ๊ทœ์น™ ์‚ฌ์šฉ์ž ์ •์˜, ์‚ฌ์šฉ์ž ์ •์˜ ํŒจํ„ด ์ง€์› ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ฆฐํ„ฐ์™€์˜ ํ†ตํ•ฉ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

์š”์•ฝํ•˜์ž๋ฉด, Go Vet์€ Go ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋˜๋Š” ๊ฐ€๋ณ๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ๊ธฐ์ž…๋‹ˆ๋‹ค. ๋ช…๋ฐฑํ•œ ์˜ค๋ฅ˜๋ฅผ ํฌ์ฐฉํ•˜๋Š” ๊ธฐ๋ณธ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์ง€๋งŒ, ์ฝ”๋“œ ์ •ํ™•์„ฑ, ์œ ์ง€ ๊ด€๋ฆฌ ์šฉ์ด์„ฑ ๋ฐ ๋ณด์•ˆ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์‹ ๋ขฐ๋ฅผ ์–ป์œผ๋ ค๋ฉด ์ถ”๊ฐ€ ๋ถ„์„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ถ€ํ™œ

๋ถ€ํ™œ Go๋ฅผ ์œ„ํ•œ ๋น ๋ฅด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ linter๋กœ ํ˜„์žฌ ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. golint ๋” ํฐ ์œ ์—ฐ์„ฑ, ํ–ฅ์ƒ๋œ ์„ฑ๋Šฅ, ๊ทธ๋ฆฌ๊ณ  ์ตœ์‹  ๊ทœ์น™ ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋“œ๋กญ์ธ ๋Œ€์ฒด์žฌ๋กœ ์ œ์ž‘๋œ Revive๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ œ์–ด๋ ฅ์ด๋‚˜ ์†๋„๋ฅผ ํฌ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„ ์ตœ์‹  Go ํ”„๋กœ์ ํŠธ์— ์Šคํƒ€์ผ ๊ฐ•ํ™”์™€ ์ฝ”๋“œ ์ผ๊ด€์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

Revive๋Š” ๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์šฐ๋ฉฐ CI ํŒŒ์ดํ”„๋ผ์ธ์ด๋‚˜ ๊ธฐํƒ€ ์ •์  ๋ถ„์„ ํ”Œ๋žซํผ๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. golangci-lint. ์ด ๊ทœ์น™์€ ์ผ๋ฐ˜์ ์ธ ๋ชจ๋ฒ” ์‚ฌ๋ก€, ์Šคํƒ€์ผ ๊ฒ€์‚ฌ, ๊ธฐ๋ณธ์ ์ธ ์ •ํ™•์„ฑ ๊ฒ€์ฆ์„ ๋ชจ๋‘ ํฌํ•จํ•˜๋ฏ€๋กœ ๋ชจ๋“  Go ํŒ€์— ์•ˆ์ •์ ์ธ ์ฝ”๋“œ ์œ„์ƒ ๊ณ„์ธต์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Revive๊ฐ€ ํ•œ๊ณ„์— ๋„๋‹ฌํ•˜๋Š” ๊ณณ

Revive๋Š” ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ๊ณผ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ์„ฑ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์‹ฌ์ธต ์ •์  ๋ถ„์„์„ ์œ„ํ•œ ํฌ๊ด„์ ์ธ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ฃผ์š” ์ œ์•ฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ณธ์„ฑ์ ์œผ๋กœ ์Šคํƒ€์ผ ์ค‘์‹ฌ์ 
    Revive๋Š” ์ฃผ๋กœ ์Šคํƒ€์ผ ๊ทœ์น™์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ์˜๋ฏธ์  ๋™์ž‘์„ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ํ‘œ๋ฉด์ ์ธ ์ฝ”๋”ฉ ๋ฌธ์ œ ์™ธ์—๋Š” ๋…ผ๋ฆฌ์  ๊ฒ€์ฆ์ด๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šด ํŒจํ„ด ๊ฐ์ง€๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ํ๋ฆ„์ด๋‚˜ ๋งฅ๋ฝ ์ธ์‹ ์—†์Œ
    ์ด ๋„๊ตฌ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์ฝ”๋“œ ๋‚ด์—์„œ ์–ด๋–ป๊ฒŒ ์ด๋™ํ•˜๋Š”์ง€, ์ œ์–ด ๊ตฌ์กฐ๊ฐ€ ํ•จ์ˆ˜ ๊ฐ„์— ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š”์ง€, ๋˜๋Š” ์ฝ”๋“œ ๊ฒฝ๋กœ์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ถ„์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ข…์†์„ฑ ์ถ”์ ์ด๋‚˜ ๋™์‹œ์„ฑ ์•ˆ์ „์„ฑ๋„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™์ž‘์— ๋Œ€ํ•œ ์ œํ•œ๋œ ํ†ต์ฐฐ๋ ฅ
    Revive๋Š” ๋ฏธ๋ฌ˜ํ•œ ๋ฒ„๊ทธ, ๊ต์ฐฉ ์ƒํƒœ ๋˜๋Š” ๋ฆฌ์†Œ์Šค ์˜ค์šฉ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ถ„์„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. staticcheck ๋˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ œ์–ด ํ๋ฆ„ ์ธ์‹ ํ”Œ๋žซํผ SMART TS XL.
  • ๋ณด์•ˆ ์Šค์บ๋‹ ์—†์Œ
    ๋ณด์•ˆ ์ค‘์‹ฌ ๊ทœ์น™์ด๋‚˜ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ฝ”๋”ฉ ํŒจํ„ด์— ๋Œ€ํ•œ ์ธ์‹์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. gosec ๋˜๋Š” ์œ„ํ˜‘ ํƒ์ง€๋ฅผ ์œ„ํ•ด ๋”์šฑ ์ง„๋ณด๋œ ๋ถ„์„๊ธฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™ ์ƒ์„ฑ์—๋Š” ์ฝ”๋”ฉ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
    ์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์ง€์›๋˜์ง€๋งŒ Go ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐœ๋ฐœ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์†Œ๊ทœ๋ชจ ํŒ€์ด๋‚˜ ๋น ๋ฅธ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์„ ์›ํ•˜๋Š” ๊ฒฝํ—˜์ด ๋ถ€์กฑํ•œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ๊ณผ๋„ํ•œ ์ž‘์—…์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ํ’ˆ์งˆ ํ‰๊ฐ€ ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์ ์šฉ์„ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.
    Revive๋Š” ์ฝ”๋“œ ๋ฉ”ํŠธ๋ฆญ ์ƒ์„ฑ, ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„ ๊ฒ€์ฆ ๋˜๋Š” ์ข…์†์„ฑ ์‹œ๊ฐํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ ํ•„์š”ํ•˜๋ฉฐ, ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ํ”Œ๋žซํผ์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

Revive๋Š” Go ์ฝ”๋“œ์—์„œ ํ”„๋กœ์ ํŠธ๋ณ„ ์Šคํƒ€์ผ ๋ฐ ๊ฐ€๋…์„ฑ ํ‘œ์ค€์„ ์ ์šฉํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋น ๋ฅธ ์†๋„์™€ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ์„ฑ ๋•๋ถ„์— ํŒ€์˜ ์„œ์‹ ๋ฐ ๊ทœ์น™ ์ค€์ˆ˜๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•˜์ง€๋งŒ, ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „์ฒด๋ฅผ ์ปค๋ฒ„ํ•˜๋ ค๋ฉด ์˜๋ฏธ๋ก ์ , ๊ตฌ์กฐ์  ๋˜๋Š” ๋ณด์•ˆ ์ค‘์‹ฌ ๋ถ„์„๊ธฐ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ํ™•์ธ

์˜ค๋ฅ˜ ํ™•์ธ Go ์ƒํƒœ๊ณ„์—์„œ ๊ฐ€๋ณ์ง€๋งŒ ๊ฐ€์น˜ ์žˆ๋Š” ์ •์  ๋ถ„์„ ๋„๊ตฌ๋กœ, ํ•จ์ˆ˜์˜ ์˜ค๋ฅ˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด ๋ฌด์‹œ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฐ์ง€ํ•˜๋„๋ก ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Go์—์„œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋Š” ๋ช…์‹œ์ ์ด๋ฉฐ ๊ฒฌ๊ณ ํ•œ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŠนํžˆ ๊ทœ๋ชจ๊ฐ€ ํฌ๊ฑฐ๋‚˜ ๋น ๋ฅด๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์—์„œ ๋ฐ˜ํ™˜๋œ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ๋ฅผ ์‹ค์ˆ˜๋กœ ๊ฑด๋„ˆ๋›ฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ด ๋ถ€๋ถ„์—์„œ errcheck๊ฐ€ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด ๋„๊ตฌ๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์˜ค๋ฅ˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๊ฒ€์‚ฌํ•˜๊ณ , ์˜ค๋ฅ˜๊ฐ€ ์ž๋™์œผ๋กœ ๋ฌด์‹œ๋˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ„๋‹จํ•œ ๊ทœ์น™์€ ํŒ€์ด ์ผ๊ด€๋œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์ ์šฉํ•˜๊ณ  ์šด์˜ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋™ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

errcheck๋Š” ๋…๋ฆฝ ์‹คํ–‰ํ˜• ๋„๊ตฌ๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์ •์  ๋ถ„์„ ์ œํ’ˆ๊ตฐ๊ณผ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. golangci-lint์ด๋Š” ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ ํšŒ๊ท€๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ํŒ€ ์ „์ฒด์—์„œ ๋ฐฉ์–ด์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šต๊ด€์ด ์œ ์ง€๋˜๋„๋ก ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด CI ํŒŒ์ดํ”„๋ผ์ธ์— ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

errcheck์˜ ์ฃผ์˜ ์‚ฌํ•ญ ๋ฐ ๊ฒฝ๊ณ„

errcheck๋Š” ๋งค์šฐ ๊ตฌ์ฒด์ ์ธ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๋ถ„์„ ์›Œํฌํ”Œ๋กœ์— ํ†ตํ•ฉํ•  ๋•Œ ๋ช…์‹ฌํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์ œํ•œ ์‚ฌํ•ญ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ข์€ ๋ฒ”์œ„
    errcheck๋Š” ์˜ค๋ฅ˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด ๋ฌด์‹œ๋˜๋Š”์ง€ ์—ฌ๋ถ€์—๋งŒ ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹, ๋กœ๊น… ์—ฌ๋ถ€, ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ž˜ํ•‘๋˜์—ˆ๋Š”์ง€, ์•ˆ์ „ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋ฐ˜ํ™˜๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ํ‰๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ๋งฅ์  ์ดํ•ด ์—†์Œ
    ์ด ๋„๊ตฌ๋Š” ์˜๋ฏธ ์ธ์‹ ๋Šฅ๋ ฅ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์ „ํ•œ ๋ˆ„๋ฝ(์˜ˆ: ์•Œ๋ ค์ง„ ๋ฌด์ž‘๋™(no-op)์—์„œ ์˜๋„์ ์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ)๊ณผ ์œ„ํ—˜ํ•œ ๋ˆ„๋ฝ์„ ๊ตฌ๋ถ„ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„์ ์ด๊ณ  ์ •๋‹นํ•œ ์„ ํƒ์„ ํ•œ ๊ฒฝ์šฐ์—๋„ ๊ฑฐ์ง“ ๊ธ์ •(false positive)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ฌ์ธต ๋ฒ„๊ทธ ๊ฐ์ง€์— ์ ํ•ฉํ•˜์ง€ ์•Š์Œ
    errcheck๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด๋‚˜ ์ œ์–ด ํ๋ฆ„ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋ฅผ ๋ฌด์‹œํ•  ๊ฒฝ์šฐ ์‹คํ–‰ ๊ฒฝ๋กœ ํ›„๋ฐ˜๋ถ€์—์„œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋„๊ตฌ๋Š” staticcheck ๋˜๋Š” ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ ๋ถ„์„๊ธฐ๊ฐ€ ์ด๋Ÿฌํ•œ ๋ถ€์ž‘์šฉ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ •์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์ •์ฑ…์— ๋Œ€ํ•œ ์ง€์› ์—†์Œ
    ๊ทœ์น™ ๊ธฐ๋ฐ˜ ํ”Œ๋žซํผ๊ณผ ๋‹ฌ๋ฆฌ errcheck๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์ „๋žต์„ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์˜ˆ์™ธ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์€ ์ „์ฒด ํŒจํ‚ค์ง€ ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ด๋ฆ„์œผ๋กœ ์ œ์™ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ œํ•œ๋˜์–ด ์žˆ์–ด ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ถฉ๋ถ„ํ•œ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹Œ ์‹คํŒจ์— ๋Œ€ํ•œ ์นจ๋ฌต
    errcheck๋Š” ํŒจ๋‹‰, ๋ฐ˜ํ™˜๋œ ๋ถ€์šธ ๊ฐ’, ์ƒํƒœ ์ฝ”๋“œ ๋“ฑ์˜ ๋‹ค๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ์‹คํŒจ๋ฅผ ์•Œ๋ฆฌ๋Š” ํ•จ์ˆ˜์˜ ์˜ค์šฉ์„ ํฌ์ฐฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ๋ฐ˜ํ™˜ ์œ ํ˜•์˜ ์กด์žฌ ์—ฌ๋ถ€์™€ ์‚ฌ์šฉ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

errcheck๋Š” Go์˜ ๋ช…์‹œ์  ์˜ค๋ฅ˜ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ œ์‹œํ•˜๋Š” ์ง‘์ค‘์ ์ธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ฐ ๋„๊ตฌ๊ฐ€ ํŠน์ • ๋ชฉ์ ์„ ๊ฐ€์ง„ ๊ณ„์ธตํ™”๋œ ์ •์  ๋ถ„์„ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. ๊ฒฌ๊ณ ํ•˜๊ณ  ์ผ๊ด€๋œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์šฐ์„ ์‹œํ•˜๋Š” ํŒ€์—๊ฒŒ errcheck๋Š” ๊ฐ€๋ณ๊ณ  ํšจ๊ณผ์ ์ธ ์•ˆ์ „๋ง์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฌดํšจ ํ• ๋‹น

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

์ด ๋„๊ตฌ๋Š” ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋ฉฐ ํŽธ์ง‘๊ธฐ, CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๋ฐ ๋ฉ”ํƒ€ ๋ฆฐํ„ฐ ์ œํ’ˆ๊ตฐ๊ณผ ์‰ฝ๊ฒŒ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. golangci-lint. ๋ถˆํ•„์š”ํ•œ ์ž‘์—…์„ ํŒŒ์•…ํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ๋†’๊ณ  ๋ชฉ์ ์— ๋งž๋Š” ๋ณ€์ˆ˜ ์‚ฌ์šฉ์„ ์žฅ๋ คํ•˜์—ฌ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์— ๋ฏผ๊ฐํ•˜๊ฑฐ๋‚˜ ๊ฐ์‚ฌ๊ฐ€ ์—„๊ฒฉํ•œ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋น„ํšจ์œจ์„ฑ์„ ์ œ๊ฑฐํ•จ์œผ๋กœ์จ ์œ ์ง€ ๊ด€๋ฆฌ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ณ  ๋ณต์žก์„ฑ์„ ์ค„์ด๋Š” ๋ฐ์—๋„ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ineffassign์€ ์ด๋Ÿฌํ•œ ์ˆจ๊ฒจ์ง„ ์ฝ”๋“œ ๋ฌธ์ œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ํŠนํžˆ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

ineffassign์˜ ์ œํ•œ ์‚ฌํ•ญ ๋ฐ ์šด์˜ ๋ฒ”์œ„

ineffassign์€ ์œ ์šฉ์„ฑ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ข์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž์ถฐ ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ ํฌ๊ด„์ ์ธ ์ฝ”๋“œ ๋ถ„์„์—์„œ์˜ ์—ญํ• ์„ ์ œํ•œํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

๊ณ ์„น

๊ณ ์„น (Golang Security Checker)๋Š” Go ์ฝ”๋“œ์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘” ์ •์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์†Œ์Šค ํŒŒ์ผ์„ ๊ฒ€์‚ฌํ•˜์—ฌ ๋ช…๋ น ์‚ฝ์ž…, ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์ž๊ฒฉ ์ฆ๋ช…, ๋ถ€์ ์ ˆํ•œ TLS ์‚ฌ์šฉ, ์ทจ์•ฝํ•œ ์•”ํ˜ธํ™”, ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ์ž…๋ ฅ ๊ฒ€์ฆ ๋“ฑ ์•Œ๋ ค์ง„ ์œ„ํ˜‘์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋…ธ์ถœ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด์„ ํƒ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์—์„œ ๋ณด์•ˆ์„ ์ขŒ์ธก์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ๋œ gosec์€ CI ํŒŒ์ดํ”„๋ผ์ธ, ๊ฐœ๋ฐœ์ž IDE ๋ฐ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๋ณด์•ˆ ์›Œํฌํ”Œ๋กœ์— ์‰ฝ๊ฒŒ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ ๋ฐ ํƒ€์‚ฌ ํŒจํ‚ค์ง€๋ฅผ ๋ชจ๋‘ ๋ถ„์„ํ•˜๊ณ  ๋ฏธ๋ฆฌ ์ •์˜๋œ ๋ณด์•ˆ ๊ทœ์น™ ์ง‘ํ•ฉ๊ณผ ์ผ์น˜ํ•˜๋Š” ์ฝ”๋“œ์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ๊ฐ ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ค„๋ณ„ ์ปจํ…์ŠคํŠธ์™€ ํ•จ๊ป˜ ์ˆ˜์ • ์ œ์•ˆ ๋ฐ CWE(Common Weakness Enumeration) ๋ถ„๋ฅ˜๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋”์šฑ ์‰ฝ๊ฒŒ ๋ถ„๋ฅ˜ํ•˜๊ณ  ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

gosec์€ JSON ์ถœ๋ ฅ, ๊ทœ์น™ ๊ตฌ์„ฑ ๋ฐ ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€์„ ์ง€์›ํ•˜๋ฏ€๋กœ ๋†’์€ ์ˆ˜์ค€์˜ ๊ทœ์ • ์ค€์ˆ˜ ๋ชฉํ‘œ์™€ ์ผ์ƒ์ ์ธ ์ทจ์•ฝ์„ฑ ์ธ์‹์„ ๋ชจ๋‘ ๊ฐ–์ถ˜ ํŒ€์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. DevSecOps์™€ ์ง€์†์ ์ธ ๋ณด์•ˆ ๊ฒ€์ฆ์„ ์šฐ์„ ์‹œํ•˜๋Š” Go ํŒ€์—์„œ gosec์˜ ๋„์ž…์ด ๊พธ์ค€ํžˆ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

gosec์ด ์„ฑ์žฅํ•  ์—ฌ์ง€๊ฐ€ ์žˆ๋Š” ๊ณณ

gosec์€ ๋ณด์•ˆ ์šฐ์„  ๊ฐœ๋ฐœ์— ํ•„์ˆ˜์ ์ธ ๋„๊ตฌ์ด์ง€๋งŒ, ์‹ฌ์ธต ๊ฐ์‚ฌ๋‚˜ ๊ธฐ์—… ์ˆ˜์ค€์˜ ๊ฐ์‚ฌ์— ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

๊ณ ๋ถˆ์ฒดํฌ

๊ณ ๋ถˆ์ฒดํฌ Go ํŒ€์—์„œ ๊ฐœ๋ฐœํ•œ ๊ณต์‹ Go ์ทจ์•ฝ์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Go ์ทจ์•ฝ์  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฝ”๋“œ์˜ ์ข…์†์„ฑ ๋ฐ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์—์„œ ์•Œ๋ ค์ง„ ๋ณด์•ˆ ๊ฒฐํ•จ์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํŒจํ„ด์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋Œ€์‹ , gosecgovulncheck๋Š” ๊ท€ํ•˜์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ณต๊ฐœ์ ์œผ๋กœ ์ทจ์•ฝํ•˜๋‹ค๊ณ  ๋ณด๊ณ ๋œ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”์ง€ ์—ฌ๋ถ€์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

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

govulncheck๋Š” ๋‹ค์Œ๊ณผ ์ž˜ ํ†ตํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. go ๋ช…๋ น์–ด๋Š” ๋ชจ๋“ˆ๊ณผ ๋นŒ๋“œ ํƒœ๊ทธ๋ฅผ ์ง€์›ํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž์šฉ ์ปดํ“จํ„ฐ์™€ CI ์‹œ์Šคํ…œ ๋ชจ๋‘์— ์ ํ•ฉํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ถœ๋ ฅ์—๋Š” CVE ์‹๋ณ„์ž, ์ทจ์•ฝ์  ์„ค๋ช…, ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์‹ฌ๋ณผ, ๊ทธ๋ฆฌ๊ณ  ํŠน์ • ๋ชจ๋“ˆ ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ์™€ ๊ฐ™์€ ์ œ์•ˆ๋œ ํ•ด๊ฒฐ ์ „๋žต์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

govulncheck์˜ ํ•œ๊ณ„์™€ ๊ฒฝ๊ณ„

govulncheck๋Š” ์ž๋™ํ™”๋œ ์ข…์†์„ฑ ๊ฐ์‚ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์œ ์šฉํ•œ ๊ณ„์ธต์ด์ง€๋งŒ, ์˜๋„์ ์œผ๋กœ ์ ์šฉ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๋ณด์•ˆ ์ „๋žต์˜ ์ผํ™˜์œผ๋กœ govulncheck๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฐœ๋ฐœํŒ€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ œํ•œ ์‚ฌํ•ญ์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

govulncheck๋Š” ์ข…์†์„ฑ ๊ด€๋ฆฌ ์›Œํฌํ”Œ๋กœ์˜ ์ผ์ƒ์ ์ธ ๋ถ€๋ถ„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ์•Œ๋ ค์ง„ ๋ณด์•ˆ ๊ฒฐํ•จ์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ๊ฒฐํ•จ์ด ์‹ค์ œ๋กœ ์•…์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๋น ๋ฅด๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฒฝํ•œ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ฝ”๋“œ ์ˆ˜์ค€ ๋ณด์•ˆ ์Šค์บ๋‹ ๋ฐ ์šด์˜ ์ทจ์•ฝ์  ๊ด€๋ฆฌ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Semgrep(Go์šฉ)

์…ˆ๊ทธ๋ ™ ๋Š” Go๋ฅผ ๋น„๋กฏํ•œ ์—ฌ๋Ÿฌ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ๋งค์šฐ ์œ ์—ฐํ•˜๊ณ  ํšจ์œจ์ ์ธ ์ •์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. grep๊ณผ ๊ฐ™์€ ๋„๊ตฌ์˜ ํŒจํ„ด ๋งค์นญ ๋‹จ์ˆœ์„ฑ๊ณผ ์ตœ์‹  ์ •์  ๋ถ„์„๊ธฐ์˜ ๊ตฌ์กฐ์  ์ดํ•ด๋ฅผ ๊ฒฐํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. Semgrep์€ ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(AST) ํŒŒ์‹ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹จ์ˆœํ•œ ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒจํ„ด์„ ํƒ์ง€ํ•˜๋Š” ์ •ํ™•ํ•œ ๊ทœ์น™์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

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

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

Go์—์„œ Semgrep์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ œํ•œ ์‚ฌํ•ญ ๋ฐ ์˜์—ญ

Semgrep์€ ๊ฐ•๋ ฅํ•˜๊ณ  ์ ์‘๋ ฅ์ด ๋›ฐ์–ด๋‚˜์ง€๋งŒ, ์•„ํ‚คํ…์ฒ˜๋Š” Go ํ”„๋กœ์ ํŠธ์—์„œ ์ •์  ๋ถ„์„์„ ์œ„ํ•ด ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒ€์—๊ฒŒ ์ค‘์š”ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค.

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

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

๊ทœ์น™์ด ๋„ˆ๋ฌด ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘์„ฑ๋˜๋ฉด ์˜คํƒ(false positive)์ด ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Semgrep์˜ ํšจ๊ณผ๋Š” ๊ทœ์น™์˜ ํ’ˆ์งˆ์— ํฌ๊ฒŒ ์ขŒ์šฐ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๊ณผ๋„ํ•œ ๋…ธ์ด์ฆˆ๋‚˜ ๋ณด์•ˆ ์ฝ”๋“œ์˜ ์ž˜๋ชป๋œ ๋ถ„๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ง€์ • ๊ทœ์น™ ์„ธํŠธ๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋™์‹œ์„ฑ ๋ถ„์„์€ Semgrep์ด ๋ถ€์กฑํ•œ ๋˜ ๋‹ค๋ฅธ ์˜์—ญ์ž…๋‹ˆ๋‹ค. ๊ณ ๋ฃจํ‹ด, ์ฑ„๋„ ํ†ต์‹  ๋˜๋Š” ๊ฒฝ์Ÿ ์กฐ๊ฑด์„ ๋ชจ๋ธ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋™์‹œ ์‹คํ–‰ ํŒจํ„ด์— ํฌ๊ฒŒ ์˜์กดํ•˜๋Š” Go ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด๋Ÿฌํ•œ ์ธก๋ฉด์„ ์ •ํ™•ํ•˜๊ฒŒ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๋”์šฑ ์‹ฌ์ธต์ ์ธ ์ •์  ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

Semgrep์€ ํŠน์ • ์ฝ”๋“œ ํŒจํ„ด์— ๋Œ€ํ•œ ๋น ๋ฅด๊ณ  ์ง‘์ค‘์ ์ธ ๊ฒ€์‚ฌ, ์•Œ๋ ค์ง„ ์œ„ํ—˜์˜ ์กฐ๊ธฐ ๊ฐ์ง€, ๊ทธ๋ฆฌ๊ณ  ํŒ€ ์ฝ”๋”ฉ ํ‘œ์ค€์˜ ์œ ์—ฐํ•œ ์ ์šฉ์„ ์›ํ•˜๋Š” ํŒ€์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋”์šฑ ๋ฐœ์ „๋œ ์ •์  ๋ถ„์„ ํ”Œ๋žซํผ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์ผ์ƒ์ ์ธ ๊ฐœ๋ฐœ ํ’ˆ์งˆ์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ๊ฐ€์‹œ์„ฑ๊ณผ ์ œ์–ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CodeQL(Go์šฉ)

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

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

Go ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ CodeQL์€ ์ฃผ์ž… ๊ฒฐํ•จ, ์•ˆ์ „ํ•˜์ง€ ์•Š์€ API ์‚ฌ์šฉ, ์ž…๋ ฅ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ˆ„๋ฝ ๋˜๋Š” ๋ฏผ๊ฐํ•œ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์„ ๊ฐ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CodeQL์˜ ๋ถ„์„์€ ํŒจํ‚ค์ง€, ํ•จ์ˆ˜ ๋ฐ ๋ชจ๋“ˆ์„ ํฌ๊ด„ํ•˜์—ฌ ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „์ฒด์—์„œ ๋ณ€์ˆ˜๊ฐ€ ์ „๋‹ฌ, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. GitHub Advanced Security์™€ ๊ธด๋ฐ€ํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜์–ด ์žˆ์œผ๋ฉฐ, CodeQL CLI๋ฅผ ํ†ตํ•œ ๋กœ์ปฌ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Go์—์„œ CodeQL์„ ์‚ฌ์šฉํ•  ๋•Œ์˜ ์ œํ•œ ์‚ฌํ•ญ ๋ฐ ๊ณ ๋ ค ์‚ฌํ•ญ

CodeQL์€ ์ •์  ๋ถ„์„์„ ์œ„ํ•œ ๊ฐ€์žฅ ์ง„๋ณด๋œ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ด์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๊ฐ€ Go ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•  ๋•Œ ๋ช…์‹ฌํ•ด์•ผ ํ•  ์ค‘์š”ํ•œ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

CodeQL์€ C, C++, Java, JavaScript ์ง€์›์— ๋น„ํ•ด Go ์–ธ์–ด์˜ ์–ธ์–ด ์ปค๋ฒ„๋ฆฌ์ง€ ๊นŠ์ด๊ฐ€ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. ํŠน์ • ๋™์‹œ์„ฑ ํŒจํ„ด์ด๋‚˜ ๋ฆฌํ”Œ๋ ‰์…˜ ๊ธฐ๋ฐ˜ ์—ฐ์‚ฐ๊ณผ ๊ฐ™์€ Go์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ์€ ์™„๋ฒฝํ•˜๊ฒŒ ๋ชจ๋ธ๋ง๋˜๊ฑฐ๋‚˜ ์ง€์›๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ Go ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ํŠน์ • ๋™์  ๋™์ž‘์ด ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„์„๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

CodeQL์˜ ์ •์  ๋ถ„์„์—๋Š” ๋Ÿฐํƒ€์ž„ ๋™์ž‘๋„ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋™์  ๋กœ๋”ฉ, ์‚ฌ์šฉ์ž ์ •์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋˜๋Š” ๋Ÿฐํƒ€์ž„์— ์‚ฝ์ž…๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ์„ฑ ๊ด€๋ จ ๋ฌธ์ œ๋‚˜ ์ทจ์•ฝ์ ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ„ํ—˜์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋™์  ๋ถ„์„ ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ๊ด€์ฐฐ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‰๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, CodeQL๊ณผ GitHub Advanced Security์˜ ํ†ตํ•ฉ์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”Œ๋žœ์—์„œ๋งŒ ์ œ๊ณต๋˜๋ฏ€๋กœ GitHub์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด์„ ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒ€์˜ ์ ‘๊ทผ์ด ์ œํ•œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์ „์ฒด CI/CD ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ์—๋Š” ์ถ”๊ฐ€์ ์ธ ๊ตฌ์„ฑ ์ž‘์—…์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CodeQL์€ ๋ณด์•ˆ ์ค‘์‹ฌ ํŒ€, ์—ฐ๊ตฌ ์ค‘์‹ฌ ๊ฐœ๋ฐœ ๊ทธ๋ฃน, ๊ทธ๋ฆฌ๊ณ  ์‹ฌ์ธต์ ์ธ ์ทจ์•ฝ์  ํƒ์ง€๊ฐ€ ์ค‘์š”ํ•œ ๋Œ€๊ทœ๋ชจ Go ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฆฐํ„ฐ(linter)๋ฅผ ๋ณด์™„ํ•˜์—ฌ, ๊ฐ„๊ณผํ•˜๊ธฐ ์‰ฌ์šด ๋ณต์žกํ•œ ๋…ผ๋ฆฌ ์˜ค๋ฅ˜์™€ ๋ณด์•ˆ ๊ฒฐํ•จ์„ ๋ชจ๋ธ๋ง, ํƒ์ง€ ๋ฐ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

SonarQube(Go ํ”Œ๋Ÿฌ๊ทธ์ธ ํฌํ•จ)

์†Œ๋‚˜ํ๋ธŒ ์ค‘์•™ ์ง‘์ค‘์‹ ๋Œ€์‹œ๋ณด๋“œ, ๊ธฐ์ˆ  ๋ถ€์ฑ„ ์ถ”์ , ์ง€์†์ ์ธ ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ์œผ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ •์  ๋ถ„์„ ๋ฐ ์ฝ”๋“œ ํ’ˆ์งˆ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. Go ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋ฉด SonarQube๋Š” Golang ํ”„๋กœ์ ํŠธ๊นŒ์ง€ ํ™•์žฅ๋˜์–ด ํŒ€์ด ํ†ตํ•ฉ๋œ ํ™˜๊ฒฝ์—์„œ ๋‹ค๋ฅธ ์ง€์›๋˜๋Š” ์–ธ์–ด์™€ ํ•จ๊ป˜ ์œ ์ง€ ๊ด€๋ฆฌ, ๋ณด์•ˆ ๋ฐ ์ฝ”๋“œ ์Šค๋ฉœ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Go ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ฒฝ์šฐ, SonarQube๋Š” ์ฝ”๋“œ ๋ณต์žก์„ฑ, ๋ฒ„๊ทธ ์œ„ํ—˜, ์Šคํƒ€์ผ ์œ„๋ฐ˜ ๋ฐ ๊ธฐ๋ณธ ๋ณด์•ˆ ํŒจํ„ด๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ž๋™ ์Šค์บ๋‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์›น ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ฝ”๋“œ ํ’ˆ์งˆ ์ถ”์„ธ, ํ•ซ์ŠคํŒŸ ๊ฐ์ง€, ์ค‘๋ณต ์ง€ํ‘œ ๋ฐ ๊ณผ๊ฑฐ ์ถ”์  ์ •๋ณด๋ฅผ ์‹œ๊ฐํ™”ํ•˜์—ฌ ํŒ€์ด ์ธก์ • ๊ฐ€๋Šฅํ•œ ๊ฐœ์„  ๋ชฉํ‘œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

SonarQube๋Š” Jenkins, GitHub Actions, GitLab CI ๋“ฑ ์—ฌ๋Ÿฌ ์ผ๋ฐ˜์ ์ธ CI/CD ์‹œ์Šคํ…œ๊ณผ๋„ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Go ํŒ€์€ ๋ฌธ์ œ ์‹ฌ๊ฐ๋„ ๋˜๋Š” ํ’ˆ์งˆ ์ž„๊ณ„๊ฐ’์— ๋”ฐ๋ผ ๊ฒŒ์ดํŒ…์„ ์ ์šฉํ•˜๊ณ  ์ฝ”๋“œ ๊ฒ€ํ†  ์ค‘์— ์‹ค์‹œ๊ฐ„ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ธŒ๋žœ์น˜ ์ˆ˜์ค€ ๋ถ„์„, ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ํ†ตํ•ฉ, ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ์ž๋™ํ™”๋ฅผ ์ง€์›ํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ํŒ€ ๋ฐ ๋‹ค์ค‘ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Go์šฉ SonarQube์˜ ์ œํ•œ ์‚ฌํ•ญ ๋ฐ ์ œ์•ฝ ์‚ฌํ•ญ

SonarQube๋Š” Go ์ฝ”๋“œ ํ’ˆ์งˆ์— ๋Œ€ํ•œ ๊ท€์ค‘ํ•œ ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ์–ธ์–ด์— ๋Œ€ํ•œ ์ง€์›๋ณด๋‹ค Go ๋ถ„์„ ๊ธฐ๋Šฅ์ด ๋œ ํฌ๊ด„์ ์ธ ์˜์—ญ์ด ๋ช‡ ๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.

Go ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํ˜„์žฌ Java๋‚˜ C#์— ๋น„ํ•ด ๊ธฐ๋ณธ์ ์ธ ์ •์  ๋ถ„์„๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ธ‰ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ถ„์„, ํ”„๋กœ์‹œ์ € ๊ฐ„ ์ œ์–ด ํ๋ฆ„ ์ถ”์ , ๋™์‹œ์„ฑ ์ธ์‹ ๋กœ์ง ๋ชจ๋ธ๋ง๊ณผ ๊ฐ™์€ ์‹ฌ์ธต์ ์ธ ์˜๋ฏธ๋ก ์  ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋” ๋ณต์žกํ•œ Go ์‹œ์Šคํ…œ์—์„œ ๋ณต์žกํ•œ ๋ฒ„๊ทธ๋‚˜ ์•„ํ‚คํ…์ฒ˜ ์œ„๋ฐ˜์„ ๊ฐ์ง€ํ•˜๋Š” ๋ฐ ์œ ์šฉ์„ฑ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

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

๊ณ ๋ฃจํ‹ด, ์ฑ„๋„, ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ด€์šฉ์  ์‚ฌ์šฉ๊ณผ ๊ฐ™์€ Go ์ „์šฉ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์ง€์›์€ ์ƒ๋Œ€์ ์œผ๋กœ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋žซํผ์€ ๋™์‹œ ๋™์ž‘์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ฑฐ๋‚˜ ๊ฒฝ์Ÿ ์กฐ๊ฑด, ๊ต์ฐฉ ์ƒํƒœ ๋˜๋Š” ๊ธฐํƒ€ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์œ„ํ—˜์„ ์‹๋ณ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” Go ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋ฉฐ, ๋”์šฑ ํŠนํ™”๋œ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™ ๊ฐœ๋ฐœ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ Semgrep์ด๋‚˜ CodeQL๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋งŒํผ ์œ ์—ฐํ•˜๊ฑฐ๋‚˜ ์ ‘๊ทผ์„ฑ์ด ๋†’์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ณ ๋„๋กœ ๋งž์ถคํ™”๋œ ํ’ˆ์งˆ ๊ธฐ์ค€์— ์˜์กดํ•˜๋Š” ํŒ€์€ ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํƒ์ง€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๊ทœ๋ชจ Go ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์„ฑ๋Šฅ๋„ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SonarQube์˜ ๋ถ„์„ ์—”์ง„์€ ์ƒ๋‹นํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋ชจํ•˜๋Š”๋ฐ, ํŠนํžˆ ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜๋‚˜ ์ €์žฅ์†Œ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์Šค์บ”ํ•  ๋•Œ ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ตœ์ ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์œผ๋ ค๋ฉด ์ธํ”„๋ผ ๊ณ„ํš ๋ฐ ํŠœ๋‹์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ณ -ํฌ๋ฆฌํ‹ฐํฌ

๊ณ -ํฌ๋ฆฌํ‹ฐํฌ Go-Critic์€ ๋‹ค๋ฅธ Go ๋ฆฐํ„ฐ(linter)๋ฅผ ๋ณด์™„ํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๊ตฌ๋ฌธ ๊ฒ€์‚ฌ๊ธฐ์—์„œ ์ข…์ข… ๊ฐ„๊ณผ๋˜๋Š” ๊ณ ๊ธ‰ ๋ฌธ์ œ๋ฅผ ํฌ์ฐฉํ•˜๋„๋ก ๊ฐœ๋ฐœ๋œ ์ •์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ์Šคํƒ€์ผ, ์ •ํ™•์„ฑ, ์„ฑ๋Šฅ ๋ฐ ๊ฐ€๋…์„ฑ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ํ’๋ถ€ํ•œ ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์–•์€ ์„œ์‹ ๊ทœ์น™์— ์ดˆ์ ์„ ๋งž์ถ˜ ๋„๊ตฌ์™€ ๋‹ฌ๋ฆฌ, Go-Critic์€ ์œ ํ˜• ์ •๋ณด์™€ ๊ตฌ์กฐ ๋ถ„์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ์‹ฌ๊ฐํ•œ ๋น„ํšจ์œจ์„ฑ๊ณผ ๊ทน๋‹จ์ ์ธ ๋…ผ๋ฆฌ์  ๊ฒฐํ•จ์„ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค.

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

Go-Critic์€ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋” ํฐ ์ •์  ๋ถ„์„ ํ”„๋ ˆ์ž„์›Œํฌ์— ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. golangci-lint๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ํŠน์ • ๊ฒ€์‚ฌ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฌธ์ œ ์˜์—ญ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ฐธ์กฐ์™€ ๊ถŒ์žฅ ์ˆ˜์ • ์‚ฌํ•ญ์ด ํฌํ•จ๋œ ์ž์„ธํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Go-Critic ์‚ฌ์šฉ ์‹œ ์ œํ•œ ์‚ฌํ•ญ ๋ฐ ๊ณ ๋ ค ์‚ฌํ•ญ

Go-Critic์€ ์ •์  ์ฝ”๋“œ ๊ฒ€ํ† ์— ๊ท€์ค‘ํ•œ ์‹ฌ๋„ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ๋ณธ ๋ถ„์„ ๋„๊ตฌ๋กœ ์ฑ„ํƒํ•˜๊ธฐ ์ „์— ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์ œํ•œ ์‚ฌํ•ญ์ด ์„ค๊ณ„์— ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

๋™์‹œ์„ฑ ๊ด€๋ จ ๋ฒ„๊ทธ ๋˜ํ•œ Go-Critic์˜ ์ ์šฉ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค. Go-Critic์€ ๊ณ ๋ฃจํ‹ด, ์ฑ„๋„ ๋˜๋Š” ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ชจ๋ธ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ ๋˜๋Š” ๊ณ ๋„๋กœ ๋™์‹œ์ ์ธ Go ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ํŒ€์€ ์ด๋Ÿฌํ•œ ์˜์—ญ์˜ ์ •ํ™•์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€์ ์ธ ๋ถ„์„ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

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

๋งˆ์ง€๋ง‰์œผ๋กœ, Go-Critic์€ ๋ณด์•ˆ ๋ถ„์„์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ฃผ์ž… ์œ„ํ—˜, ์˜ค์šฉ๋œ ์•”ํ˜ธํ™” ๋˜๋Š” ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ์ž…๋ ฅ๊ฐ’์„ ์‹๋ณ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณด์•ˆ์„ ์ค‘์‹œํ•˜๋Š” ํŒ€์€ Go-Critic์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ „์šฉ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. gosec or govulncheck ์ทจ์•ฝ์  ํƒ์ง€๋ฅผ ์œ„ํ•ด.

Go-Critic์€ ๊ธฐ๋ณธ์ ์ธ ๋ฆฐํŒ…์„ ๋„˜์–ด ๊ฐœ๋ฐœ ์ฃผ๊ธฐ ์ดˆ๊ธฐ์— ๋ฏธ๋ฌ˜ํ•œ ์ •ํ™•์„ฑ์ด๋‚˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํฌ์ฐฉํ•˜๊ณ ์ž ํ•˜๋Š” ํŒ€์— ๊ฐ€์žฅ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋” ๊ฐ„๋‹จํ•œ ๋ฆฐํ„ฐ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ํšจ๊ณผ์ ์ด๋ฉฐ, ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ํ•ด์„ํ•˜๊ณ  ์‹ฌ์ธต์ ์ธ ์ •์  ๋ถ„์„๊ธฐ์™€ ํ•จ๊ป˜ ํ™œ์šฉํ•œ๋‹ค๋ฉด ๋”์šฑ ์ง„๋ณด๋œ ๊ตฌ์กฐ์  ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Go์šฉ ์ข…์†์„ฑ ๊ฒ€์‚ฌ(OWASP)

OWASP ์ข…์†์„ฑ ๊ฒ€์‚ฌ OWASP ์žฌ๋‹จ์—์„œ ๊ฐœ๋ฐœํ•œ ์ž˜ ์•Œ๋ ค์ง„ ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ๋กœ, ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ์—์„œ ์•Œ๋ ค์ง„ ์ทจ์•ฝ์ ์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ๊ตญ๊ฐ€ ์ทจ์•ฝ์  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(NVD) ๋ฐ ๊ธฐํƒ€ ์ž๋ฌธ ์ž๋ฃŒ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ์ ํŠธ์˜ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํŒจํ‚ค์ง€์—์„œ ๊ณต๊ฐœ์ ์œผ๋กœ ์•Œ๋ ค์ง„ ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ฒ„์ „์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Dependency-Check๋Š” Java ์ƒํƒœ๊ณ„์—์„œ ์‹œ์ž‘๋˜์—ˆ์ง€๋งŒ, Golang์— ๋Œ€ํ•œ ์ œํ•œ์ ์ธ ์ง€์›์„ ํฌํ•จํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋„๋ก ๋ฐœ์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. Go ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. go.mod go.sum ์ทจ์•ฝํ•œ ๋ชจ๋“ˆ ๋ฒ„์ „์„ ๊ฐ์ง€ํ•˜๊ณ  ๊ด€๋ จ CVE, ์‹ฌ๊ฐ๋„ ์ ์ˆ˜, ์ˆ˜์ • ์กฐ์–ธ์ด ํฌํ•จ๋œ ๋ณด์•ˆ ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

์ด๋ฏธ ์Šคํƒ ์ „๋ฐ˜์— ๊ฑธ์ณ Dependency-Check๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํŒ€์€ Go ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์–ธ์–ด์— ๊ฑธ์ณ ํ†ตํ•ฉ๋œ ์ทจ์•ฝ์„ฑ ๊ด€๋ฆฌ ๋ฐฉ์‹์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ ์„œ๋Š” HTML, JSON, XML ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋˜์–ด ๋‹ค์–‘ํ•œ CI/CD ๋ฐ ๋ณด์•ˆ ๋Œ€์‹œ๋ณด๋“œ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

Go ํ”„๋กœ์ ํŠธ์—์„œ ์ข…์†์„ฑ ํ™•์ธ์˜ ํ•œ๊ณ„

Dependency-Check๋Š” ์ƒํƒœ๊ณ„ ์ˆ˜์ค€์˜ ์ทจ์•ฝ์„ฑ ๊ฐ์‚ฌ์— ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, Go ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์—์„œ์˜ ๊ธฐ๋Šฅ์€ JVM ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

Go ์ง€์›์€ ์ฃผ๋กœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์ด๋ฉฐ ์˜๋ฏธ ์ธ์‹์ด๋‚˜ ํ˜ธ์ถœ ๊ทธ๋ž˜ํ”„ ๋ถ„์„์€ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ทจ์•ฝํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์ฝ”๋“œ์—์„œ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š”์ง€ ๋˜๋Š” ์ทจ์•ฝํ•œ ๊ธฐ๋Šฅ์ด ํ˜ธ์ถœ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ, ์ด ๋„๊ตฌ๋Š” ๊ธฐ์ˆ ์ ์œผ๋กœ ์กด์žฌํ•˜์ง€๋งŒ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ์ข…์†์„ฑ์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NVD์™€ ๊ฐ™์€ ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํฌ๊ฒŒ ์˜์กดํ•˜๋Š” ํƒ“์— ์‹ค์‹œ๊ฐ„ ๊ณต๊ฐœ ์ผ์ •๋ณด๋‹ค ๋Šฆ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ƒˆ๋กœ ๋ณด๊ณ ๋œ ์ทจ์•ฝ์ ์ด๋‚˜ ์•„์ง ์ฒ˜๋ฆฌ ๋ฐ ๋ชฉ๋กํ™”๋˜์ง€ ์•Š์€ ๋ณด์•ˆ ๊ถŒ๊ณ ๋ฅผ ํƒ์ง€ํ•˜๋Š” ๋Šฅ๋ ฅ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

Dependency-Check๋Š” ์†Œ์Šค ์ฝ”๋“œ์—์„œ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋กœ์ง, ๊ตฌ์„ฑ ๋ฌธ์ œ ๋˜๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํŒจํ„ด์„ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž…๋ ฅ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฐฉ์‹, ์ธ์ฆ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ๋˜๋Š” ์•”ํ˜ธํ™” API์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ ์—ฌ๋ถ€๋„ ํ‰๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜์—ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋„๊ตฌ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. gosec or Semgrep.

Go์—๋Š” ๋ชจ๋“ˆ ํ™•์ธ์ด๋‚˜ replace ์ง€์‹œ์–ด์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ œ๊ณต ์ดํ•ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๊ฐ„์ ‘ ์ข…์†์„ฑ์ด๋‚˜ ์‚ฌ์šฉ์ž ์ง€์ • ๋ชจ๋“ˆ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์ข…์†์„ฑ ํŠธ๋ฆฌ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋„๊ตฌ๊ฐ€ ๋ชจ๋“ˆ ๋ฒ„์ „์„ ์ž˜๋ชป ํ•ด์„ํ•˜๊ฑฐ๋‚˜ ๊ถŒ๊ณ  ์‚ฌํ•ญ์„ ์ œ๋Œ€๋กœ ์ผ์น˜์‹œํ‚ค์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, Dependency-Check๋ฅผ Go ์›Œํฌํ”Œ๋กœ์— ํ†ตํ•ฉํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ์Šคํฌ๋ฆฝํŒ…์ด๋‚˜ ๋ž˜ํผ ๊ตฌ์„ฑ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํˆด ์ง€์›์ด Java๋‚˜ .NET๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์–ธ์–ด์— ๋Œ€ํ•œ ์ง€์›๋งŒํผ ์„ฑ์ˆ™ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

OWASP ์ข…์†์„ฑ ๊ฒ€์‚ฌ๋Š” Go ํ”„๋กœ์ ํŠธ์—์„œ ์•Œ๋ ค์ง„ ์ทจ์•ฝํ•œ ์ข…์†์„ฑ์„ ํƒ์ง€ํ•˜๋Š” ๋ฐ ์—ฌ์ „ํžˆ ๊ท€์ค‘ํ•œ ์ž์‚ฐ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ์‚ฌ์šฉ ๋ถ„์„, ์˜๋ฏธ ๋ถ„์„, ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๊ฒ€์‚ฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. ์ทจ์•ฝ์„ฑ ๊ด€๋ฆฌ ์›Œํฌํ”Œ๋กœ์—์„œ OWASP ์ข…์†์„ฑ ๊ฒ€์‚ฌ๋Š” ์ค‘์š”ํ•œ ๊ธฐ์ค€ ์Šค์บ๋„ˆ ์—ญํ• ์„ ํ•˜์ง€๋งŒ, ์œ ์ผํ•œ ๋ฐฉ์–ด ์ˆ˜๋‹จ์ด ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๊ณ ์‚ฌ์ดํด๋กœ

๊ณ ์‚ฌ์ดํด๋กœ ๋Š” ๋‹ค์Œ์„ ๊ณ„์‚ฐํ•˜๋Š” ์ „๋ฌธํ™”๋œ ์ •์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ˆœํ™˜ ๋ณต์žก๋„ Go ์ฝ”๋“œ์˜ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ. ์ˆœํ™˜ ๋ณต์žก๋„๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ๊ฒฝ๋กœ์˜ ์ˆ˜๋ฅผ ์ธก์ •ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค. ๋ณต์žก๋„ ์ ์ˆ˜๊ฐ€ ๋†’์œผ๋ฉด ํ•จ์ˆ˜๋ฅผ ์ดํ•ดํ•˜๊ฑฐ๋‚˜ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ ํšจ๊ณผ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

GoCyclo๋Š” ๊ฐ ํ•จ์ˆ˜์˜ ์ œ์–ด ํ๋ฆ„์„ ๋ถ„์„ํ•˜์—ฌ ๋„ˆ๋ฌด ๋ณต์žกํ•˜์—ฌ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€ ๊ด€๋ฆฌ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋ฆฌํŒฉํ† ๋งํ•ด์•ผ ํ•  ์ฝ”๋“œ๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์ˆซ์ž ์ ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๋ณต์žก๋„ ์ž„๊ณ„๊ฐ’์„ ์ดˆ๊ณผํ•˜๋Š” ํ•จ์ˆ˜์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GoCyclo๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  CI ์‹œ์Šคํ…œ, ํ”„๋ฆฌ์ปค๋ฐ‹ ํ›„ํฌ, ๊ฒ€ํ†  ์ž๋™ํ™”์™€ ์ž˜ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๊ฑฐ๋‚˜ ์œ„ํ—˜ํ•ด์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ทœ๋ชจ ํ’ˆ์งˆ ๋ณด์ฆ ํŒŒ์ดํ”„๋ผ์ธ์— ์ข…์ข… ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊น”๋”ํ•œ ์ฝ”๋“œ์™€ ์ง€์† ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ถ”๊ตฌํ•˜๋Š” ํŒ€์—๊ฒŒ GoCyclo๋Š” ๋…ผ๋ฆฌ์  ๋ณต์žก์„ฑ์„ ๊ฐ๊ด€์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋ Œ์ฆˆ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

GoCyclo์˜ ํ•œ๊ณ„์™€ ๊ณ ๋ ค ์‚ฌํ•ญ

GoCyclo๋Š” ์œ ์šฉ์„ฑ์ด ๋†’์ง€๋งŒ, ์ข์€ ๋ฒ”์œ„์˜ ์ดˆ์ ๊ณผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ œ์•ฝ์ด ์žˆ์–ด ๋” ๊ด‘๋ฒ”์œ„ํ•œ ํˆด์ฒด์ธ์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

GoCyclo๋Š” ๋ฒ„๊ทธ, ์ทจ์•ฝ์  ๋˜๋Š” ๋ณด์•ˆ ์œ„ํ—˜์„ ๊ฐ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ๋‚ด ์ œ์–ด ํ๋ฆ„์˜ ๊ตฌ์กฐ์  ๋ณต์žก์„ฑ์„ ์ธก์ •ํ•˜๋Š” ๋ฐ๋งŒ ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜๋ฏธ์  ์˜ค๋ฅ˜, ์ž˜๋ชป๋œ ๊ด€ํ–‰ ๋˜๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ฝ”๋”ฉ ํŒจํ„ด์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. staticcheck or gosec ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ด ๋„๊ตฌ๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ํ•จ์ˆ˜์™€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š”์ง€๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ข…์†์„ฑ์ด๋‚˜ ๊ฐ„์ ‘์ ์ธ ๋…ผ๋ฆฌ ์ฒด์ธ์„ ํ†ตํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ณต์žก์„ฑ๋„ ํ‰๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‘ ํ•จ์ˆ˜์˜ ๊ฐœ๋ณ„ ์ ์ˆ˜๊ฐ€ ๊ฐ๊ฐ ๋‚ฎ๋”๋ผ๋„ ๊ฒฐํ•ฉ ์‹œ ์ถ”๋ก ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, GoCyclo๋Š” ์ด๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

GoCyclo๋Š” ๋†’์€ ๋ณต์žก์„ฑ์ด ์ •๋‹นํ™”๋˜๋Š”์ง€์— ๋Œ€ํ•œ ๋งฅ๋ฝ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ ๊ตฌ๋ฌธ ๋ถ„์„์ด๋‚˜ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™ ํ‰๊ฐ€์™€ ๊ฐ™์€ ํŠน์ • ๊ธฐ๋Šฅ์€ ๋ณธ๋ž˜ ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GoCyclo๋Š” ๋ชจ๋“  ์‚ฌ๋ก€๋ฅผ ๋™์ผํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ˆ˜ํ•œ ์ƒํ™ฉ์—์„œ๋Š” ๊ฑฐ์ง“ ๊ธ์ •(false positive)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐํ™”๋‚˜ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ์€ ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. GoCyclo๋Š” ๋ณต์žก์„ฑ ์ ์ˆ˜ ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•˜์ง€๋งŒ, ์ด๋ฅผ ์‹œ์Šคํ…œ ์ „์ฒด ์ง€ํ‘œ๋‚˜ ๊ธฐ์ˆ  ๋ถ€์ฑ„ ์ง€ํ‘œ์™€ ์—ฐ๊ฒฐํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ง์ ‘ ํ•ด์„ํ•˜๊ฑฐ๋‚˜ ๋Œ€์‹œ๋ณด๋“œ ๋˜๋Š” ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ์™€ ํ†ตํ•ฉํ•˜์—ฌ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์–ป์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ž๋™ ๋ฆฌํŒฉํ† ๋ง ์ œ์•ˆ๋„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณต์žก์„ฑ์„ ํ‘œ์‹œํ•˜์ง€๋งŒ, ๋ณต์žก์„ฑ์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์Šค์Šค๋กœ ํŒ๋‹จํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๊ณ  ๋ช…ํ™•์„ฑ์„ ๋†’์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

GoCyclo๋Š” ๊ธฐ๋Šฅ ์ˆ˜์ค€์˜ ๋‹จ์ˆœ์„ฑ์„ ๊ฐ•ํ™”ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๊ณ  ๊น”๋”ํ•œ Go ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋Š” ํŒ€์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ถ„์„๊ธฐ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์ˆ ์  ๋ฌธ์ œ๋กœ ์ด์–ด์ง€๊ธฐ ์ „์— ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๊ฐ•์กฐํ•˜์—ฌ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๊ณ ๋ฉ”ํƒ€๋ฆฐํ„ฐ

๊ณ ๋ฉ”ํƒ€๋ฆฐํ„ฐ ์—ฌ๋Ÿฌ Go ๋ฆฐํ„ฐ๋ฅผ ๋‹จ์ผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ตœ์ดˆ์˜ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์˜€์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๋ชฉ์ ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ ๋ฆฐํ„ฐ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹  ์—ฌ๋Ÿฌ ๋ฆฐํ„ฐ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์ •์  ์ฝ”๋“œ ๋ถ„์„์„ ๊ฐ„์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. GoMetaLinter๋Š” ๋‹ค์Œ์„ ํฌํ•จํ•œ ์ˆ˜์‹ญ ๊ฐœ์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ ํ•ต์‹ฌ ๋„๊ตฌ๋ฅผ ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค. golint, vet, staticcheck, ineffassign์˜ˆ์‚ฐ ๋ฐ errcheck, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์‚ฌ์ด์—์„œ.

ํ•œ๋™์•ˆ ๋‹จ์ผ ๋ช…๋ น์œผ๋กœ ๋น ๋ฅด๊ณ  ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๋ฆฐํŒ… ๋ฒ”์œ„๋ฅผ ์›ํ•˜๋Š” ํŒ€์—๊ฒŒ ํ‘œ์ค€ ์„ ํƒ์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ๋ฆฐํ„ฐ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”, ์‹ฌ๊ฐ๋„๋ณ„ ์ถœ๋ ฅ ํ•„ํ„ฐ๋ง, ์‹œ๊ฐ„ ์ œํ•œ ์‚ฌ์šฉ์ž ์ง€์ •, ๊ธฐ๊ณ„ ํŒ๋… ๊ฐ€๋Šฅํ•œ ์ถœ๋ ฅ ์ƒ์„ฑ ๋“ฑ ์œ ์šฉํ•œ ์˜ต์…˜์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. GoMetaLinter๋Š” ํŠนํžˆ Go ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ Go ํ”„๋กœ์ ํŠธ๊ฐ€ CI ํŒŒ์ดํ”„๋ผ์ธ์— ์ •์  ๋ถ„์„์„ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ์‹์„ ํ˜•์„ฑํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋” ์ด์ƒ ์ ๊ทน์ ์œผ๋กœ ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€๋Š” ์•Š์ง€๋งŒ GoMetaLinter์˜ ์œ ์‚ฐ์€ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ฐฐ์šฐ๊ณ  ์ œํ•œ ์‚ฌํ•ญ์„ ๊ฐœ์„ ํ•œ ๋„๊ตฌ์—์„œ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. golangci-lint.

GoMetaLinter์˜ ํ•œ๊ณ„์™€ ํ๊ธฐ

GoMetaLinter๋Š” ์˜ํ–ฅ๋ ฅ์ด ์žˆ์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋„์ž…ํ•˜๊ฑฐ๋‚˜ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋„๊ตฌ๋Š” ๊ณต์‹์ ์œผ๋กœ ์ง€์› ์ค‘๋‹จ๋˜์—ˆ์œผ๋ฉฐ ์ˆ˜๋…„ ๋™์•ˆ ํ™œ๋ฐœํ•œ ์œ ์ง€ ๊ด€๋ฆฌ๋‚˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ตœ์‹  ๋ฒ„์ „์˜ Go, ์ตœ์‹  ๋ฆฐํ„ฐ ๋˜๋Š” ์—…๋ฐ์ดํŠธ๋œ ์–ธ์–ด ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์˜ค๋ฅ˜, ๋ถ€์ •ํ™•ํ•œ ์ง„๋‹จ ๋˜๋Š” ํ†ตํ•ฉ ์‹คํŒจ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ์€ ์•Œ๋ ค์ง„ ๋‹จ์ ์ž…๋‹ˆ๋‹ค. GoMetaLinter๋Š” ๊ฐ ๋ฆฐํ„ฐ๋ฅผ ๋ณ„๋„์˜ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰ํ•˜๋ฉฐ, ํšจ์œจ์ ์ธ ์กฐ์ •์ด๋‚˜ ๊ณต์œ ๋œ ์ปจํ…์ŠคํŠธ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ๋ถ„์„ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง‘๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ตœ์‹  ๋„๊ตฌ๋Š” golangci-lint ๋ฆฐํ„ฐ๋ฅผ ์ง์ ‘ ๋‚ด์žฅํ•˜๊ณ  ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

Go ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์›์€ ์—†์Šต๋‹ˆ๋‹ค. Go ์ƒํƒœ๊ณ„๊ฐ€ GOPATH ๋ชจ๋“ˆ์— ๋Œ€ํ•œ GoMetaLinter๋Š” ์ƒˆ๋กœ์šด ์›Œํฌํ”Œ๋กœ๋ฅผ ์ง€์›ํ•˜๋„๋ก ๋ฐœ์ „ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ๊ฒฝ๋กœ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์กฐ์ •ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋™์ž‘์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

GoMetaLinter๋Š” ์‹ฌ์ธต์ ์ธ ์˜๋ฏธ๋ก ์  ๋˜๋Š” ๊ตฌ์กฐ์  ๋ถ„์„ ๊ธฐ๋Šฅ๋„ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ž˜ํผ(wrapper) ์—ญํ• ์„ ํ•˜๋ฉฐ, ์ถœ๋ ฅ ๊ฒฐ๊ณผ ์ง‘๊ณ„ ์™ธ์—๋Š” ์ถ”๊ฐ€์ ์ธ ์ง€๋Šฅ์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ œ์–ด ํ๋ฆ„ ๋ถ„์„, ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ถ”์  ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜ ๊ฒ€์ฆ์ด ํ•„์š”ํ•œ ํŒ€์—๊ฒŒ๋Š” ๋”์šฑ ๊ณ ๊ธ‰ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ •์˜๋Š” ์ง€์›ํ•˜๋Š” ๊ฐœ๋ณ„ ๋ฆฐํ„ฐ์— ๋”ฐ๋ผ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ํ•  ๋„๊ตฌ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ์ด๋‚˜ ์ง‘๊ณ„๋œ ์ถœ๋ ฅ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๊ฒ€์‚ฌ ์ž‘์„ฑ ์ง€์›์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ GoMetaLinter๋Š” ์—ญ์‚ฌ์ ์ธ ๋„๊ตฌ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํ˜„๋Œ€ Go ํŒ€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋Œ€์•ˆ์œผ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. golangci-lint๋” ๋น ๋ฅธ ์„ฑ๋Šฅ, ๋” ๊ด‘๋ฒ”์œ„ํ•œ ํ˜ธํ™˜์„ฑ, ๋” ํ™œ๋ฐœํ•œ ๊ฐœ๋ฐœ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ณ ์„น

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

GoSec์€ ์ผ๋ฐ˜ ํ…์ŠคํŠธ, JSON, SARIF ๋“ฑ ๋‹ค์–‘ํ•œ ์ถœ๋ ฅ ํ˜•์‹์„ ์ง€์›ํ•˜์—ฌ CI/CD ์›Œํฌํ”Œ๋กœ ๋ฐ ๋ณด์•ˆ ๋Œ€์‹œ๋ณด๋“œ์— ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ทœ์น™ ์‹ฌ๊ฐ๋„๋ณ„ ํ•„ํ„ฐ๋ง, ํŠน์ • ๋””๋ ‰ํ„ฐ๋ฆฌ ๋˜๋Š” ํŒจํ‚ค์ง€ ์ œ์™ธ, ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๊ทœ์น™ ํฌํ•จ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํŒ€์€ ์œ„ํ—˜ ๋ฐ ๋…ธ์ด์ฆˆ ํ—ˆ์šฉ ๋ฒ”์œ„์— ๋งž์ถฐ ๊ฒฐ๊ณผ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

GoSec์˜ ํ•œ๊ณ„์™€ ์ œ์•ฝ

GoSec์€ ํ‘œ๋ฉด ์ˆ˜์ค€์˜ ์ทจ์•ฝ์ ์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•œ ๋„๊ตฌ์ด์ง€๋งŒ, ๋” ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์™„๋ฒฝํ•œ ๋ณด์•ˆ ์†”๋ฃจ์…˜์œผ๋กœ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๋Š” ๋ช‡ ๊ฐ€์ง€ ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

GoSec์€ ๋™์‹œ์„ฑ์„ ์ธ์‹ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฝ์Ÿ ์กฐ๊ฑด, ๋ถ€์ ์ ˆํ•œ ๊ณ ๋ฃจํ‹ด ์‚ฌ์šฉ, ๋˜๋Š” ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ๋™์ž‘์ด๋‚˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ๊ณต์œ  ๋ฆฌ์†Œ์Šค ์ถฉ๋Œ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

์ฝ”๋“œ๊ฐ€ ์•Œ๋ ค์ง„ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜์ง€๋งŒ ์ปจํ…์ŠคํŠธ ๋˜๋Š” ๊ฒ€์ฆ ๋กœ์ง์œผ๋กœ ๋ณดํ˜ธ๋˜๋Š” ์ƒํ™ฉ์—์„œ ์˜คํƒ(false positive)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ํŠนํžˆ ๋ณต์žกํ•œ ๊ตฌ๋ฌธ์ด ํ”ํžˆ ์‚ฌ์šฉ๋˜๋Š” ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์‹ค์ œ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ์•Œ๋ฆผ์„ ๊ฒ€ํ† ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ—ˆ๋น„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GoSec์€ Go ํ”„๋กœ์ ํŠธ์— ์œ ์šฉํ•œ ์ดˆ๊ธฐ ๋‹จ๊ณ„ ์Šค์บ๋„ˆ๋กœ ์—ฌ์ „ํžˆ ํ™œ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์œ„ํ—˜์— ๋Œ€ํ•œ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๊ณ  ์•ˆ์ „ํ•œ ์ฝ”๋”ฉ ๊ด€ํ–‰์„ ๊ฐ•ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทœ์ œ๋œ ํ™˜๊ฒฝ์—์„œ ์šด์˜๋˜๊ฑฐ๋‚˜ ์ค‘์š”ํ•œ ๋ณด์•ˆ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ฐ€์ง„ ํŒ€์€ ์ „์ฒด ๋ฒ”์œ„๋ฅผ ์ปค๋ฒ„ํ•˜๊ธฐ ์œ„ํ•ด ์‹ฌ์ธต์ ์ธ ์ •์  ๋ถ„์„๊ธฐ ๋ฐ ๋Ÿฐํƒ€์ž„ ๋ณด์•ˆ ๋„๊ตฌ์™€ ํ•จ๊ป˜ GoSec์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ๋“œ์ฝ”๋“œ

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

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

๋ฐ๋“œ์ฝ”๋“œ๋Š” ํšจ๊ณผ๋‚˜ ์šฉ๋„๊ฐ€ ์—†๋Š” ์ฝ”๋“œ์—๋งŒ ์ง‘์ค‘ํ•จ์œผ๋กœ์จ ํŒ€์ด ์ข…์ข… ๊ฐ„๊ณผ๋˜๋Š” ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค. ๋ฐ๋“œ์ฝ”๋“œ๋Š” ๋”์šฑ ๊น”๋”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค, ๋”์šฑ ์—„๊ฒฉํ•œ API, ๊ทธ๋ฆฌ๊ณ  ๋”์šฑ ์˜๋„์ ์ธ ์ฝ”๋“œ ๊ตฌ์„ฑ์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ๋“œ์ฝ”๋“œ์˜ ํ•œ๊ณ„์™€ ์ œ์•ฝ

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

์ด ๋„๊ตฌ๋Š” ์ฝ”๋“œ๋ฅผ ์ •์ ์œผ๋กœ ๋ถ„์„ํ•˜์ง€๋งŒ ๋Ÿฐํƒ€์ž„ ๋™์ž‘์€ ๊ณ ๋ คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฆฌํ”Œ๋ ‰์…˜, ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜ ๋””์ŠคํŒจ์น˜๋ฅผ โ€‹โ€‹ํ†ตํ•œ ์‹๋ณ„์ž์˜ ๋™์  ์‚ฌ์šฉ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์ •์  ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ์˜คํƒ์ง€(false positive)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

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

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

๊ณ ๋ฆฐํŠธ

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

์ด ๋„๊ตฌ๋Š” ์„ค์น˜์™€ ์‹คํ–‰์ด ๊ฐ„ํŽธํ•˜๋ฉฐ, ๋ฌธ์„œ ์ฃผ์„ ๋ˆ„๋ฝ, ๋ถ€์ ์ ˆํ•œ ์ด๋ฆ„ ํ˜•์‹, ํŒจํ‚ค์ง€ ๋‚ด๋ณด๋‚ด๊ธฐ ์‹œ ๋Š๊น€ ํ˜„์ƒ, ๋ถˆํ•„์š”ํ•œ ๊ด„ํ˜ธ ์‚ฌ์šฉ ๋“ฑ์— ๋Œ€ํ•œ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. GoLint๋Š” ์ „ํ†ต์ ์œผ๋กœ ์˜คํ”ˆ ์†Œ์Šค ๋ฐ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Go ํ”„๋กœ์ ํŠธ์—์„œ ํ†ตํ•ฉ๋œ ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์žฅ๋ คํ•˜๊ณ  ์ฝ”๋“œ๋ฒ ์ด์Šค ํƒ์ƒ‰ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์–ด ์™”์Šต๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๋‹จ๊ณ„ ํ”„๋กœ์ ํŠธ, ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž ์˜จ๋ณด๋”ฉ, ํŒ€ ๊ฐ„ ์ฝ”๋“œ ์ผ๊ด€์„ฑ ๊ฐ•ํ™”์— ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. ๋น ๋ฅธ ์„ฑ๋Šฅ๊ณผ ์ง๊ด€์ ์ธ ์ถœ๋ ฅ ๋•๋ถ„์— ๊ฐœ๋ฐœ ํ™˜๊ฒฝ, ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ํ™•์ธ, ํŽธ์ง‘๊ธฐ ํ†ตํ•ฉ ๋“ฑ์—์„œ ์ผ์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

GoLint์˜ ํ•œ๊ณ„์™€ ๋‹จ์ 

GoLint๋Š” ๋„๋ฆฌ ์•Œ๋ ค์ ธ ์žˆ์ง€๋งŒ ๋” ์ด์ƒ ํ™œ๋ฐœํ•˜๊ฒŒ ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ตœ์‹  Go ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์—์„œ์˜ ์œ ์šฉ์„ฑ์„ ์ œํ•œํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

GoLint๋Š” ์Šคํƒ€์ผ ์ค‘์‹ฌ์ ์ž…๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜, ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ ๋˜๋Š” ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ๊ฐ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ์˜ ์ •ํ™•์„ฑ, ํšจ์œจ์„ฑ ๋˜๋Š” ์•ˆ์ „์„ฑ์„ ํ‰๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜๋ฏธ ์žˆ๋Š” ์ฝ”๋“œ ์•ˆ์ „์„ฑ ๋˜๋Š” ๋™์ž‘ ๊ฒ€์ฆ์„ ์œ„ํ•ด์„œ๋Š” ์‹ฌ์ธต์ ์ธ ์ •์  ๋ถ„์„ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

GoLint์˜ ๊ทœ์น™ ์„ธํŠธ๋Š” ์ •์ ์ด๊ณ  ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. GoLint๋Š” ๋” ์ด์ƒ ํ™œ๋ฐœํ•˜๊ฒŒ ๊ฐœ๋ฐœ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์–ด์™€ ํ•จ๊ป˜ ๋ฐœ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์‹  Go ๋ฒ„์ „์—์„œ ๋ฐœ์ƒํ•œ ์Šคํƒ€์ผ ๋ฌธ์ œ๋ฅผ ๋†“์น˜๊ฑฐ๋‚˜, ํ˜„์žฌ ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๊ด€์šฉ์ ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ๊ด€ํ–‰์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GoLint๋Š” ์ข…์ข… ์ฃผ๊ด€์ ์ด๊ณ  ๋ฐ˜๋“œ์‹œ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹Œ ๊ฒฝ๊ณ ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ํŒ€์€ ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ ๊ฐ€ ๋„์›€์ด ๋˜๊ธฐ๋ณด๋‹ค๋Š” ์˜คํžˆ๋ ค ๋ฐฉํ•ด๊ฐ€ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ, ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ๋Š” ์‚ฌ์†Œํ•œ ์Šคํƒ€์ผ ์œ„๋ฐ˜์ด ๋งŽ์•„๋„ ๊ธฐ๋Šฅ์ด๋‚˜ ๋ช…ํ™•์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Go ๋ชจ๋“ˆ๊ณผ ๊ฐ•๋ ฅํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์‹ฌ์ธต์ ์ธ ์ข…์†์„ฑ ํ•ด๊ฒฐ์ด๋‚˜ ๋ชจ๋“ˆ ๊ฒฝ๊ณ„์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋‹จ์ผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋˜๋Š” ๋‹ค์ค‘ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ์—์„œ์˜ ํšจ์œจ์„ฑ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ์ตœ์‹  Go ํ”„๋กœ์ ํŠธ์—์„œ GoLint๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณด๋‹ค ์ ๊ทน์ ์œผ๋กœ ๊ฐœ๋ฐœ๋œ ๋„๊ตฌ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. revive๋” ๋‚˜์€ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ์„ฑ, ์„ฑ๋Šฅ, ๊ทœ์น™ ๋ช…ํ™•์„ฑ์„ ํ†ตํ•ด ์œ ์‚ฌํ•œ ์Šคํƒ€์ผ ์ ์šฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

๊ณ ์ฝœ๊ทธ๋ž˜ํ”„

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

์ด ๋„๊ตฌ๋Š” ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ ๊ฐ„์˜ ํ˜ธ์ถœ ๊ด€๊ณ„๋ฅผ ๋ถ„์„ํ•˜๊ณ , DOT์™€ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„ ํ˜•์‹์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉฐ, Graphviz์™€ ๊ฐ™์€ ์‹œ๊ฐํ™” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ GoCallGraph๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํŠน์ • ๋ชจ๋“ˆ์—์„œ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š”์ง€, ์–ด๋–ค ๊ฒฝ๋กœ๊ฐ€ ์ค‘์š”ํ•œ ํ•จ์ˆ˜๋กœ ์—ฐ๊ฒฐ๋˜๋Š”์ง€, ์žฌ๊ท€ ์ข…์†์„ฑ์ด ์–ด๋–ป๊ฒŒ ํ˜•์„ฑ๋˜๋Š”์ง€ ๋“ฑ์˜ ์งˆ๋ฌธ์— ๋‹ตํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

GoCallGraph๋Š” ๊ฐ์‚ฌ, ์˜จ๋ณด๋”ฉ ์„ธ์…˜ ๋ฐ ๋ฆฌํŒฉํ† ๋ง ๊ณ„ํš์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋งŒ์œผ๋กœ ๋Ÿฐํƒ€์ž„ ๋™์ž‘์„ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฑฐ๋‚˜ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

GoCallGraph์˜ ์ œํ•œ ์‚ฌํ•ญ ๋ฐ ๊ณ ๋ ค ์‚ฌํ•ญ

GoCallGraph๋Š” ๊ท€์ค‘ํ•œ ์•„ํ‚คํ…์ฒ˜ ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ํ˜„๋Œ€์ ์ธ ์›Œํฌํ”Œ๋กœ์— ์ ์šฉํ•˜๋Š” ๋ฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋™์‹œ์„ฑ ์ง€์›์ด ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. Go ๋ฃจํ‹ด๊ณผ ์ฑ„๋„ ๊ธฐ๋ฐ˜ ์‹คํ–‰ ๊ฒฝ๋กœ๋Š” ํ˜ธ์ถœ ๊ทธ๋ž˜ํ”„์— ์บก์ฒ˜๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ด ๋„๊ตฌ๋Š” ๋™์‹œ ๋˜๋Š” ๋น„๋™๊ธฐ ์‹คํ–‰ ํ๋ฆ„์„ ํ‘œํ˜„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณ ๋„๋กœ ๋ณ‘๋ ฌํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ, ์ด๋Š” ์‹œ์Šคํ…œ์˜ ์‹ค์ œ ๋™์ž‘ ๋ฐฉ์‹์„ ์ œ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GoCallGraph๋Š” ๋งค์šฐ ํฐ ์ฝ”๋“œ๋ฒ ์ด์Šค์—๋Š” ํ™•์žฅ์„ฑ์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ˆ˜์ฒœ ๊ฐœ์˜ ํ•จ์ˆ˜์™€ ๋งŽ์€ ์ƒํ˜ธ ์ข…์†์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ถœ๋ ฅ์ด ๋ณต์žกํ•ด์ง€๊ฑฐ๋‚˜ ํƒ์ƒ‰ํ•˜๊ธฐ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„ํ„ฐ๋ง์ด๋‚˜ ๊ทธ๋ฃนํ™” ๊ธฐ๋Šฅ์ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉด ์ƒ๋‹นํ•œ ์ˆ˜๋™ ํ›„์ฒ˜๋ฆฌ ์—†์ด๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ํ•ด์„ํ•˜๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

GoCallGraph๋Š” ์ค‘์†Œ ๊ทœ๋ชจ Go ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„ ๋ฐ ํ•จ์ˆ˜ ์ˆ˜์ค€ ์ข…์†์„ฑ ํŒŒ์•…์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ์ธต์ ์ธ ์˜๋ฏธ์  ํ†ต์ฐฐ๋ ฅ, ๋Ÿฐํƒ€์ž„ ํ”„๋กœํŒŒ์ผ๋ง ๋˜๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•ด์„œ๋Š” ๊ณ ๊ธ‰ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ํผ์ฆˆ

๊ณ ํผ์ฆˆ Go๋ฅผ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ๊ฐœ๋ฐœ๋œ ๊ฐ•๋ ฅํ•œ ํผ์ฆˆ ํ…Œ์ŠคํŠธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” Go ํ•จ์ˆ˜์— ๋Œ€ํ•ด ๋ฌด์ž‘์œ„ ์ž…๋ ฅ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜์—ฌ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ถฉ๋Œ, ํŒจ๋‹‰ ๋˜๋Š” ๋…ผ๋ฆฌ์  ๊ฒฐํ•จ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ์—†์ด ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ธฐ์กด์˜ ์ •์  ๋ถ„์„ ๋„๊ตฌ์™€ ๋‹ฌ๋ฆฌ, Go-Fuzz๋Š” ๋™์  ๋ถ„์„ ๋Œ€๋Ÿ‰์˜ ํ•ฉ์„ฑ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋กœ ํ…Œ์ŠคํŠธ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜์—ฌ.

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

Go ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์™€ ํ†ตํ•ฉ๋˜๋ฉฐ, ๊ฐ„๋‹จํ•œ ๋ž˜ํผ ํ•จ์ˆ˜๋งŒ ์žˆ์œผ๋ฉด ํผ์ง•์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ์ง€์†์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด ์ •์  ๋„๊ตฌ๋กœ๋Š” ๊ฐ์ง€ํ•˜๊ธฐ ์–ด๋ ค์šด ์‹ฌ๊ฐํ•œ ๊ธฐ๋Šฅ์  ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Go-Fuzz์˜ ํ•œ๊ณ„์™€ ๊ณผ์ œ

Go-Fuzz๋Š” ๊ท€์ค‘ํ•œ ํ…Œ์ŠคํŠธ ๋„๊ตฌ์ด์ง€๋งŒ, ๊ทธ ํšจ๊ณผ๋Š” ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์— ์–ผ๋งˆ๋‚˜ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์ œํ•œํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์š”์†Œ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘๋™ํ•˜๋ ค๋ฉด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Go-Fuzz๋Š” ์ •์  ์†Œ์Šค ์ฝ”๋“œ๋‚˜ ๊ตฌ๋ฌธ์„ ์ง์ ‘ ๋ถ„์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๋‚˜ ํผ์ง• ์ค‘์— ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š๋Š” ๋น„ํ™œ์„ฑ ๋ธŒ๋žœ์น˜์˜ ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

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

Go-Fuzz๋Š” ๋™์‹œ์„ฑ์„ ์ธ์‹ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์ฝ”๋“œ์—์„œ ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด๋‚˜ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณ ๋ฃจํ‹ด, ์ฑ„๋„ ๋˜๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ด€๋ จ๋œ ํ•จ์ˆ˜๋Š” Go์˜ ์ „์šฉ ๊ฒฝ์Ÿ ๊ฐ์ง€๊ธฐ ๋˜๋Š” ๋™์‹œ์„ฑ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์ด ์ƒ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์žฅ์‹œ๊ฐ„ ์‹คํ–‰๋˜๋Š” ํผ์ฆˆ ํ…Œ์ŠคํŠธ๋Š” ์ƒ๋‹นํ•œ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋ชจํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ๋Œ€์šฉ๋Ÿ‰ ์ž…๋ ฅ์ด๋‚˜ ๋งค์šฐ ์žฌ๊ท€์ ์ธ ์ฝ”๋“œ์—์„œ ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„์„ ์ œํ•œํ•˜๊ฑฐ๋‚˜ ๊ฒฉ๋ฆฌ๋œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  CI ํ™˜๊ฒฝ์— Go-Fuzz๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์€ ๋น„ํ˜„์‹ค์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํ•œ๊ณ„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , Go-Fuzz๋Š” ์ค‘์š”ํ•œ Go ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๋Ÿฐํƒ€์ž„ ๋ฒ„๊ทธ๋ฅผ ์ฐพ๋Š” ๋ฐ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋ฌด์ž‘์œ„ ์‹คํ–‰์„ ํ†ตํ•œ ์‹ค์ œ ๊ฒ€์ฆ์„ ์ œ๊ณตํ•˜์—ฌ ์ •์  ๋ถ„์„์„ ๋ณด์™„ํ•˜๊ณ , ์˜ˆ์ƒ์น˜ ๋ชปํ–ˆ๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ์ž…๋ ฅ์—์„œ๋„ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์•ˆ์ „ํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

์ •์  ๋ฐ ๋™์  ํ†ต์ฐฐ๋ ฅ์„ ํ™œ์šฉํ•œ Go ์ฝ”๋“œ ํ’ˆ์งˆ ๋งˆ์Šคํ„ฐ๋ง

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

๊ฐ™์€ ๋„๊ตฌ golangci-lint, staticcheck์˜ˆ์‚ฐ ๋ฐ revive ์ผ์ƒ์ ์ธ ์ฝ”๋“œ ์œ„์ƒ์— ๋งค์šฐ ์œ ์šฉํ•˜๋ฉฐ, ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๊ณ  ์ผ๊ด€์„ฑ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค. ํ•œํŽธ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณด์•ˆ ์ค‘์‹ฌ ๋„๊ตฌ๋Š” gosec, govulncheck์˜ˆ์‚ฐ ๋ฐ OWASP Dependency-Check ์•Œ๋ ค์ง„ ์œ„ํ˜‘๊ณผ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํŒจํ„ด์œผ๋กœ๋ถ€ํ„ฐ ํ•„์ˆ˜์ ์ธ ๋ณดํ˜ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ณต์žก์„ฑ์ด๋‚˜ ํ†ตํ™” ๊ด€๊ณ„๋ฅผ ์‹œ๊ฐํ™”ํ•ด์•ผ ํ•˜๋Š” ํŒ€์˜ ๊ฒฝ์šฐ, GoCyclo GoCallGraph ๊ท€์ค‘ํ•œ ์•„ํ‚คํ…์ฒ˜ ๊ฐ€์‹œ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ธ‰ ๊ฒ€์ฆ์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํผ์ €๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Go-Fuzz ๊ทธ๋ฆฌ๊ณ  ๋ถ„์„๊ธฐ์™€ ๊ฐ™์€ CodeQL ๋Œ€๊ทœ๋ชจ๋กœ ์‹คํ–‰์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ ๋™์ž‘์„ ๋ชจ๋ธ๋งํ•˜์—ฌ ๋”์šฑ ๊ฐ•๋ ฅํ•œ ๋ณด์žฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

Go ์ƒํƒœ๊ณ„๋Š” ๋Š์ž„์—†์ด ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์ง€์›ํ•˜๋Š” ๋„๊ตฌ๋“ค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๊ฐ ์ •์  ๋ถ„์„ ์†”๋ฃจ์…˜์˜ ์ดˆ์ , ํ•œ๊ณ„, ๊ทธ๋ฆฌ๊ณ  ํ†ตํ•ฉ์˜ ๊ฐ•์ ์„ ์ดํ•ดํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœํŒ€์€ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๊ฐ•ํ™”ํ•˜๊ณ , ๋ฆฌํŒฉํ† ๋ง์— ๋Œ€ํ•œ ์‹ ๋ขฐ๋„๋ฅผ ๋†’์ด๋ฉฐ, ์•ˆ์ „ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์ œ๊ณต์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋งž์ถคํ˜• ํˆด์ฒด์ธ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.