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์ ๋์์ฑ ๋ชจ๋ธ์ ๊ณ ๋ฃจํด, ์ฑ๋ ๋ฐselectStaticcheck๋ ์ฌ๊ธฐ์์ ์ ํ์ ์ธ ์ ์ฉ ๋ฒ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋์ ์คํ ๊ฒฝ๋ก๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๊ฑฐ๋, ์ฑ๋ ์ค์ฉ์ ๊ฐ์งํ๊ฑฐ๋, ์ ์ฌ์ ๊ต์ฐฉ ์ํ ๋๋ ๊ฒฝ์ ์ํ์ ๊ฒ์ฆํ์ง ์์ต๋๋ค. - ๊ตฌ์ฑ ๊ฐ๋ฅํ ๊ท์น ์์ง ์์
์ด ๋๊ตฌ๋ ์๋์ ์ผ๋ก ๋ ๋จ์ ์ผ๋ก ์ค๊ณ๋์ด ์ฌ์ฉ์๊ฐ ๊ท์น์ ์ฝ๊ฒ ์์ฑํ๊ฑฐ๋ ์ฌ์ฉ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ค๊ณ ๋ฐฉ์์ ์ผ๊ด์ฑ์ ํฅ์์ํค์ง๋ง, ์กฐ์ง๋ณ ์ ์ฑ ์ด๋ ๋ช ๋ช ๊ท์น์ ์ ์ฉํ๋ ค๋ ํ์ ์ ์ฐ์ฑ์ ์ ํํฉ๋๋ค. - ๋์์ธ์ ๋ฐ๋ฅธ ์ข์ ์ด์
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 ์ํ๊ณ๋ ๋์์์ด ๋ฐ์ ํ๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ ์ง์ํ๋ ๋๊ตฌ๋ค๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๊ฐ ์ ์ ๋ถ์ ์๋ฃจ์ ์ ์ด์ , ํ๊ณ, ๊ทธ๋ฆฌ๊ณ ํตํฉ์ ๊ฐ์ ์ ์ดํดํจ์ผ๋ก์จ ๊ฐ๋ฐํ์ ์ฝ๋ ํ์ง์ ๊ฐํํ๊ณ , ๋ฆฌํฉํ ๋ง์ ๋ํ ์ ๋ขฐ๋๋ฅผ ๋์ด๋ฉฐ, ์์ ํ๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ํํธ์จ์ด ์ ๊ณต์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ง์ถคํ ํด์ฒด์ธ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.