C#์ ์ํฐํ๋ผ์ด์ฆ ์ํํธ์จ์ด, ํด๋ผ์ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ , ๋ฐ์คํฌํฑ ์์คํ ๋ฐ ๊ฒ์ ๊ฐ๋ฐ ์ ๋ฐ์ ๊ฑธ์ณ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๊ฐ๋ ฅํ๊ณ ๋ค์ฌ๋ค๋ฅํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค. .NET ์ํ๊ณ์ ํต์ฌ ๊ตฌ์ฑ ์์์ธ C#์ ๊ฐ๋ฐ์๊ฐ ๊ฒฌ๊ณ ํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์๋ฃจ์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ์ง์ํ๋ ๋ค์ํ ํ๋ ์์ํฌ์ ๋๊ตฌ ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฝ๋๋ฒ ์ด์ค์ ํฌ๊ธฐ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ฝ๋ ํ์ง ์ ์ง์ฑ๋ฅ, ๋ณด์์ ์ฌ๊ฐํ ๊ณผ์ ๊ฐ ๋ฉ๋๋ค. ์์ ๋ฒ๊ทธ๊ฐ ํฐ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์๊ณ , ์ต์ ํ๋์ง ์์ ์ฝ๋๋ ํจ์จ์ฑ์ ์ ํ์ํฌ ์ ์์ผ๋ฉฐ, ๋์ ๋์ง ์๋ ๋ณด์ ๊ฒฐํจ์ ์์คํ ์ ์ค์ ์ํ์ ๋ ธ์ถ์ํฌ ์ ์์ต๋๋ค. ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ ์์ฐ ๊ณผ์ ์์ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ํ๋ฉดํ๋๊ธฐ ์ ์ ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ ์ค์ฉ์ ์ด๊ณ ์ฌ์ ์๋ฐฉ์ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
C# ์ฝ๋ ์ํ ๋ถ์
Smart TS XL์ ์คํ ๊ฒฝ๋ก์ ์ํคํ ์ฒ ์ํ ๋ ธ์ถ์ ์ฐ๊ด์์ผ C# ์ ์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ํฅ์์ํต๋๋ค.
์ง๊ธ ํ์์ ์ ๋ถ์ ์์ค ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ๊ฒ์ฌํฉ๋๋ค. ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ๊ฐ์งํฉ๋๋ค. ์ฝ๋ ๋์, ์ฑ๋ฅ ๋ณ๋ชฉ ํ์, ์ ์ง ๊ด๋ฆฌ ์ํ ๋ฐ ๋ณด์ ์ทจ์ฝ์ ๋์ด๋ฌํ ๋๊ตฌ๋ ๊ฐ๋ฐ์์ ํ์ด ์ฝ๋ฉ ํ์ค์ ๊ฐํํ๊ณ , ๊ธฐ์ ๋ถ์ฑ๋ฅผ ์ถ์ ํ๊ณ , ์ํํธ์จ์ด์ ์ฅ๊ธฐ์ ์ธ ์ ์ง ๊ด๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
C# ์ํ๊ณ๋ ๋ค์ํ ์ ์ ๋ถ์ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ์ผ๋ถ๋ Visual Studio์ ์ง์ ํตํฉ๋์ด ๊ฐ๋ฐ ์ค ์ค์๊ฐ ํผ๋๋ฐฑ์ ์ง์ํฉ๋๋ค. ๋ค๋ฅธ ์๋ฃจ์ ์ ๋์ฑ ์ฌ์ธต์ ์ธ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๊ณ ๋น๋ ํ์ดํ๋ผ์ธ๊ณผ ํตํฉ๋์ด ์ง์์ ์ธ ํ์ง ๋ชจ๋ํฐ๋ง์ ์ ๊ณตํฉ๋๋ค. ๊ฐ ๋๊ตฌ๋ ๋ ผ๋ฆฌ ์ค๋ฅ๋ฅผ ์กฐ๊ธฐ์ ํฌ์ฐฉํ๊ฑฐ๋, ๊ฐ๋ ์ฑ์ ํฅ์์ํค๊ฑฐ๋, ๋ณด์ ์ ์ฑ ์ ์ค์ํ๋ ๋ฑ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ชฉ์ ์ ์ํํฉ๋๋ค.
C# ๊ฐ๋ฐ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฃผ์ ์ ์ ๋ถ์ ๋๊ตฌ๋ฅผ ์ดํด๋ณด์ธ์. ๊ฐ ๋๊ตฌ์ ๊ธฐ๋ฅ์ ๋น๊ตํ๊ณ , ๊ฐ์ ์ ๊ฐ์กฐํ๋ฉฐ, ์ต์ ๊ฐ๋ฐ ์ํฌํ๋ก์์ ๊ฐ ๋๊ตฌ๊ฐ ๊ฐ์ฅ ์ ํฉํ ๋ถ๋ถ์ ์ค๋ช ํฉ๋๋ค. ์ฝ๋ ํ์ง ํฅ์, ๋ฒ๊ทธ ๊ฐ์, ๋ณด์ ๊ฐํ, ์ํํ ์ฝ๋ ๊ฒํ ๋ฑ ์ด๋ค ๋ชฉํ๋ฅผ ์ค์ ํ๋ , ์ ํฉํ ๋ถ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋น ๋ฅด๊ณ ์์ ์๊ฒ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
SMART TS XL
SMART TS XL ์ํฐํ๋ผ์ด์ฆ๊ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํ๋ ํฌ๊ด์ ์ธ ์ ์ ์ฝ๋ ๋ถ์ ์๋ฃจ์ ์ผ๋ก ๋๋ณด์ด๋ฉฐ, C#์ ์ง์ํ์ฌ ์ต์ .NET ์ํ๊ณ์์ ๊ฐ๋ ฅํ ๊ฒฝ์๋ ฅ์ ๊ฐ์ถ๊ณ ์์ต๋๋ค. ๋๊ท๋ชจ์ ๋ณต์กํ ์ํํธ์จ์ด ์์คํ ์ ๋ง์ถฐ ํ์ฅ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. SMART TS XL ์ฝ๋ ๊ตฌ์กฐ, ํ๋ฆ ๋ฐ ์ํธ ์ข ์์ฑ์ ๋ํ ์ฌ์ธต์ ์ธ ๊ฐ์์ฑ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์์ ํ์ด ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค์์ ์ ์ง ๊ด๋ฆฌ์ฑ, ๊ท์ ์ค์ ๋ฐ ์ํ ๊ด๋ฆฌ๋ฅผ ๊ฐ์ ํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
๋ฌด์จ ์ธํธ SMART TS XL ์ด ์๋ฃจ์ ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋์ ์์ค์ ์ํคํ ์ฒ ํต์ฐฐ๋ ฅ๊ณผ ์ธ๋ถ์ ์ธ ์ฝ๋ ์์ค ์ง๋จ์ ๋ชจ๋ ์ ๊ณตํ๋ ๋ฐ ์ค์ ์ ๋๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. ํนํ ๋ค์๊ณผ ๊ฐ์ ํ๊ฒฝ์์ ํจ๊ณผ์ ์ ๋๋ค. ๋ ๊ฑฐ์ ์์คํ ์ต์ C# ์ฝ๋๊ฐ ๊ณต์กดํ์ฌ ์ธ์ด ๊ฐ ๋ถ์๊ณผ ํ์ด๋ธ๋ฆฌ๋ ์ฝ๋๋ฒ ์ด์ค ์ง์์ ์ ๊ณตํฉ๋๋ค. SMART TS XL ๊ฐ์ฌ ์ถ์ , ๊ท์น ์ํ, ์ถ์ ์ฑ์ด ์ค์ํ ๊ท์ ๊ฐ ์๊ฒฉํ ์ฐ์ ์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
์ ์ฅ์ SMART TS XL C# ์ ์ ๋ถ์์ฉ
- ํด๋์ค, ์ด์ ๋ธ๋ฆฌ ๋ฐ ์๋น์ค ์ ๋ฐ์ ์ ์ฒด ํธ์ถ ํ๋ฆ๊ณผ ๋ ผ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ์๊ฐํํฉ๋๋ค.
- ๋๊ท๋ชจ C# ์ ํ๋ฆฌ์ผ์ด์ ๋ด์ ์จ๊ฒจ์ง ์ข ์์ฑ๊ณผ ์ธ๋ชจ์๋ ์ฝ๋๋ฅผ ์๋ณํฉ๋๋ค.
- ์ฝ๋ฉ ํ์ค ๋ฐ ์ํคํ ์ฒ ์ ์ฑ ์ ์ํํ๊ธฐ ์ํ ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ๊ท์น ์ธํธ๋ฅผ ์ง์ํฉ๋๋ค.
- CI/CD ํ์ดํ๋ผ์ธ๊ณผ ํตํฉํ์ฌ ํ์ง ๊ฒ์ฌ ๋ฐ ์ฝ๋ ๊ฒ์ฆ์ ์๋ํํฉ๋๋ค.
- ๋ฆฌํฉํ ๋ง ๋ฐ ํ๋ํ ๋ ธ๋ ฅ์ ์ง์ํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ์ํฅ ๋ถ์์ ์ ๊ณตํฉ๋๋ค.
- ์์ฒ ๊ฐ์ ํ์ผ๊ณผ ์ฌ๋ฌ ์ฝ๋ ์ ์ฅ์์ ๊ฑธ์ณ ํจ๊ณผ์ ์ผ๋ก ํ์ฅ๋ฉ๋๋ค.
- OWASP, ISO, MISRA์ ๊ฐ์ ๋ณด์ ๋ฐ ์ฐ์ ํ์ค ์ค์๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
SMART TS XL ๋ณต์กํ C# ์์คํ ์ ๋ํ ์ ์ด๋ ฅ์ ๊ฐํํ๊ณ , ๊ธฐ์ ๋ถ์ฑ๋ฅผ ์ค์ด๋ฉฐ, ์ฅ๊ธฐ์ ์ธ ์ํํธ์จ์ด ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ง์ํ๋ ค๋ ์กฐ์ง์ ์ด์์ ์ ๋๋ค. ์ ์ฐํ ์ํคํ ์ฒ์ ์ํฐํ๋ผ์ด์ฆ๊ธ ๊ธฐ๋ฅ์ ๊ฐ์ถ ์ด ์๋ฃจ์ ์ ์ง์ ๊ฐ๋ฅํ๊ณ ์์ ํ .NET ๊ฐ๋ฐ์ ์ค์ ์ ๋ ๊ฐ๋ฐ์, ์ค๊ณ์ ๋ฐ IT ๋ฆฌ๋์๊ฒ ๋งค์ฐ ์ ํฉํฉ๋๋ค.
๋ฆฌ์คํผ
JetBrains์์ ๊ฐ๋ฐํ ReSharper๋ C# ๋ฐ ๋ ๋์ .NET ์ํ๊ณ๋ฅผ ์ํ ๊ฐ์ฅ ์ธ๊ธฐ ์๊ณ ๊ฐ๋ฐ์ ์นํ์ ์ธ ์ ์ ๋ถ์ ๋ฐ ์์ฐ์ฑ ๋๊ตฌ ์ค ํ๋์ ๋๋ค. Visual Studio์ ์ง์ ํตํฉ๋ ReSharper๋ ์ค์๊ฐ ์ฝ๋ ๊ฒ์ฌ, ์ง๋ฅํ ์ ์, ๋ฆฌํฉํ ๋ง ๊ธฐ๋ฅ ๋ฐ ์ฝ๋ ํ์ ๊ธฐ๋ฅ์ ํตํด ์ฝ๋ฉ ๊ฒฝํ์ ํฅ์์ํต๋๋ค. ๋ค์ํ C# ์ธ์ด ๊ธฐ๋ฅ๊ณผ ํ๋ ์์ํฌ๋ฅผ ์ง์ํ์ฌ ๋ง์ ์ ๋ฌธ ๊ฐ๋ฐ ํ๊ฒฝ์์ ํ์์ ์ธ ๋๊ตฌ๋ก ์๋ฆฌ๋งค๊นํ์ต๋๋ค.
ReSharper๋ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ ๋์์ ๋ถ์ํ์ฌ ๊ตฌ๋ฌธ ์ค๋ฅ, ์ ์ฌ์ ๋ฐํ์ ๋ฒ๊ทธ, ์ฝ๋ ๋์, ์ ์ง ๊ด๋ฆฌ ๋ฌธ์ ๋ฑ ๋ค์ํ ๋ฌธ์ ์ ์ ํ์ ํฉ๋๋ค. ๋น ๋ฅธ ์์ ์ ์๊ณผ ์ํฉ์ ๋ง๋ ๋ฆฌํฉํ ๋ง ์์ ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ต์ํ์ ์์ ์ค๋จ์ผ๋ก ์ฝ๋ ํ์ง์ ํฅ์์ํฌ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ๋ถ์ ์ธ์๋ ๋จ์ ํ ์คํธ ๋๊ตฌ, ์ฝ๋ ์์ฑ ๋์ฐ๋ฏธ, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ ์๋๋ฅผ ํฌ๊ฒ ๋์ฌ์ฃผ๋ ํ์ ๋จ์ถํค๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฅ์
- ์ํํ ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ํ Visual Studio์์ ๊ธด๋ฐํ ํตํฉ
- C#, ASP.NET, XAML ๋ฐ ๊ธฐํ .NET ์ธ์ด์ ๋ํ ์ค์๊ฐ ์ฝ๋ ๊ฒ์ฌ
- 2,000๊ฐ ์ด์์ ์ฝ๋ ํ์ง ๊ฒ์ฌ ๋ฐ ์์ญ ๊ฐ์ ๋ฆฌํฉํ ๋ง
- ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค ํ์์ ์ํ ์ฆ๊ฐ์ ์ธ ์ฝ๋ ํ์ ๋ฐ ๊ฒ์ ๋๊ตฌ
- ์ปจํ ์คํธ ์ธ์ ์ฝ๋ ์์ฑ ๋ฐ ๊ตฌ๋ฌธ ์ ์
- ํ๋ณ ํ์ค์ ๋ํ ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ๊ฒ์ฌ ์ฌ๊ฐ๋ ๋ฐ ๊ท์น
- NUnit, MSTest, xUnit ๋ฑ์ ์ง์ํ๋ ๋ด์ฅ ๋จ์ ํ ์คํธ ๋ฌ๋
ํ๊ณ์ ๋จ์
ReSharper๋ ๊ทธ ์ฅ์ ์๋ ๋ถ๊ตฌํ๊ณ ๋๊ท๋ชจ ๋๋ CI ํตํฉ ์ ์ ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ์ ํฉ์ฑ์ ์ํฅ์ ์ค ์ ์๋ ์ฃผ๋ชฉํ ๋งํ ์ ํ ์ฌํญ์ด ์์ต๋๋ค.
- ์ฑ๋ฅ ์ค๋ฒํค๋
ReSharper๋ ํนํ ๋๊ท๋ชจ ์๋ฃจ์ ์์ Visual Studio์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์์ ์๊ฐ์ ํฌ๊ฒ ์ฆ๊ฐ์ํค๋ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์์ต๋๋ค. IDE ์๋ต ์๋๋ฅผ ์ ํ์์ผ ๋ณต์กํ ์ํฐํ๋ผ์ด์ฆ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์์๊ฒ ์ด๋ ค์์ ์ค ์ ์์ต๋๋ค. - ๋
๋ฆฝํ CLI ๋๋ CI ํด์ฒด์ธ ํตํฉ ์์
ReSharper๋ Visual Studio ๋ด์์ ๋ํํ์ผ๋ก ์ฌ์ฉํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉํ๊ธฐ ์ํ ์๋ฒฝํ๊ฒ ์ง์๋๋ ๋ ๋ฆฝํ ๋ช ๋ น์ค ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฏ๋ก, ์ง์์ ํตํฉ ์ํฌํ๋ก์์ ์๋ํ๋ ํ์ง ๊ฒ์ดํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ ํ์ด ์์ต๋๋ค. - ์ ํ๋ ๊ฑด์ถ ๋ถ์
ReSharper๋ ์ฝ๋ ์์ค์ ๋ฌธ์ ์๋ ๋งค์ฐ ์ ์ฉํ์ง๋ง, ๋ง์ดํฌ๋ก์๋น์ค๋ ํฌ๋ก์ค ๋ฆฌํฌ์งํ ๋ฆฌ ํ๊ฒฝ์์ ์ํคํ ์ฒ ์ข ์์ฑ ๋งต, ์์คํ ์ ์ฒด ํธ์ถ ๊ทธ๋ํ, ๊ณ ๊ธ ํ๋ฆ ๋ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. - ๊ต์ฐจ ์ธ์ด ์ฝ๋๋ฒ ์ด์ค์ ์ ํฉํ์ง ์์ต๋๋ค.
ReSharper๋ ์ฃผ๋ก .NET์ ์ค์ ์ ๋๊ณ ์์ต๋๋ค. Java, C++ ๋๋ COBOL์ ์ฌ์ฉํ๋ ๋ค๊ตญ์ด ์์คํ ์ ์ง์ํ์ง ์์ ํ์ด๋ธ๋ฆฌ๋ ๋๋ ๋ ๊ฑฐ์ ํ๋ํ ํ๊ฒฝ์์์ ํจ์จ์ฑ์ด ์ ํ๋ฉ๋๋ค. - ์์
๋ผ์ด์ผ์ค
ReSharper๋ ์ฌ์ฉ์๋น ๋ผ์ด์ ์ค๊ฐ ์ ์ฉ๋๋ ์ ๋ฃ ์ ํ์ ๋๋ค. ๋๊ท๋ชจ ํ์ ๊ฒฝ์ฐ, ์ฌ์ฉ์๋น ๋น์ฉ ์์ด ๊ด๋ฒ์ํ ์๋ํ๋ฅผ ์ ๊ณตํ๋ ์คํ์์ค ๋๋ CI ๊ธฐ๋ฐ ๋๊ตฌ์ ๋นํด ์๋นํ ๋น์ฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. - ๋ด์ฅ๋ ๋ณด์ ์ค์บ๋์ด ์์ต๋๋ค
ReSharper์๋ ์ฃผ์ ์ทจ์ฝ์ , ์์ ํ์ง ์์ ์ํธํ, ์ธ์ฆ ๋ฌธ์ ๊ฐ์ง ๋ฑ ์ ๋ด ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ ์คํธ(SAST) ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ์์ ํ ๊ฐ๋ฐ ๊ดํ์ ์ํด์๋ ๋ณด์์ ์ธ ๋๊ตฌ๊ฐ ํ์ํฉ๋๋ค.
ReSharper๋ Visual Studio ๋ด์์ ๊ฐ์ธ ๋ฐ ํ ์์ฐ์ฑ์ ํฅ์์ํค๋ ์ต๊ณ ์ ๋๊ตฌ๋ก ์๋ฆฌ๋งค๊นํ์ผ๋ฉฐ, ๋น ๋ฅธ ๊ฐ๋ฐ ์ฃผ๊ธฐ์ ์ฝ๋ ๊ฒํ ์ ์ด์์ ์ ๋๋ค. ํ์ง๋ง CI ์ค์ฌ, ํ์ฅ ๊ฐ๋ฅ ๋๋ ๋ณด์ ์ค์ฌ์ ์ ์ ๋ถ์์ ์ํ๋ ์กฐ์ง์ ๋ค๋ฅธ ๋๊ตฌ๋ก ๋ณด์ํด์ผ ํ ์๋ ์์ต๋๋ค.
๋ก์ฌ๋ฆฐ ๋ถ์๊ธฐ
Roslyn ๋ถ์๊ธฐ๋ ์ต์ C# ๋ฐ Visual Basic .NET ์ปดํ์ผ๋ฌ๋ฅผ ๊ตฌ๋ํ๋ Roslyn ์ปดํ์ผ๋ฌ ํ๋ซํผ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ์คํ ์์ค ์ง๋จ ๋๊ตฌ ์ธํธ์ ๋๋ค. Microsoft์์ ๊ฐ๋ฐ ๋ฐ ์ ์ง ๊ด๋ฆฌํ๋ ์ด ๋ถ์๊ธฐ๋ฅผ ํตํด ๊ฐ๋ฐ์๋ .NET ์ํ๊ณ ๋ด์์ ์ฌ์ฉ์ ์ง์ ์ ์ ์ฝ๋ ๊ท์น์ ์์ฑ, ์ ์ฉ ๋ฐ ํ์ฅํ ์ ์์ต๋๋ค. ๋น๋ ํ๋ก์ธ์ค์ Visual Studio์ ์ง์ ํตํฉ๋์ด ์์ด ๋ก์ปฌ ๊ฐ๋ฐ ๋ฐ ์ง์์ ์ธ ํตํฉ(CI) ๋ชจ๋์ ๊ฐ๋ณ๊ณ ํจ๊ณผ์ ์ ๋๋ค.
Roslyn ๋ถ์๊ธฐ๋ Microsoft.CodeAnalysis, .NET SDK ๋ถ์๊ธฐ, Microsoft ์์ฒด ๋ณด์, API ๋ฐ ํธํ์ฑ ์ง์นจ์ ํฌํจํ ์ฌ๋ฌ ๋ค๋ฅธ ๊ท์น ์ธํธ์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค. Roslyn ๋ถ์๊ธฐ๋ ์ฝ๋ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ , ์ผ๋ฐ์ ์ธ ๋ฒ๊ทธ๋ฅผ ํฌ์ฐฉํ๊ณ , ํ์ฅ ๊ฐ๋ฅํ๊ณ ์๋ํ๋ ๋ฐฉ์์ผ๋ก C# ํ๋ก์ ํธ ์ ๋ฐ์ ์คํ์ผ ๊ท์น์ ์ ์ฉํ๋ ๋ฐ ์ด์์ ์ ๋๋ค.
์ฅ์
- .NET SDK์ ๋ด์ฅ๋์ด ์์ผ๋ฉฐ Microsoft์์ ์ง์๋ฉ๋๋ค.
- ๊ณต์ Microsoft ์ง์นจ ๋ฐ ์คํ์ผ ๊ท์น์ ์ ์ฉํฉ๋๋ค.
- Visual Studio ๋ฐ MSBuild ํ๋ก์ธ์ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ํตํฉ๋ฉ๋๋ค.
- ์ ์ฐํ API๋ฅผ ํตํด C#์์ ์ฌ์ฉ์ ์ ์ ๊ท์น ์์ฑ์ ์ง์ํฉ๋๋ค.
- ์ค์๊ฐ ํผ๋๋ฐฑ ๋ฐ CI ํ์ดํ๋ผ์ธ ํตํฉ์ ํจ์จ์
- OmniSharp๋ฅผ ํตํด Visual Studio Code์ ํธํ ๊ฐ๋ฅ
- ์ง์์ ์ธ ์ ๋ฐ์ดํธ์ ๊ท์น ๊ฐ์ ์ ํตํด ์ปค๋ฎค๋ํฐ ์ค์ฌ์ด ๋ฉ๋๋ค.
ํ๊ณ์ ๋จ์
์ ์ฉ์ฑ๊ณผ ๊ธฐ๋ณธ ํตํฉ์๋ ๋ถ๊ตฌํ๊ณ Roslyn Analyzer๋ ๊ณ ๊ธ ์ ์ ๋ถ์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ์ง ๋ชปํ๋ ๋ช ๊ฐ์ง ์ธก๋ฉด์ด ์์ต๋๋ค.
- ์ฝ๋ ํ๋ฆ ๋ฐ ์ํคํ
์ฒ ๋ถ์์ ์ฌ๋ ์ ํ
Roslyn ๋ถ์๊ธฐ๋ ์ฃผ๋ก ๊ตฌ๋ฌธ ๋ฐ ์๋ฏธ ์์ค์์ ์๋ํฉ๋๋ค. ์ฌ์ธต์ ์ธ ํ๋ก์์ ๊ฐ ํ๋ฆ ๋ถ์, ํ๋ก์ ํธ ๊ฐ ์ข ์์ฑ ๋งคํ, ๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ ์ํฐํ๋ผ์ด์ฆ ๋๊ตฌ์์ ์ ๊ณตํ๋ ์ํคํ ์ฒ ๊ท์น ์ ์ฉ ๊ธฐ๋ฅ์ด ๋ถ์กฑํฉ๋๋ค. SMART TS XL ๋๋ NDepend ์ ์. - ๋ด์ฅ๋ ๋ณด์ ๊ท์น ์ธํธ๊ฐ ๋ถ์กฑํฉ๋๋ค.
๊ธฐ๋ณธ Roslyn ๋ถ์๊ธฐ๋ ์ ๋ ฅ ๋ฐ์ดํฐ ์ญ์ , ๋ฐ์ดํฐ ์ ์ถ, ์์ ํ์ง ์์ API ์ฌ์ฉ๊ณผ ๊ฐ์ ๋ณด์ ์ทจ์ฝ์ ์ ์ด์ ์ ๋ง์ถ์ง ์์ต๋๋ค. SAST ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ณด์ ์ค์ฌ ํ์ฅ ํ๋ก๊ทธ๋จ(์: Microsoft ๋ณด์ ์ฝ๋ ๋ถ์)์ด ํ์ํฉ๋๋ค. - ์ต์ํ์ ์๊ฐํ ๋๊ตฌ
๋ณต์กํ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ดํดํ๊ธฐ ์ํ ํธ์ถ ๊ทธ๋ํ, ์ข ์์ฑ ๊ทธ๋ํ ๋๋ ํ๋ถํ UI ์ธํฐํ์ด์ค๋ ์ง์๋์ง ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์๊ฐ์ ํผ๋๋ฐฑ์ ์ํด ํ ์คํธ ์ถ๋ ฅ์ด๋ ํ์ฌ ํตํฉ์ ์์กดํด์ผ ํฉ๋๋ค. - ์ฌ์ฉ์ ์ ์ ๊ท์น์ ๋ํ ์ ์ง ๊ด๋ฆฌ ์ค๋ฒํค๋
๊ท์น ์ฌ์ฉ์ ์ ์๋ ๊ฐ๋ ฅํ์ง๋ง, Roslyn API์ ๋ํ ์ฌ์ธต์ ์ธ ์ง์๊ณผ ์ฝ๋๋ฒ ์ด์ค๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์ ๊ธฐ์ ์ธ ์ ์ง ๊ด๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. ์ด๋ ์ ๋ฌธ ๋๊ตฌ ์ฌ์ฉ ๊ฒฝํ์ด ์๋ ํ์๊ฒ๋ ๋ถ๋ด์ด ๋ ์ ์์ต๋๋ค. - ๊ธฐ๋ณธ ์ค๋ฅ ๋ณด๊ณ ๋ฐ ์ํฌํ๋ก ํตํฉ
SonarQube๋ CodeQL๊ณผ ๊ฐ์ ๋๊ตฌ์ ๋น๊ตํ์ ๋ Roslyn Analyzer๋ ๋ณด๊ณ ๋์๋ณด๋, ๋ฌธ์ ์ถ์ ๊ธฐ๋ฅ, GitHub PR ๋ฆฌ๋ทฐ๋ Jira์ ๊ฐ์ ํ๋ซํผ๊ณผ์ ํตํฉ ๊ธฐ๋ฅ์ด ์ ํ์ ์ ๋๋ค. - ๋ค๊ตญ์ด ์๋ฃจ์
์๋ ์ ํฉํ์ง ์์ต๋๋ค.
์ด๋ฌํ ๋ถ์๊ธฐ๋ C# ๋ฐ VB.NET ์ ์ฉ์ ๋๋ค. JavaScript, C++, COBOL ๋๋ ๊ธฐํ ์ํฐํ๋ผ์ด์ฆ ์ธ์ด๊ฐ ํฌํจ๋ ํผํฉ ์คํ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
Roslyn ๋ถ์๊ธฐ๋ C# ์ฝ๋์ ํ์ง ์ ์ง๋ฅผ ์ํ ๊ฐ๋ณ๊ณ ํจ๊ณผ์ ์ธ 1์ฐจ ๋ฐฉ์ด์ ์ ๋๋ค. ์ผ๊ด์ฑ ์ ์ง, ๊ฐ๋จํ ๋ฌธ์ ์กฐ๊ธฐ ๋ฐ๊ฒฌ, ์ต์ํ์ ์ค์ ์ผ๋ก CI ์ํฌํ๋ก ํตํฉ์ ์ด์์ ์ ๋๋ค. ํ์ง๋ง ์ฌ์ธต์ ์ธ ์ธ์ฌ์ดํธ, ๋ณด์ ๊ท์ ์ค์ ๋๋ ์ํคํ ์ฒ ๊ฑฐ๋ฒ๋์ค๊ฐ ํ์ํ ์กฐ์ง์ ๊ฒฝ์ฐ, Roslyn ๋ถ์๊ธฐ๋ ๋์ฑ ๊ฐ๋ ฅํ ์ ์ ๋ถ์ ํ๋ซํผ๊ณผ ํจ๊ป ์ฌ์ฉํ ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ ๋๋ค.
NDepend
NDepend๋ C#์ ํฌํจํ .NET ์ฝ๋๋ฒ ์ด์ค์ฉ์ผ๋ก ํน๋ณํ ์ค๊ณ๋ ๊ฐ๋ ฅํ ์ ์ ๋ถ์ ๋ฐ ์ํคํ ์ฒ ๊ฑฐ๋ฒ๋์ค ๋๊ตฌ์ ๋๋ค. ๊ณ ๊ธ ์ฝ๋ ๋ฉํธ๋ฆญ, ์ข ์์ฑ ์๊ฐํ, ์ฝ๋ ๊ท์น ์ ์ฉ ๋ฐ ๊ธฐ์ ๋ถ์ฑ ์ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. NDepend๋ Visual Studio, CI/CD ํ์ดํ๋ผ์ธ๊ณผ ํตํฉ๋๋ฉฐ, ์์ฒด LINQ ๊ธฐ๋ฐ ์ฟผ๋ฆฌ ์ธ์ด(CQLinq)๋ฅผ ํตํด ์ฌ์ฉ์ ์ง์ ๊ท์น ์ ์๋ฅผ ์ง์ํฉ๋๋ค.
NDepend์ ์ฃผ์ ๊ฐ์ ์ ์ฝ๋ ๊ตฌ์กฐ์ ๋ํ ์ฌ์ธต์ ์ธ ํต์ฐฐ๋ ฅ, ์ํคํ ์ฒ ์ผ๊ด์ฑ, ๊ทธ๋ฆฌ๊ณ ์ ์ฌ์ ์ฝ๋ฉ ํ์ค์ ์ค์ํ๋ ๋ฅ๋ ฅ์ ์์ต๋๋ค. ๋ณต์กํ๊ฑฐ๋ ์๋ช ์ด ๊ธด .NET ์๋ฃจ์ ์ ์ฌ์ฉํ๋ ํ์๊ฒ NDepend๋ ๋์ ์์ค์ ํฌ๋ช ์ฑ๊ณผ ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ์ ์ ๊ณตํฉ๋๋ค.
์ฅ์
- ๊ด๋ฒ์ํ ์ฝ๋ ์ธก์ ํญ๋ชฉ(์: ์ํ ๋ณต์ก๋, ๊ฒฐํฉ, ์์ง๋ ฅ)
- ์ํคํ ์ฒ ์๊ฐํ๋ฅผ ์ํ ์ข ์์ฑ ๊ทธ๋ํ ๋ฐ ํ๋ ฌ
- ์ฝ๋ ๊ท์น์ ์์ฑํ๊ณ ์ฌ์ฉ์ ์ ์ํ๊ธฐ ์ํ CQLinq ์ฟผ๋ฆฌ ์ธ์ด
- ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ์ถ์ธ ๋ถ์ ๋ฐ ๊ธฐ์ ๋ถ์ฑ ์ถ์ ์ง์
- Visual Studio ๋ฐ Azure DevOps์์ ํตํฉ
- ์์ค ์ฝ๋์ ์ปดํ์ผ๋ ์ด์ ๋ธ๋ฆฌ์ ๋ํ ์ ์ ๋ถ์
- ์ฝ๋ ๋์, ์ํฐํจํด ๋ฐ ์ ์ฌ์ ๋ฆฌํฉํ ๋ง ๋์์ ๊ฐ์งํฉ๋๋ค.
- ๋๊ท๋ชจ, ๊ณ์ธตํ ๋๋ ๋ ๊ฑฐ์ ์ํฐํ๋ผ์ด์ฆ ์ฝ๋๋ฒ ์ด์ค์ ์ด์์ ์ ๋๋ค.
ํ๊ณ์ ๋จ์
NDepend๋ ๋ถ์ ๋ฐ ์๊ฐํ์ ์์ด์ ๋น๊ตํ ์ ์์ ๋งํผ ์ฌ์ธต์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ํน์ ํ๊ฒฝ์์์ ๋์ ์ ์ํฅ์ ์ค ์ ์๋ ๋ช ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค.
- ๋ณต์ก์ฑ๊ณผ ๊ฐํ๋ฅธ ํ์ต ๊ณก์
NDepend์ ๊ด๋ฒ์ํ ๊ธฐ๋ฅ, ํนํ CQLinq์ ์ข ์์ฑ ๋งคํ์ ์ด๋ณด์์๊ฒ๋ ๋ถ๋ด์ค๋ฌ์ธ ์ ์์ต๋๋ค. ํ์ ๊ธฐ๋ฅ์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๊ธฐ ์ํ ๊ต์ก์ด ํ์ํ๋ฉฐ, ์ผ๋ฐ ์ฌ์ฉ์๋ ์ธํฐํ์ด์ค์ ์ค์ ์ด ์ง๊ด์ ์ด์ง ์๋ค๊ณ ๋๋ ์ ์์ต๋๋ค. - ๊ฐ๋ฐ ์ค ์ค์๊ฐ ํผ๋๋ฐฑ์ด ์ ํ๋จ
ReSharper๋ Roslyn Analyzers์ฒ๋ผ ํธ์ง๊ธฐ ๋ด์์ ์ฆ๊ฐ์ ์ธ ์ง๋จ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ ๋๊ตฌ์ ๋ฌ๋ฆฌ, NDepend์ ํผ๋๋ฐฑ์ ์ผ๋ฐ์ ์ผ๋ก ๋ถ์ ์ดํ์ ์ ๊ณต๋ฉ๋๋ค. ๊ฐ๋ฐ์๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์๋ ๋๋ ์์ฝ ์คํ์ ์คํํด์ผ ํ ์๋ ์์ต๋๋ค. - Visual Studio ์ข
์์ฑ
NDepend๋ ๋ช ๋ น์ค ๋ฐ CI ํตํฉ์ ์ ๊ณตํ์ง๋ง, ๊ฐ์ฅ ํ๋ถํ ๊ธฐ๋ฅ์ Visual Studio์ ์ข ์๋์ด ์์ต๋๋ค. Rider ๋๋ Visual Studio Code๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ ์์ ํ ์ง์์ ๋ฐ์ง ๋ชปํ ์ ์์ต๋๋ค. - ์ฃผ๋ก ์ํคํ
์ฒ ๋ฐ ๋ฉํธ๋ฆญ์ฉ
NDepend๋ ๊ตฌ์กฐ์ ๋ฐ ์ํคํ ์ฒ์ ๊ฒ์ฆ์ ํ์ํ์ง๋ง, ๊ตฌ๋ฌธ ์์ค ๋ฆฐํ ์ด๋ ์์ ๊ท์น๊ณผ ๊ฐ์ ํน์ ์์ญ์์๋ ๊น์ด๊ฐ ๋ถ์กฑํฉ๋๋ค. StyleCop์ด๋ EditorConfig์ ๊ฐ์ ๋ช ๋ช ๊ท์น์ด๋ ๊ณต๋ฐฑ ๊ท์น์ ์ ์ฉํ์ง ์์ต๋๋ค. - ๋ด์ฅ๋ ๋ณด์ ์ค์บ๋์ด ์์ต๋๋ค
์ด ๋๊ตฌ๋ SQL ์ฝ์ , ์์ ํ์ง ์์ ์ํธํ, ๊ฒฝ๋ก ํก๋จ ์ํ๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ณด์ ์ทจ์ฝ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์งํ์ง ์์ต๋๋ค. ๋ณด์์ ์ค์ ์ ๋ ์กฐ์ง์ ๋ค์๊ณผ ๊ฐ์ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค. SMART TS XL, CodeQL ๋๋ Veracode. - ์์
์ ๋ผ์ด์ ์ค ๋ชจ๋ธ
NDepend๋ ๋ผ์ด์ ์ค๋น ์๊ธ์ด ๋ถ๊ณผ๋๋ ์ ๋ฃ ์ ํ์ผ๋ก, Roslyn Analyzers๋ ESLint์ ๊ฐ์ ๋ฌด๋ฃ ์ต์ ์ ๋นํด ์๊ท๋ชจ ํ์ด๋ ์คํ ์์ค ๊ธฐ์ฌ์์๊ฒ๋ ๋ถ๋ด์ค๋ฌ์ธ ์ ์์ต๋๋ค. - ๋ค๊ตญ์ด ์ฝ๋๋ฒ ์ด์ค์๋ ์ ํฉํ์ง ์์ต๋๋ค.
.NET ์ค์ฌ ๋๊ตฌ์ธ NDepend๋ JavaScript, Python, COBOL ๋๋ ํ์คํ์ด๋ ๋ ๊ฑฐ์ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์ ํํ ๋ณผ ์ ์๋ ๊ธฐํ ๋น .NET ์ธ์ด๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
NDepend๋ C# ํ๋ก์ ํธ์์ ์ฅ๊ธฐ์ ์ธ ์ฝ๋ ํ์ง๊ณผ ์ํคํ ์ฒ์ ๋ช ํ์ฑ์ ์ ์งํ๊ธฐ ์ํ ์ ๋ต์ ์๋ฃจ์ ์ ๋๋ค. ์ฌ๊ฐํ ๊ตฌ์กฐ์ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ํ์ํ๋ฉฐ, ํ์ด ๊ธฐ์ ๋ถ์ฑ๋ฅผ ์ ๋ํํ๊ณ ๊ณ์ธต์ ์ค๊ณ๋ฅผ ์ ์ฉํ๋ ๋ฐ ๋์์ ์ค๋๋ค. ํ์ง๋ง ์ ์ฒด์ ์ธ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์์ ๊ฐ๋ณ๊ณ ์ค์๊ฐ์ฑ์ด ๋ฐ์ด๋ ๋ฆฐํฐ์ ๋ณด์ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ ๋๋ค.
PVS-์คํ๋์ค
PVS-Studio๋ Program Verification Systems์์ ๊ฐ๋ฐํ ์ ์ ์ฝ๋ ๋ถ์๊ธฐ๋ก, C, C++, C#, Java ๋ฑ ์ฌ๋ฌ ์ธ์ด๋ฅผ ์ง์ํฉ๋๋ค. C#์ ๊ฒฝ์ฐ, Visual Studio์ ํตํฉ๋์ด ๋ฒ๊ทธ, ์ฝ๋ ์ค๋ฉ, ๋์์ฑ ๋ฌธ์ ๋ฐ ๋ณด์ ์ทจ์ฝ์ ์ ํ์งํ๋ ์ฌ์ธต ๋ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. PVS-Studio๋ ๊ณ ์ฑ๋ฅ ํ์ง ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์๋ฒ ๋๋ ์์คํ , ๊ธ์ต ์๋น์ค ๋ฐ ๋๊ท๋ชจ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ๋ถ์ผ์ ๋ง์ ํ์์ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ธ ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ๋์ด ๋ฏธ๋ฌํ ๋ ผ๋ฆฌ ๋ฌธ์ , ์ ์๋์ง ์์ ๋์, ์ฝ๋ฉ ํจํด ์๋ฐ๊น์ง ์ฐพ์๋ด๋ ํฌ๊ด์ ์ธ ๊ท์น ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ๋๊ตฌ๋ ์๋ ๋ฐ CI ํตํฉ ๋ถ์ ์ํฌํ๋ก๋ฅผ ๋ชจ๋ ์ง์ํฉ๋๋ค.
์ฅ์
- ๋ ผ๋ฆฌ์ ๊ฒฐํจ๋ถํฐ ์ฑ๋ฅ ๋นํจ์จ์ฑ๊น์ง C#์ ๊ด๋ฒ์ํ ์ค๋ฅ ์ ํ์ ๊ฐ์งํฉ๋๋ค.
- Visual Studio์ ์๋ฒฝํ๊ฒ ํตํฉ๋๋ฉฐ MSBuild ๊ธฐ๋ฐ ํ๋ก์ ํธ๋ฅผ ์ง์ํฉ๋๋ค.
- ์๋ํ ๋ฐ CI/CD ํ์ดํ๋ผ์ธ ์ฌ์ฉ์ ์ํ ๋ช ๋ น์ค ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ฌ๊ฐ๋ ๋ฐ ์คํ์ง ๊ฐ๋ฅ์ฑ์ ๋ฐ๋ฅธ ๊ฒฝ๊ณ ๋ถ๋ฅ ์ ๊ณต
- ๊ฑฐ์ง ์์ฑ ์ต์ ๋ฉ์ปค๋์ฆ์ ์ ๋ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์งํฉ๋๋ค.
- ๋ชจ๋ ์ง๋จ ๊ท์น์ ๋ํ ์์ธํ ์ค๋ช ์์ ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ๋ ๋น ๋ฅธ ์ฑ๋ฅ์ ์ํด ์ฆ๋ถ ๋ถ์์ ์ง์ํฉ๋๋ค.
ํ๊ณ์ ๋จ์
PVS-Studio๋ ๊ธฐ์ ์ ๊ฐ์ ์๋ ๋ถ๊ตฌํ๊ณ ํน์ ํ๊ฒฝ์์์ ๋์ ์ด๋ ํจ๊ณผ๋ฅผ ์ ํํ ์ ์๋ ๋ช ๊ฐ์ง ์ธก๋ฉด์ด ์์ต๋๋ค.
- ์์ธํ ์ถ๋ ฅ ๋ฐ ๊ฒฝ๊ณ ์์
PVS-Studio๋ ํนํ ์ฒ์ ์คํํ ๋ ๋ง์ ๊ฒฝ๊ณ ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ต์ ๋๊ตฌ๊ฐ ํฌํจ๋์ด ์์ง๋ง, ์ด๊ธฐ ๊ฒฝ๊ณ ์์ด ๋๋ฌด ์ปค์ ์์ฐ์ ์ธ ์ฌ์ฉ์ ์ํด ์กฐ์ ํ๋ ๋ฐ ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํ ์ ์์ต๋๋ค. - ๊ท์น์ ์ ํ๋ ์ฌ์ฉ์ ์ ์
Roslyn Analyzers๋ NDepend์ ๋ฌ๋ฆฌ PVS-Studio๋ ๊ฐ๋ ฅํ ์ฌ์ฉ์ ์ ์ ๊ท์น ์์ง์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ๋ด๋ถ ์ํคํ ์ฒ๋ ์ฝ๋ฉ ํ์ค์ ๋ง๋ ๋ง์ถคํ ๊ท์น์ ์ฝ๊ฒ ์ ์ํ ์ ์์ต๋๋ค. - ๊ฑด์ถ์ ํต์ฐฐ๋ ฅ ๋ถ์กฑ
์ด ๋๊ตฌ๋ ์ํคํ ์ฒ ๊ฒ์ฆ๋ณด๋ค๋ ์ค๋ฅ ๊ฐ์ง์ ์ฃผ๋ก ์ค์ ์ ๋ก๋๋ค. ์ข ์์ฑ ๊ทธ๋ํ, ์ํ ๋ณต์ก๋ ์ถ์ , ๊ณ์ธต์ ์ค๊ณ ์ ์ฉ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. - ๋์ ๋ผ์ด์ ์ค ๋น์ฉ
PVS-Studio๋ ์๊ท๋ชจ ๊ฐ๋ฐํ์ด๋ ๊ต์ก ํ๊ฒฝ์์๋ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์๋ ๋ผ์ด์ ์ค ๋ชจ๋ธ์ ๊ฐ์ถ ์์ฉ ๋๊ตฌ์ ๋๋ค. ์ฒดํ ๊ธฐ๊ฐ ์ดํ ์ ๋ฌธ๊ฐ์ฉ์ผ๋ก ์ ๊ณต๋๋ ๋ฌด๋ฃ ๋ฒ์ ์ ์์ต๋๋ค. - ๊ฐ๋ฐ์ ์นํ์ ์ด์ง ์์ UX
Visual Studio์์ ํตํฉ์ ๊ธฐ๋ฅ์ ์ด์ง๋ง, ์ธํฐํ์ด์ค์๋ ReSharper๋ SonarQube ๋์๋ณด๋์ ๊ฐ์ ๋๊ตฌ์์ ๋ณผ ์ ์๋ ์ธ๋ จ๋๊ณ ์ฌ์ฉ์ฑ ์๋ ๊ธฐ๋ฅ ์ค ์ผ๋ถ๊ฐ ๋ถ์กฑํฉ๋๋ค. - ์ ์ฉ SAST ๋๊ตฌ๋ณด๋ค ๋ณด์ ์ด์ ์ด ๋ ๊ฐ๋ ฅํจ
PVS-Studio๋ ์ผ๋ถ ๋ณด์ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ์ง๋ง, ์ ์ฉ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ ์คํธ ํ๋ซํผ์ ๋์ฒดํ ์๋ ์์ต๋๋ค. OWASP ๊ท์น ์ธํธ, ํ ์ธํธ ๋ถ์ ๋ฐ ์ทจ์ฝ์ ์ ์ ํตํฉ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. - ์ฃผ๋ก Microsoft ์คํ์ ์ด์ ์ ๋ง์ถฅ๋๋ค.
์ด ๋๊ตฌ๋ ์ฌ๋ฌ ์ธ์ด๋ฅผ ์ง์ํ์ง๋ง, ์ต๊ณ ์ C# ๊ธฐ๋ฅ์ Microsoft ์ํ๊ณ์ ์์กดํฉ๋๋ค. ๋ฐ๋ผ์ ํฌ๋ก์ค ํ๋ซํผ .NET Core ๋๋ VS Code ์ฌ์ฉ์ ์๋์ ์ผ๋ก ์ ํ์ ์ผ ์ ์์ต๋๋ค.
PVS-Studio๋ ๋ค๋ฅธ ๋ถ์๊ธฐ์์๋ ๊ฐ๊ณผํ ์ ์๋ C# ์ฝ๋ ๊ฒฐํจ๊ณผ ์จ๊ฒจ์ง ๋ฌธ์ ๋ฅผ ํ๋ฉดํํ๋ ๋ฐ ์์ด ์ฑ์ํ๊ณ ๊ธฐ์ ์ ์ผ๋ก ๋ฐ์ด๋ ๋๊ตฌ์ ๋๋ค. ํนํ ๋ ๊ฑฐ์ ํ๋ก์ ํธ, ์์ ์ด ์ค์ํ ์์คํ , ๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ์ ์ธ ํ์ง ๊ด๋ฆฌ๊ฐ ํ์ํ ํ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ํ์ง๋ง ๊ท์น ์ฌ์ฉ์ ์ ์, ์ํคํ ์ฒ ์ ์ด ๋๋ ๋์ฑ ์ฌ์ฉ์ ์นํ์ ์ธ ์ํฌํ๋ก๋ฅผ ์ํ๋ ์กฐ์ง์ ๊ฒฝ์ฐ, ๋์ฑ ์ํธ ์์ฉ์ ์ด๊ฑฐ๋ ์ ๋ต์ ์ธ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํด์ผ ํ ์๋ ์์ต๋๋ค.
์ปค๋ฒ๋ฆฌํฐ(Synopsys)
Coverity๋ C#์ ํฌํจํ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํ๋ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ ์คํธ(SAST) ๋๊ตฌ์ ๋๋ค. ์ฝ๋ ๋ณด์, ์์ ์ฑ ๋ฐ ๊ท์ ์ค์์ ์ค์ ์ ๋๊ธฐ ๋๋ฌธ์ ๊ธ์ต, ํญ๊ณต์ฐ์ฃผ, ์๋ฃ ๋ฐ ๊ธฐํ ๊ท์ ๋์ ์ฐ์ ๋ถ์ผ์ ์กฐ์ง์์ ๋๋ฆฌ ์ฑํ๋๊ณ ์์ต๋๋ค.
Coverity๋ ์ฌ์ธต์ ์ธ ์ ์ ๋ถ์์ ์ํํ์ฌ ์ค์ํ ์ํํธ์จ์ด ๊ฒฐํจ, ๋ณด์ ์ทจ์ฝ์ , ๋์์ฑ ๋ฌธ์ ๋ฐ ๊ท์ ์ค์ ์๋ฐ ์ฌํญ์ ํ์งํฉ๋๋ค. CWE, OWASP Top 10, MISRA์ ๊ฐ์ ์ ๊ณ ํ์ค์ ์ค์ํ๋ฉฐ, ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์์์ ํ์ฅ์ฑ๊ณผ ์ํฐํ๋ผ์ด์ฆ๊ธ ๋ณด๊ณ ๊ธฐ๋ฅ์ผ๋ก ์ ํ์ด ๋ ์์ต๋๋ค.
์ฅ์
- ๋ฒํผ ์ค๋ฒํ๋ก, ์ฃผ์ ๊ฒฐํจ, ์์ ํ์ง ์์ API๋ฅผ ํฌํจํ ๊ณ ๊ธ ์ทจ์ฝ์ฑ ํ์ง
- ์ ๊ณ ํ์ค(CWE, OWASP, PCI DSS ๋ฑ)์ ๋ํ ๊ฐ๋ ฅํ ๊ท์ ์ค์
- Jenkins, GitHub Actions, Azure DevOps์ ๊ฐ์ Visual Studio ๋ฐ CI/CD ํ๋ซํผ๊ณผ ํตํฉ๋ฉ๋๋ค.
- ๊ฒฐํจ ์์ ์ ์ํ ์ฝ๋ ๋ถ๋ฅ ๋๊ตฌ์ ํ์ ์ํฌํ๋ก๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ฑ๋ฅ ์ค์ฌ ๋ถ์ ์์ง์ ํตํด ๋๊ท๋ชจ ์ํฐํ๋ผ์ด์ฆ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- ์ค์ ์ง์ค์ ๋์๋ณด๋ ๋ฐ ๊ฐ์ฌ ๊ธฐ๋ฅ ์ง์
- ๋ณด์ ๋ฐ ์์ ์ ์ํด ํ๋ ์ดํ ๋ ๊ณ ํ์ง ๊ท์น ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํ๊ณ์ ๋จ์
Coverity๋ ํนํ ๊ท์ ๋ ํ๊ฒฝ์์ ์์ ํ ์ฝ๋ ๋ถ์์ ํ์ํ์ง๋ง ๊ฐ๋ฐ์์ DevOps ํ์ด ์์์ผ ํ ๋จ์ ์ด ์์ต๋๋ค.
- ๋ง์ ์ค์ ๋ฐ ์ธํ๋ผ ์ค๋ฒํค๋
Coverity๋ ๋ฐฑ์๋ ์๋ฒ ๋ฐ ์ค์บ๋ ์ธํ๋ผ ๊ตฌ์ฑ์ ํฌํจํ ์๋นํ ์ค์ ์ด ํ์ํฉ๋๋ค. ์ ๋ด DevSecOps ์ธ๋ ฅ์ด ์๋ ๋น ๋ฅด๊ฒ ์์ง์ด๋ ํ์ด๋ ์๊ท๋ชจ ํ๋ก์ ํธ์๋ ์ ํฉํ์ง ์์ต๋๋ค. - ๋์ ๋ผ์ด์ ์ค ๋ฐ ์ง์ ๋น์ฉ
๊ฐ๊ฒฉ ๊ตฌ์กฐ๋ ๋๊ธฐ์ ์ ๋์์ผ๋ก ํฉ๋๋ค. ์๊ท๋ชจ ํ์ฌ๋ ํ๋ฆฌ๋์ ๊ฐ๋ฐ์๋ ์คํ์์ค ๋๋ ๊ฒฝ๋ํ ๋์์ ๋นํด ๋ผ์ด์ ์ค ๋น์ฉ์ด ์์ฒญ๋๊ฒ ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. - ์ฝ๋ฉ ์ค ์ค์๊ฐ ํผ๋๋ฐฑ์ด ์ ํ๋จ
Coverity๋ ๋ฐฐ์น ๋ชจ๋ ๋๋ CI ๊ธฐ๋ฐ ์ค์บ๋์์ ๊ฐ์ฅ ํจ๊ณผ์ ์ผ๋ก ์๋ํฉ๋๋ค. ๊ฐ๋ฐ์๋ Roslyn ๋ถ์๊ธฐ, ReSharper ๋๋ Visual Studio ๊ธฐ๋ณธ ์ ๊ณต ๋๊ตฌ์ฒ๋ผ ์ฆ๊ฐ์ ์ธ ์ธ๋ผ์ธ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์์ต๋๋ค. - ๊ตฌ์ฑ์ ์ํ ๊ฐํ๋ฅธ ํ์ต ๊ณก์
๋ถ์ ํ๋กํ, ์ต์ ๋๋ ๊ท์น์ ์ฌ์ฉ์ ์ง์ ํ๋ ค๋ฉด Coverity์ ๊ณ ์ ํ ๊ตฌ์ฑ ์ํ๊ณ์ ๋ํ ๊ต์ก๊ณผ ์์ง๊ฐ ํ์ํฉ๋๋ค. ๋ฌธ์๋ ๋ฐฉ๋ํ์ง๋ง ๋ด์ฉ์ด ๋ณต์กํ ์ ์์ต๋๋ค. - ์ ์ง ๊ด๋ฆฌ๋ ์ํคํ
์ฒ๋ณด๋ค ๋ณด์์ ๋ ์ค์ ์ ๋์์ต๋๋ค.
Coverity๋ ๋ณด์ ๋ฐ ์์ ์ฑ ๊ฐ์ง๋ฅผ ์ ๋ฌธ์ผ๋ก ํ์ง๋ง NDepend์ ๊ฐ์ ๋๊ตฌ๊ฐ ์ ๊ณตํ๋ ์ข ์์ฑ ๊ทธ๋ํ, ๊ธฐ์ ๋ถ์ฑ ์ถ์ ๋๋ ์ถ์ธ ์ธก์ ํญ๋ชฉ๊ณผ ๊ฐ์ ์ํคํ ์ฒ ๋๊ตฌ๊ฐ ๋ถ์กฑํฉ๋๋ค. - UI ๋ฐ ์ฌ์ฉ์ ๊ฒฝํ์ด ํ๋ํ๋์ง ์์
๊ฐ๋ฐ์ ์ธํฐํ์ด์ค์ ๋์๋ณด๋๋ ๊ธฐ๋ฅ์ ์ด์ง๋ง ์ต์ ๋์์ธ ๊ธฐ์ค์ ๋ฏธ์น์ง ๋ชปํฉ๋๋ค. SonarQube๋ CodeClimate ๊ฐ์ ์ฌ์ฉ์ ์ค์ฌ ๋๊ตฌ์ ๋นํด Coverity๋ ๊ตฌ์์ด๊ณ ๋ถํธํ๊ฒ ๋๊ปด์ง ์ ์์ต๋๋ค. - ๊ฑฐ์ง ์์ฑ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฃผ๊ธฐ์ ์ธ ์กฐ์ ์ด ํ์ํฉ๋๋ค.
Coverity๋ ์ ํ๋๊ฐ ๋ฐ์ด๋๋ค๋ ํ๊ฐ๋ฅผ ๋ฐ๊ณ ์์ง๋ง, ์ผ๋ถ ์ฌ์ฉ์๋ ํนํ ๊ณ ๊ธ ์ธ์ด ๊ธฐ๋ฅ์ด๋ ์ฌ์ฉ์ ์ง์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ๋ ์คํ(false positive)์ ๋ณด๊ณ ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ท์น ๋ฐ ์ฐจ๋จ ๊ธฐ๋ฅ์ ์ง์์ ์ธ ๊ฐ์ ์ด ํ์ํฉ๋๋ค.
Coverity๋ ๋ณด์, ๊ท์ ์ค์, ์ฝ๋ ์ ํ์ฑ์ด ํ์์ ์ธ ์กฐ์ง์ ์ํ ์ต๊ณ ์ ์๋ฃจ์ ์ ๋๋ค. ์๊ฒฉํ ๊ฒฐํจ ๋ถ์์ด ์๊ตฌ๋๋ ๋๊ท๋ชจ, ๊ท์ ๋์ ๋๋ ๋ ๊ฑฐ์ ์ฝ๋๋ฒ ์ด์ค์ ์ด์์ ์ ๋๋ค. ํ์ง๋ง ์ํฐํ๋ผ์ด์ฆ๊ธ ํน์ฑ์ ์ ์ ํ ์ง์๊ณผ ๊ต์ก ์์ด๋ ์๊ท๋ชจ ํ์ด๋ ๋น ๋ฅธ ๊ฐ๋ฐ ํ๊ฒฝ์๋ ๋ฏผ์ฒฉ์ฑ์ด๋ ๊ฒฝ๋์ฑ์ด ๋ถ์กฑํ ์ ์์ต๋๋ค.
์ฝ๋๋ฌ์
DevExpress์ CodeRush๋ ์ฝ๋ ํ์, ๋ฆฌํฉํ ๋ง, ์ ์ ์ฝ๋ ๋ถ์ ๊ธฐ๋ฅ์ ํฌํจํ๋ Visual Studio์ฉ ์์ฐ์ฑ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋๋ค. ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ค์ ์ ๋๊ณ ์ค๊ณ๋ CodeRush๋ ์ฝ๋ ํ์ง๊ณผ ์ ์ง ๊ด๋ฆฌ ํธ์์ฑ์ ํฅ์ํ๋ ๋์์ C# ์ฝ๋ ์์ฑ, ์ฝ๊ธฐ ๋ฐ ํ์ ํจ์จ์ฑ์ ๋์ฌ์ค๋๋ค.
CodeRush๋ Coverity๋ PVS-Studio์ ๊ฐ์ ์์ํ ์ ์ ์ฝ๋ ๋ถ์๊ธฐ๋ ์๋์ง๋ง, ๊ฐ๋ฐ์๊ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํ๊ณ , ์ค๋ฅ๋ฅผ ํผํ๊ณ , ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋จ์ํํ๋ ๋ฐ ๋์์ด ๋๋ ์ค์๊ฐ ์ฝ๋ ์ง๋จ ์์ง์ ํตํฉํ์ต๋๋ค.
์ฅ์
- ์ต์ํ์ ์ค์ ์ผ๋ก Visual Studio์ ์ง์ ํตํฉ๋ฉ๋๋ค.
- ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ฆ๊ฐ์ ์ธ ์ ์ ์ฝ๋ ๋ถ์ ๋ฐ ์ ์์ ์ ๊ณตํฉ๋๋ค.
- 100๊ฐ ์ด์์ ์๋ ๋ฆฌํฉํ ๋ง ๋ฐ ์ฝ๋ ํฌ๋งท ๋๊ตฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
- ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋ฌธ์ , ์ฌ์ฉ๋์ง ์๋ ์ฝ๋ ๋ฐ ์๋ชป๋ ๊ดํ์ ๊ฐ์กฐํฉ๋๋ค.
- ์ฝ๋ ๋ฉํธ๋ฆญ, ์ข ์์ฑ ๋ถ์, ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง์ ๊ฐ์ ์๊ฐ์ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ์ ์์ (์: ์ด๋ฆ ๋ฐ๊พธ๊ธฐ, ๋งค๊ฐ๋ณ์ ์ฌ์ ๋ ฌ, ํ์ ์ฌ๋ถ ๋ณ๊ฒฝ)์ ๊ฐ์ํํฉ๋๋ค.
- ํ๋ก์ ํธ ๋๋ ๊ฐ๋ฐ์ ๊ธฐ๋ณธ ์ค์ ์ ๋ฐ๋ผ ๊ท์น ๊ตฌ์ฑ ๋ฐ ์ต์ ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ฉฐ ์ต์ C# ์ํฌํ๋ก๋ฅผ ์ง์ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
ํ๊ณ์ ๋จ์
๊ฐ๋ณ ๊ฐ๋ฐ์์ ์๊ท๋ชจ ํ์๊ฒ๋ ๋งค๋ ฅ์ ์ด์ง๋ง, CodeRush๋ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ ์ ๋ถ์ ์๋๋ฆฌ์ค์์์ ์ ์ฉ์ฑ์ ๊ฐ์์ํค๋ ๋ช ๊ฐ์ง ์ ์ฝ์ด ์์ต๋๋ค.
- ์ ์ฉ SAST ๋๋ ๋ณด์ ์ค์บ๋๊ฐ ์๋๋๋ค.
CodeRush๋ ์ฝ๋ ์คํ์ผ, ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ์ ์์ฐ์ฑ์ ์ค์ ์ ๋ก๋๋ค. ์ทจ์ฝ์ ํ์ง๋ OWASP ๋๋ CWE์ ๊ฐ์ ํ์ค ์ค์์๋ ํนํ๋์ด ์์ง ์์ต๋๋ค. - ๊ธฐ์
๋ณด๊ณ ๊ธฐ๋ฅ์ด ๋ถ์กฑํฉ๋๋ค
CI ํ์ดํ๋ผ์ธ ์ ๋ฐ์ ํ ์ ์ฒด ๋ถ์์ ์ ํฉํ ์ค์ ์ง์ค์ ๋์๋ณด๋, ๊ฒฐํจ ์ถ์ธ ์ถ์ ๋๋ ๋ณด๊ณ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. - ์ ํ๋ ๊ท์น ํ์ฅ์ฑ
Roslyn ๋ถ์๊ธฐ๋ NDepend์ ๊ฐ์ ๋๊ตฌ์ ๋น๊ตํ์ ๋, CodeRush๋ ์ฌ์ฉ์ ์ ์ ์ ์ ๋ถ์ ๊ท์น์ด๋ ์ํคํ ์ฒ ์ ์ฝ์ ๊ตฌ์ถํ๊ณ ์ ์ฉํ๊ธฐ ์ํ ๊ด๋ฒ์ํ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. - ๋ช
๋ น์ค์ด๋ CI/CD ํตํฉ ์์
๋ถ์์ Visual Studio ํ๊ฒฝ ๋ด์์๋ง ์ํ๋ฉ๋๋ค. ๋น๋ ํ์ดํ๋ผ์ธ์ด๋ ์๊ฒฉ ๋ถ์ ์ธํ๋ผ์์๋ ํค๋๋ฆฌ์ค ์คํ์ ์ง์ํ์ง ์์ต๋๋ค. - ์ฌ์ธต์ ์ธ ๋ฐ์ดํฐ ํ๋ฆ์ด๋ ์ค์ผ ๋ถ์์ด ์์ต๋๋ค.
CodeRush๋ ๊ฒฝ๋ก ๊ธฐ๋ฐ ๋ถ์, ํ๋ก์์ ๊ฐ ์ค์บ๋ ๋๋ ๊ณ ๊ธ ๋ฐ์ดํฐ ํ๋ฆ ์ถ์ ์ ์ํํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฌ๋ฌ ํ์ผ์ด๋ ๊ณ์ธต์ ๊ฑธ์ณ ์๋ ๋ณต์กํ ๋ฒ๊ทธ๋ฅผ ๋์น ์ ์์ต๋๋ค. - ํ์ง ๊ฐํ๋ณด๋ค ์์ฐ์ฑ ์ค์ฌ
SonarQube๋ Coverity์ ๊ฐ์ด ๊ฒฐํจ์ ์ ํ์ฑ์ ์ฐ์ ์ํ๋ ๋๊ตฌ์ ๋น๊ตํ์ ๋ ๊ฐ๋ฐ์์ ์ธ์ฒด๊ณตํ์ ์ด์ ์ ๋ง์ถ๋ฉด ์ฝ๋ ํ์ค์ ๋ ์๊ฒฉํ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค. - ๋๊ท๋ชจ ๋๋ ๋ ๊ฑฐ์ ์ฝ๋๋ฒ ์ด์ค์๋ ์ ํฉํ์ง ์์ต๋๋ค.
CodeRush๋ ์๊ท๋ชจ์์ ์ค๊ท๋ชจ ํ๋ก์ ํธ์์๋ ๋ฐ์์ฑ์ด ๋ฐ์ด๋์ง๋ง, ์ฌ์ธต์ ์ธ ์ ์ ๊ฒ์ฌ, ๊ฐ์ฌ ๋๋ ๊ท์ ์ค์ ํ๊ฐ๊ฐ ํ์ํ ๋๊ท๋ชจ ์ํฐํ๋ผ์ด์ฆ ์ ์ฅ์์์๋ ํจ์จ์ ์ผ๋ก ํ์ฅ๋์ง ์์ ์ ์์ต๋๋ค.
CodeRush๋ ๊ฐ๋ฐ์ ์ค์ฌ์ ์์ฐ์ฑ ํฅ์ ๋๊ตฌ๋ก์ C#์ ๋ํ ์ ์ฉํ ์ ์ ์ฝ๋ ํผ๋๋ฐฑ๊ณผ ์ค๋งํธ ๋ฆฌํฉํ ๋ง์ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง DevSecOps๋ ๋๊ท๋ชจ ํ ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ ๊ณต์์ ์ธ ์ ์ ์ฝ๋ ๋ถ์ ํ๋ซํผ์ ๋์ฒดํ์ง๋ ์์ต๋๋ค. ๊ฐ์ธ ์์ค์์ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ๊ณผ ๊น๋ํ โโ์ฝ๋ ์์ฑ ์ต๊ด์ด ํ์ํ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ๋ฉด ํจ๊ณผ์ ์ ๋๋ค.
์คํ์ผ์บ
StyleCop์ Microsoft์์ ๊ฐ๋ฐํ ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ์ด๋ฉฐ ๋์ค์ ์ปค๋ฎค๋ํฐ์์ ์ ์ง ๊ด๋ฆฌ๋ฉ๋๋ค. ์คํ์ผ์บ ๋ถ์๊ธฐ)๋ C#์์ ์ผ๊ด๋ ์ฝ๋ ์คํ์ผ๊ณผ ์์์ ์ ์ฉํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. C# ์์ค ์ฝ๋๋ฅผ ๋ถ์ํ์ฌ ์ ์๋ ์คํ์ผ ๊ท์น์ ์ค์ํ๋์ง ํ์ธํ๊ณ , ๊ฐ๋ ์ฑ, ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ ๋ฐ ํ ์ผ๊ด์ฑ์ ํฅ์์ํต๋๋ค.
StyleCop์ ๋ณด์ ๊ฒฐํจ์ด๋ ๋ณต์กํ ๋ ผ๋ฆฌ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๋ ๋์ ๋ช ํ์ฑ, ๋ช ๋ช ๊ท์น, ๊ฐ๊ฒฉ, ๋ ์ด์์ ๋ฐ ๋ฌธ์ํ๋ฅผ ๊ฐ์กฐํฉ๋๋ค.
์ฅ์
- ํ๊ณผ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด๋ ์ฝ๋ฉ ์คํ์ผ์ ์ด์งํฉ๋๋ค.
- ์์, ์ด๋ฆ ์ง์ , ์์ ์ง์ ๋ฐ ์ฃผ์ ๋ฌ๊ธฐ์ ๋ํ ๋ค์ํ ์ฌ์ฉ์ ์ ์ ๊ท์น์ ์ ๊ณตํฉ๋๋ค.
- Visual Studio์ ํตํฉ๋์ด ์์ผ๋ฉฐ Roslyn ๋ถ์๊ธฐ์ ํธํ๋ฉ๋๋ค.
- ์ปดํ์ผ ์ ์ฝ๋ ์คํ์ผ์ ์ ์ฉํ์ฌ ๊ฐ๋ฐ ์ค ํ์ง ์ ์ง์ ๋์์ด ๋ฉ๋๋ค.
- ๊ตฌ์ฑ ํ์ผ์ด๋ ์ถ๊ฐ ๊ท์น ์ธํธ๋ฅผ ํตํด ํ์ฅ ๊ฐ๋ฅ
- ๋น๋ ํ์ดํ๋ผ์ธ ๋ฐ CI ํ๊ฒฝ์ ์ฝ๊ฒ ํตํฉ(NuGet ๋๋ MSBuild๋ฅผ ํตํด)
- ๊น๋ํ๊ณ ์ฝ๊ธฐ ์ฝ๊ณ ์ ๋ฌธ์ํ๋ C# ์ฝ๋๋ฅผ ์ฅ๋ คํฉ๋๋ค.
ํ๊ณ์ ๋จ์
StyleCop์ ํ์คํ์ ์ ์ฉํ์ง๋ง, ๋ ๊ด๋ฒ์ํ ์ ์ ๋ถ์ ์ปจํ ์คํธ์์์ ์ํฅ๋ ฅ์ ๊ฐ์์ํค๋ ๋ช ๊ฐ์ง ์ ํ ์ฌํญ์ด ์์ต๋๋ค.
- ์ ํ์ฑ์ด๋ ๋ณด์์ด ์๋ ์ฝ๋ ์คํ์ผ์๋ง ์ด์ ์ ๋ง์ถฅ๋๋ค.
StyleCop์ ๋ฒ๊ทธ, ์ฑ๋ฅ ๋ฌธ์ ๋๋ ์ทจ์ฝ์ ์ ๊ฐ์งํ์ง ์์ต๋๋ค. Roslyn ๋ถ์๊ธฐ๋ SonarQube์ ๊ฐ์ ๋๊ตฌ๋ฅผ ๋ณด์ํ์ง๋ง, ์ด๋ฅผ ๋์ฒดํ์ง๋ ์์ต๋๋ค. - ์ง๋์น๊ฒ ์๊ฒฉํ๊ณ ์ฅํฉํ ์ ์์ต๋๋ค
StyleCop ๊ท์น์ ๋ค์ํ๊ณ ์ข ์ข ์๊ฒฉํฉ๋๋ค. ์ ์คํ๊ฒ ๊ตฌ์ฑํ์ง ์์ผ๋ฉด ํ์ ์ค์ํ์ง ์์ ์คํ์ผ ๋ฌธ์ ์ ๋ํ ๊ฒฝ๊ณ ์ ์๋๋นํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ง์ค๋ ฅ์ ํํธ๋ฌ๋จ๋ฆฌ๊ฑฐ๋ ๊ท์น ํผ๋ก๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. - ์ต์ C# ๊ตฌ๋ฌธ์ ๋ํ ์ง์์ด ์ ํ๋จ
StyleCop.Analyzers๋ ์ต์ C# ๋ฒ์ (๋ ์ฝ๋, ํจํด ๋งค์นญ, null ๊ฐ๋ฅ ์ฐธ์กฐ ์ ํ ๋ฑ)๊ณผ์ ํธํ์ฑ์ ๊ฐ์ ํ์ง๋ง, ์ง์์ด ์ปดํ์ผ๋ฌ ์ ๋ฐ์ดํธ๋ณด๋ค ๋ฆ์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ์์ด ๋น ๋ฅด๊ฒ ๋ฐ์ ํ๋ ํ๋ก์ ํธ์์ ๋ง์ฐฐ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค. - ์๊ฐ์ ๋ณด๊ณ ๋ ์ธก์ ํญ๋ชฉ์ด ์์ต๋๋ค
SonarQube๋ NDepend์ ๋ฌ๋ฆฌ StyleCop์๋ ๋์๋ณด๋, ์ฐจํธ ๋๋ ์ถ์ธ ์ถ์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. IDE ๋๋ ๋น๋ ์ถ๋ ฅ์๋ง ๊ฒฝ๊ณ ๋ฅผ ํ์ํ์ฌ ํ ์ ์ฒด์ ๊ฐ์์ฑ์ ์ ํํฉ๋๋ค. - ๊ฑด์ถํ์ ๋๋ ๋ณต์ก์ฑ ๋ถ์ ์์
StyleCop์ ์ฝ๋ ์ข ์์ฑ, ํด๋์ค ๊ตฌ์กฐ ๋๋ ์ ์ง ๊ด๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ๋ถ์ํ์ง ์์ต๋๋ค. ์ฌ์ธต์ ์ธ ๋์์ธ ํ์ง์ด ์๋ ํ๋ฉด์ ์ธ ์ผ๊ด์ฑ์ ์ง์คํฉ๋๋ค. - ์ ์ ํ๊ฒ ๊ตฌ์ฑํ์ง ์์ผ๋ฉด ๋ฐฉํด๊ฐ ๋ ์ ์์ต๋๋ค.
๊ธฐ์กด ํ๋ก์ ํธ์์ StyleCop์ ํ์ฑํํ๋ฉด ๋น๋์ ๊ฒฝ๊ณ ๊ฐ ๋์ณ๋ ์ ์์ต๋๋ค. ํ์ ํนํ ๋์ ๋จ๊ณ์์ ์ํ๊ณผ ์ค์ฉ์ฑ ๊ฐ์ ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด ๊ท์น์ ์ ์คํ๊ฒ ์กฐ์ ํด์ผ ํฉ๋๋ค. - ์ง์ญ์ฌํ ์ ์ง ๊ด๋ฆฌ์ ๋ฐ๋ผ
์๋ Microsoft ํ๋ก์ ํธ๊ฐ ๋ณด๊ด๋ ์ดํ, ์ง์์ ์ธ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ๊ธฐ์ฌ์๋ค์ ๋์์ ์์กดํ๊ณ ์์ต๋๋ค. ํ๋ฐํ์ง๋ง ์ฅ๊ธฐ์ ์ธ ์ง์ ๊ฐ๋ฅ์ฑ์ ์ฆ์ ์ ๋ฐ์ดํธ์ ์ง์์ ์์กดํ๋ ๊ธฐ์ ์๊ฒ๋ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค.
StyleCop์ ๊น๋ํ๊ณ ํ์คํ๋ ์ฝ๋๋ฅผ ์ฐ์ ์ํ๋ ํ์๊ฒ ์ฌ์ ํ ๊ท์คํ ๋๊ตฌ์ ๋๋ค. ํ์ง๋ง ๋ณด์, ์ ์ง๋ณด์์ฑ, ์ฑ๋ฅ๊ณผ ๊ฐ์ ๋ถ์ผ์์ ์ข ํฉ์ ์ธ ์ ์ ์ฝ๋ ๋ถ์์ ์ํด์๋ ๋ค๋ฅธ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ํ์์ค์บ
FxCop์ Microsoft์์ ๊ฐ๋ฐํ ์ด๊ธฐ ์ ์ ๋ถ์ ๋๊ตฌ ์ค ํ๋๋ก, .NET ๊ด๋ฆฌ ์ฝ๋๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค. ์์ค ์ฝ๋๊ฐ ์๋ ์ปดํ์ผ๋ ์ด์ ๋ธ๋ฆฌ(IL ์ฝ๋)๋ฅผ ๋ถ์ํ์ฌ Microsoft์ .NET Framework ๋์์ธ ์ง์นจ์ ์ค์ํ๋์ง ํ์ธํฉ๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ FxCop์ Visual Studio ๋ฐ MSBuild์ ํตํฉ๋ Roslyn ๊ธฐ๋ฐ ๋ถ์๊ธฐ ์ธํธ์ธ FxCop Analyzers๋ก ๋ฐ์ ํ์ฌ ์ปดํ์ผ ๊ณผ์ ์์ C# ๋ฐ VB.NET ์ฝ๋๋ฅผ ๋ถ์ํฉ๋๋ค.
์๋์ ๋ ๋ฆฝํ FxCop์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ง๋ง, FxCop ๋ถ์๊ธฐ ํจํค์ง๋ ์ฌ์ ํ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ ๋๋ถ๋ถ ์ต์ .NET ๊ฐ๋ฐ์ ์ผ๋ถ๋ก .NET SDK ๋ถ์๊ธฐ์ ํก์๋์์ต๋๋ค.
์ฅ์
- Microsoft์์ ๊ตฌ์ถ ๋ฐ ์ ์ง ๊ด๋ฆฌํ์ฌ Visual Studio ๋ฐ .NET SDK์์ ๊ธด๋ฐํ ํตํฉ์ ๋ณด์ฅํฉ๋๋ค.
- Roslyn์ ์ฌ์ฉํ์ฌ ๋น๋ ์ ์ฝ๋๋ฅผ ๋ถ์ํ์ฌ ๋น ๋ฅด๊ณ ์ค์๊ฐ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค.
- ๋ชจ๋ฒ ์ฌ๋ก, ๋ช ๋ช ๊ท์น, ์ฑ๋ฅ ์ ์ ๋ฐ ๋์์ธ ์ง์นจ ์ค์๋ฅผ ๊ฐํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๊ท์น ์ธํธ ๋ฐ editorconfig๋ฅผ ํตํด ๊ท์น ์ต์ ๋ฐ ์ฌ์ฉ์ ์ ์๋ฅผ ์ง์ํฉ๋๋ค.
- NuGet์ ํตํด ์ฝ๊ฒ ์ค์นํ๊ณ ๊ธฐ์กด .NET Core ๋๋ .NET 5+ ํ๋ก์ ํธ์ ํตํฉํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ, ๊ธ๋ก๋ฒํ, ์์ ์ฑ, ์ ์ง ๊ด๋ฆฌ ๋ฑ์ ํฌ๊ดํ๋ ํ๋ถํ ๊ท์น ์ธํธ
- ์ด์ ํ๋ฐํ ๊ฐ๋ฐ์ด ๋ค์์ผ๋ก ์ ํ๋์์ต๋๋ค. .NET ๋ถ์๊ธฐ, ๋ฏธ๋์ ์ฐ์์ฑ์ ๋ณด์ฅํฉ๋๋ค
ํ๊ณ์ ๋จ์
FxCop ๋ถ์๊ธฐ๋ .NET ๋์์ธ ๊ท์น์ ์ ์ฉํ๋ ๋ฐ ์ ์ฉํ์ง๋ง ๋ช ๊ฐ์ง ์ฃผ์ ์ ํ ์ฌํญ์ด ์์ต๋๋ค.
- ๋ณด์ ์ค์ฌ ๋ถ์ ์์
FxCop์ ์ฌ์ธต์ ์ธ ๋ณด์ ๊ฒฐํจ, ํ ์ธํธ ์ถ์ , ๋๋ XSS๋ SQL ์ธ์ ์ ๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์ทจ์ฝ์ ์ ๋ค๋ฃจ์ง ์์ต๋๋ค. ๋ณด์ ๋ณด์ฆ์ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋๊ตฌ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. CodeQL, ๋ฒ ๋ผ์ฝ๋๋ฐ ํ๊ณ ํ ํ๋ค ํ์ํฉ๋๋ค. - ์ ํ๋ ํ์ฅ์ฑ
์ฌ์ฉ์ ์ ์ ๊ท์น ์์ฑ์ ๊ฐ๋ฅํ์ง๋ง ๋ค๋ฅธ ๋ถ์ ํ๋ ์์ํฌ์ ๋นํด ๋ณต์กํฉ๋๋ค. ์ฌ์ฉ์ ์ ์ ์ ์ฑ ์ ์ฉ์ ์ํ๋ ๊ธฐ์ ์ Roslyn Analyzer ๊ฐ๋ฐ์ด ๋ ์ ์ฐํ ์ ์์ต๋๋ค. - ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋
๋ฆฝํ ๋ฒ์
๊ธฐ์กด FxCop GUI ๋ฐ IL ์์ค ๋ถ์ ๋๊ตฌ๋ ๋ ์ด์ ์ ์ง๋์ง ์์ต๋๋ค. ๊ธฐ์กด ์ฌ์ฉ์๋ ๋์ ๋ฐฉ์๊ณผ ๋ฒ์๊ฐ ๋ค๋ฅธ Roslyn ๊ธฐ๋ฐ ๋ถ์๊ธฐ๋ก ์ ํํด์ผ ํฉ๋๋ค. - ์ํคํ
์ฒ ๋๋ ์ข
์์ฑ ๋ถ์์ ์ํด ์ค๊ณ๋์ง ์์์ต๋๋ค.
FxCop์ ์์คํ ์ํคํ ์ฒ, ๋ชจ๋ ์ข ์์ฑ ๋๋ ๊ณ์ธต์ ์๋ฐ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋๊ตฌ๊ฐ ์์ต๋๋ค. NDepend ์ด๋ฐ ๋ฌธ์ ์๋ ๋ ์ ํฉํฉ๋๋ค. - ์๊ฐ์ ๋์๋ณด๋ ๋๋ ์ธก์ ํญ๋ชฉ์ด ๋ถ์กฑํจ
FxCop์ ๋ณด๊ณ , ์ถ์ธ ์ถ์ ๋๋ ํ ์ ์ฒด ๋์๋ณด๋๋ฅผ ์ํ ๊ธฐ๋ณธ UI๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. ํผ๋๋ฐฑ์ ์ํด IDE ์ง๋จ์ด๋ ๋น๋ ์ถ๋ ฅ์ ์์กดํ๊ธฐ ๋๋ฌธ์ ํ๊ณผ ๊ด๋ฆฌ์์ ๊ฐ์์ฑ์ด ์ ํ๋ฉ๋๋ค. - .NET SDK ๋ถ์๊ธฐ์ ์ค๋ณต
์ต์ .NET ๋ฒ์ ์์๋ ๋ง์ FxCop ๊ท์น์ด SDK ๋ด์ฅ ๋ถ์๊ธฐ์ ํตํฉ๋์์ต๋๋ค. ๊ท์น ์ธํธ๋ฅผ ์ ์คํ๊ฒ ๊ด๋ฆฌํ์ง ์์ผ๋ฉด ํผ๋์ด๋ ์ค๋ณต์ด ๋ฐ์ํ ์ ์์ต๋๋ค. - MSBuild๊ฐ ์๋ ํ๊ฒฝ์ ๋ํ ์ง์์ด ๋ถ์กฑํจ
MSBuild ์ํ๊ณ ์ธ๋ถ์ ํ๋ก์ ํธ(์: Bazel์ด๋ ์ฌ์ฉ์ ์ ์ ๋น๋ ์์คํ ์ฌ์ฉ)๋ FxCop ์คํ์ผ ๊ท์น์ ํตํฉํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์ต๋๋ค.
FxCop(ํ์ฌ Roslyn ๊ธฐ๋ฐ)์ C# ํ๋ก์ ํธ, ํนํ ํ์ค ์ฝ๋ฉ ๋ฐ ๋์์ธ ๊ท์น์ ์ ์ฉํ๊ณ ์ ํ๋ ํ์ ์ํ Microsoft์์ ์ง์ํ๋ ๊ฒฌ๊ณ ํ ์ ์ ๋ถ์ ๊ธฐ๋ฐ์ ๋๋ค. ํ์ง๋ง ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์ ์ํคํ ์ฒ ๊ฒ์ฆ, ๋ณด์ ์ค์บ๋ ๋ฐ ์๊ฐ์ ๋ณด๊ณ ๋ฅผ ์ํ ์ถ๊ฐ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋์ฑ ํจ๊ณผ์ ์ ๋๋ค.
Fortify ์ ์ ์ฝ๋ ๋ถ์๊ธฐ
Fortify SCA๋ C#์ ํฌํจํ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ณด์ ์ทจ์ฝ์ ๊ณผ ์ฝ๋ ํ์ง ๋ฌธ์ ๋ฅผ ํ์งํ๋๋ก ์ค๊ณ๋ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ ์ ๋ถ์ ํ๋ซํผ์ ๋๋ค. ์์ค ์ฝ๋, ๊ตฌ์ฑ ํ์ผ ๋ฐ ๋น๋ ์ํฐํฉํธ๋ฅผ ๊ฒ์ฌํ์ฌ ๊ฐ๋ฐ ๋ผ์ดํ์ฌ์ดํด ์ด๊ธฐ ๋จ๊ณ์์ ์ ์ฌ์ ์ํ์ ์๋ณํฉ๋๋ค. Fortify๋ ์๊ฒฉํ ๊ท์ ์ค์ ๋ฐ ๋ณด์ ํ์ค ๋๋ถ์ ๊ธ์ต, ์๋ฃ, ์ ๋ถ์ ๊ฐ์ด ๊ท์ ๊ฐ ์๊ฒฉํ ์ฐ์ ์์ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
์ฅ์
- ์ต์ C# ๋ฐ .NET ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ ์ฒด ์ ์ฉ์ ํฌํจํ์ฌ ๊ด๋ฒ์ํ ์ธ์ด ๋ฐ ํ๋ ์์ํฌ ์ง์
- ์ฃผ์ ์ทจ์ฝ์ , ์์ ํ์ง ์์ ์ํธํ, ์ธ์ฆ ๋ฌธ์ ๋ฑ์ ํฌํจํ ๊ด๋ฒ์ํ ๋ณด์ ๊ฒฐํจ์ ๊ฐ์งํฉ๋๋ค.
- CWE, OWASP Top 10, SANS 25์ ๊ฐ์ ์ฐ์ ํ์ค์ ์ทจ์ฝ์ฑ ๋ถ๋ฅ์ ํตํฉํฉ๋๋ค.
- CI/CD ๋๊ตฌ, IDE(์: Visual Studio) ๋ฐ DevSecOps ํ์ดํ๋ผ์ธ๊ณผ์ ํตํฉ ์ง์
- ์ฐ์ ์์๊ฐ ์ง์ ๋ ์์ ์ง์นจ์ด ํฌํจ๋ ์์ธ ๋ณด๊ณ ์
- ๊ธฐ์ ์์ค์ ๊ฑฐ๋ฒ๋์ค, ์ถ์ ๋ฐ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํ ์ํํธ์จ์ด ๋ณด์ ์ผํฐ(SSC)๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋๋ฉ์ธ๋ณ ์ ์ฑ ์ ๋ํ ์ฌ์ฉ์ ์ ์ ๊ท์น ํฉ ๋ฐ ๊ตฌ์ฑ์ ์ง์ํฉ๋๋ค.
- ์ค๋ ๋ณด์ ์ฐ๊ตฌํ๊ณผ ์ ๊ธฐ์ ์ธ ๊ท์น ํฉ ์ ๋ฐ์ดํธ๋ก ์ง์๋จ
- ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ๋ฐ ๋ ๊ฑฐ์ .NET ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ง์์ด ํฌํจ๋ฉ๋๋ค.
ํ๊ณ์ ๋จ์
Fortify SCA๋ ๊ฐ๋ ฅํ์ง๋ง ๋ณต์ก์ฑ๊ณผ ๊ธฐ์ ์ค์ฌ์ ํน์ฑ์ผ๋ก ์ธํด ๋ค์๊ณผ ๊ฐ์ ๋จ์ ์ด ์์ต๋๋ค.
- ๋์ ํ์ต ๊ณก์
Fortify์ ์ค์ , ๊ตฌ์ฑ ๋ฐ ํ๋์ ๋ณต์กํ ์ ์์ต๋๋ค. ํจ๊ณผ์ ์ธ ๋ฐฐํฌ๋ฅผ ์ํด์๋ ์ ๋ด ๋ณด์ ์์ง๋์ด๋ ์ปจ์คํดํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. - ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์ ์ฑ๋ฅ ์ํฅ
์ ์ฒด ๊ฒ์ฌ๋ ํนํ ๋๊ท๋ชจ ๋๋ ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์๊ฐ์ด ๋ง์ด ์์๋ ์ ์์ต๋๋ค. ์ฆ๋ถ ๊ฒ์ฌ ๋๋ ๋ถ๋ถ ๊ฒ์ฌ๋ ๊ฐ๋ฅํ์ง๋ง, ์ธ์ฌํ ์กฐ์ ์ด ํ์ํฉ๋๋ค. - ๋น์ผ ๋ผ์ด์ ์ค
Fortify๋ ์์ค์์ ๊ฐ์ฅ ๋น์ผ ์๋ฃจ์ ์ค ํ๋์ด๋ฉฐ, ์ค์ ๊ท๋ชจ ํ์ด ๊ฐ๋นํ๊ธฐ์๋ ๊ฐ๊ฒฉ์ด ๋๋ฌด ๋น์ผ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ผ์ด์ ์ค๋ ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ํฌ๊ธฐ์ ์ฌ์ฉ์ ์์ ๋ฐ๋ผ ๊ณ์ธตํ๋ฉ๋๋ค. - ๊ฐ๋ฐ์๋ฅผ ์ํ ๊ฐํ๋ฅธ ์จ๋ณด๋ฉ
๋ณด์ ๊ฐ๋ ์ ์ต์ํ์ง ์์ ๊ฐ๋ฐ์๋ Fortify์ ์์ธ ๋ณด๊ณ ์๊ฐ ๋๋ฌด ๋ณต์กํ๊ณ ํด์ํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. IDE์์ ํตํฉ์ ๋์์ด ๋์ง๋ง, ๊ต์ก ์์ด๋ ๋งฅ๋ฝ ํ์ ์ด ์ด๋ ค์ธ ์ ์์ต๋๋ค. - ๋ฃฐํฉ ํ๋์ด ํ์ํฉ๋๋ค
๊ธฐ๋ณธ ๊ท์น์ ๋ง์ ์์ ๊ฒฝ๊ณ ๋ ์คํ์ง๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. ํ์ ์คํ ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ๋ ค๋ฉด ํ๋ก์ ํธ๋ณ ์ํฉ์ ๋ง์ถฐ ๊ท์น์ ์กฐ์ ํ๋ ๋ฐ ์๊ฐ์ ํฌ์ํด์ผ ํฉ๋๋ค. - ์ ํ๋ ์ํคํ
์ฒ ๋๋ ์ฝ๋ ํ์ง ํต์ฐฐ๋ ฅ
Fortify๋ ๋ณด์ ์ค์บ๋์ ํ์ํ์ง๋ง, ์ํํธ์จ์ด ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ, ์ฝ๋ ๋ณต์ก์ฑ ๋๋ ์ํคํ ์ฒ ์ ํฉ์ฑ์ ๋ํ ๊ฐ์์ฑ์ ์ ํ์ ์ ๋๋ค. ์ ์ฒด์ ์ธ ๊ด์ ์ ์ํด์๋ ๋ณด์์ ์ธ ๋๊ตฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. - ํตํฉ ๊ณผ์ ๊ตฌ์ถ
๋นํ์ค ๋น๋ ํ๊ฒฝ์ด๋ ์ฌ์ฉ์ ์ ์ ํ์ดํ๋ผ์ธ์ ๊ฒฝ์ฐ Fortify ์ค์บ์ CI/CD ์ํฌํ๋ก์ ์์ ํ ํตํฉํ๋ ค๋ฉด ์ถ๊ฐ์ ์ธ ๋ ธ๋ ฅ์ด ํ์ํ ์ ์์ต๋๋ค.
Fortify๋ ์ฑ์ํ ๋ณด์ ๊ดํ, ๊ท์ ๋ ํ๊ฒฝ, ๊ทธ๋ฆฌ๊ณ ์ฌ์ธต์ ์ธ ์ทจ์ฝ์ ์ค์บ๋๊ณผ ์ค์ ์ง์ค์ ์ํ ๊ด๋ฆฌ๊ฐ ํ์ํ ๋ณต์กํ C# ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๋ ์กฐ์ง์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ํฌ๊ด์ ์ธ ๋ณด์๋ณด๋ค ์๋์ ์ฌ์ฉ์ฑ์ ์ฐ์ ์ํ๋ ์๊ท๋ชจ ํ์ด๋ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ, ๊ฐ๋ฒผ์ด ๋๊ตฌ๊ฐ ๋ ๋์ ๋น์ฉ ๋๋น ๊ฐ์น๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ฒดํฌ ๋งํฌ์ค
Checkmarx๋ ๊ธฐ์ ์ด ๊ฐ๋ฐ ๋ผ์ดํ์ฌ์ดํด ์ด๊ธฐ์ ์์ค ์ฝ๋์ ๋ณด์ ์ทจ์ฝ์ ์ ํ์ ํ๊ณ ํด๊ฒฐํ ์ ์๋๋ก ์ง์ํ๋ ์ ๋์ ์ธ ์ํฐํ๋ผ์ด์ฆ SAST ํ๋ซํผ์ ๋๋ค. ASP.NET, Blazor ๋ฐ ๋ ๊ฑฐ์ .NET Framework ์ฑ์ ํฌํจํ์ฌ C# ๋ฐ .NET ํ๊ฒฝ์ ๋ํ ์ฌ์ธต ๋ถ์ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋ค์ํ ์ธ์ด์ ํ๋ ์์ํฌ๋ฅผ ์ง์ํฉ๋๋ค. ์ต์ DevSecOps ์ํฌํ๋ก์ ํตํฉ๋๋๋ก ์ค๊ณ๋ Checkmarx๋ ๊ธ์ต, ์๋ฃ, ๊ตญ๋ฐฉ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
์ฅ์
- ์ ์ฒด ๊ตฌ๋ฌธ, ์๋ฏธ ๋ฐ ํ๋ฆ ๋ถ์์ ํฌํจํ C# ๋ฐ .NET ๊ธฐ๋ฐ ํ๋ก์ ํธ์ ๋ํ ํฌ๊ด์ ์ธ ์ง์
- SQL ์ฃผ์ , ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ , ํ๋์ฝ๋ฉ๋ ๋น๋ฐ, ์์ ํ์ง ์์ ์ญ์ง๋ ฌํ ๋ฐ ์ธ์ฆ ๊ฒฐํจ๊ณผ ๊ฐ์ ์ทจ์ฝ์ ์ ํจ๊ณผ์ ์ผ๋ก ๊ฐ์งํฉ๋๋ค.
- ์ํฉ์ ๋ง๋ ์ทจ์ฝ์ฑ ์ถ์ ์ ์ ๊ณตํ๊ธฐ ์ํด ๋ฐ์ดํฐ ํ๋ฆ ๋ฐ ์ ์ด ํ๋ฆ ๋ชจ๋ธ๋ง์ ํ์ฉํฉ๋๋ค.
- Visual Studio, Azure DevOps, GitHub, GitLab, Jenkins ๋ฑ๊ณผ ํตํฉ๋ฉ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ์ค์บ๋ ์ ์ฑ ๋ฐ ๊ท์ ์ค์ ๋งคํ(์: OWASP Top 10, PCI DSS, HIPAA, GDPR)
- ๊ฐ๋ฐ์๊ฐ ๋ฌธ์ ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ํด๊ฒฐํ ์ ์๋๋ก ๋๋ ์์์ ํจ๊ป ์์ ์ง์นจ์ด ํฌํจ๋์ด ์์ต๋๋ค.
- ์ํ ๊ด๋ฆฌ, ๊ท์ ์ค์ ๋ฐ ๊ฐ์ฌ ์ค๋น๋ฅผ ์ํ ์ค์ ์ง์ค์ ๋์๋ณด๋ ๋ฐ ๋ณด๊ณ
- ๊ด๋ฆฌํ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ์ค์บ๋ ์๋น์ค(Checkmarx One)์ ์จํ๋ ๋ฏธ์ค ๋ฐฐํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- SCA(์ํํธ์จ์ด ๊ตฌ์ฑ ๋ถ์) ๋ฐ IaC(์ฝ๋๋ก์์ ์ธํ๋ผ) ๋๊ตฌ์์ ํตํฉ์ ์ง์ํฉ๋๋ค.
ํ๊ณ์ ๋จ์
Checkmarx๋ ๊ธฐ์ ์ ์ ํฉํ ๊ฐ์ ์ด ์์ง๋ง, C#์ ์ฌ์ฉํ๋ ํ์ ํนํ ์ค์ํ ๋ช ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค.
- ๋ฆฌ์์ค๊ฐ ๋ง์ด ํ์ํ๊ณ ๋ณต์กํ ์ค์
๊ท์น ์กฐ์ ๋ฐ CI ํตํฉ์ ํฌํจํ ์ด๊ธฐ ๊ตฌ์ฑ์๋ ์๊ฐ์ด ๋ง์ด ์์๋ ์ ์์ต๋๋ค. ํจ๊ณผ์ ์ธ ๋ฐฐํฌ๋ฅผ ์ํด์๋ ์จ๋ณด๋ฉ ์ง์์ด๋ ๊ณต๊ธ์ ์ฒด์ ์ง์์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. - ๋ ๊ฑฐ์ C# ์ฝ๋๋ฒ ์ด์ค์ ๊ฑฐ์ง ๊ธ์
์ค๋๋์๊ฑฐ๋ ๋นํ์ค ์ฝ๋ ํจํด(์: ๋์ ๋ฐ์ฌ ๋๋ ADO.NET)์ ์ฌ์ฉํ๋ฉด ๊ฒ์ฌ ๊ท์น์ ์ฌ์ฉ์ ์ง์ ํ์ง ์์ผ๋ฉด ๊ฑฐ์ง ์์ฑ๋ฅ ์ด ๋์์ง ์ ์์ต๋๋ค. - ์ ํ๋ ์ํคํ
์ฒ/์ฝ๋ ํ์ง ์ธก์ ํญ๋ชฉ
Checkmarx๋ ๋ณด์ ์ทจ์ฝ์ ํ์ง์ ํ์ํ์ง๋ง, ์ ์ง๋ณด์์ฑ, ๋ชจ๋์ฑ, ๋๋ ํด๋ฆฐ ์ํคํ ์ฒ ์์น ์ค์์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ํ์ ์ ๋๋ค. NDepend๋ ReSharper์ ๊ฐ์ ๋๊ตฌ๋ ํ์ง ๊ด๋ฆฌ ์ธก๋ฉด์์ ์ฌ์ ํ ํ์ํฉ๋๋ค. - ๋์ ๋น์ฉ๊ณผ ๊ธฐ์
์ค์ฌ
๋ผ์ด์ ์ค ๋น์ฉ์ด ์๋นํ๋ฉฐ ์๊ท๋ชจ ํ์ด๋ ์คํํธ์ ์๋ ํ์ฅ์ฑ์ด ๋จ์ด์ง ์ ์์ต๋๋ค. ์ด ํ๋ซํผ์ ์ฃผ๋ก ๋๊ท๋ชจ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ๋ณด์์ ์ค์ํ๋ ๊ธฐ์ ์ ์ ํฉํฉ๋๋ค. - ๋๊ท๋ชจ C# ํ๋ก์ ํธ์ ์ค์บ ๊ธฐ๊ฐ
์ฌ์ธต ์ค์บ ์ ํ๋๋ ์ฒ๋ฆฌ ์๊ฐ์ ์ฆ๊ฐ์ํต๋๋ค. ๋ชจ๋๋ฆฌ์ ๋๋ ๋ฐ์ ํ๊ฒ ๊ฒฐํฉ๋ ์ฝ๋๋ฒ ์ด์ค์์ ์ต์ ํ ์์ด ์ค์บ์ ์ํํ๋ฉด ํ์ดํ๋ผ์ธ ์๋๊ฐ ์ ํ๋ ์ ์์ต๋๋ค. - ์ผ๋ถ .NET ๊ด๋ จ ์ํฌํ๋ก์์ ๊ธด๋ฐํ ํตํฉ์ด ์์ต๋๋ค.
Microsoft ๊ธฐ๋ณธ ๋๊ตฌ์ ๋น๊ตํ์ ๋ ๋ถ์๊ธฐ, null ๊ฐ๋ฅ ์ฐธ์กฐ ์ ํ ๋๋ ๋ฐํ์๋ณ ๊ตฌ์ฑ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ๊ณผ์ ํตํฉ์ด ๋ถ์กฑํ ์ ์์ต๋๋ค. - ๊ฐ๋ฐ์๋ฅผ ์ํ ํ์ต ๊ณก์
๋ณด์ ์ฝ๋ฉ์ด๋ ๊ณ ๊ธ ์ทจ์ฝ์ ์ ํ์ ์ต์ํ์ง ์์ ๊ฐ๋ฐ์๋ ์ง์นจ์ด๋ ๊ต์ก ์์ด ๋ณด๊ณ ์ ์ถ๋ ฅ์ ํด์ํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
Checkmarx๋ ๊ฐ๋ฐ ํ์ดํ๋ผ์ธ ์ ๋ฐ์ ๊ฑธ์ณ ๊ฐ๋ ฅํ๊ณ ์๋ํ๋ ์ทจ์ฝ์ ํ์ง๋ฅผ ํ์๋ก ํ๋ ์ํฐํ๋ผ์ด์ฆ๊ธ .NET/C# ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ๊น์ด์ ์ ์ด ์ธก๋ฉด์์ ๊ฐ๋ ฅํ์ง๋ง, ๊ฐ๋ฒผ์ด ์ฝ๋ ๋๋ ์ค์๊ฐ ์ ์ ์ฝ๋ ํผ๋๋ฐฑ์ด ํ์ํ ํ์๊ฒ๋ ๊ณผ๋ํ๊ฑฐ๋ ๋ฆฌ์์ค ์ฌ์ฉ๋์ด ๋๋ฌด ๋ง์ ์ ์์ต๋๋ค.
Veracode ์ ์ ๋ถ์
Veracode๋ ๊ฐํธํ ์จ๋ณด๋ฉ ๋ฐ ์ํฐํ๋ผ์ด์ฆ ๊ฑฐ๋ฒ๋์ค๋ก ์ ๋ช ํ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ ์คํธ(SAST) ํ๋ซํผ์ ์ ๊ณตํฉ๋๋ค. ์ํ, ์๋ฃ, ๋ณดํ ๋ฑ ์๊ฒฉํ ๊ท์ ์ค์ ์๋ฌด๊ฐ ์๋ ์ฐ์ ์์ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. C# ๊ฐ๋ฐ์์ .NET ํ์ ์ํด Veracode๋ ASP.NET Core, Blazor ๋ฐ ๋ ๊ฑฐ์ .NET Framework ํ๋ก์ ํธ๋ฅผ ํฌํจํ ์น ๋ฐ ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ ๋ถ์์ ์ง์ํฉ๋๋ค.
์ฅ์
- .NET Core ๋ฐ .NET 6+๋ฅผ ํฌํจํ ์ต์ ๋ฐ ๋ ๊ฑฐ์ C# ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ์ ์ฒด ์ง์
- ์ฃผ์ , ์ํธํ ๊ฒฐํจ, ์์ ํ์ง ์์ API ๋ฐ ๋น์ฆ๋์ค ๋ก์ง ๋ฌธ์ ๋ฅผ ํฌํจํ ๊ด๋ฒ์ํ ์ทจ์ฝ์ ์ ๊ฐ์งํฉ๋๋ค.
- ์์ ํ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ก ์ธํด ๋ก์ปฌ ์ธํ๋ผ๊ฐ ํ์ํ์ง ์์ต๋๋ค.
- ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ(DLL, EXE ๋ฑ)๋ฅผ ์ฌ์ฉํ ๊ฐ๋จํ ์ ๋ก๋ ๋ฐ ์ค์บ ๋ชจ๋ธ
- OWASP Top 10, CWE, SANS 25 ๋ฐ ์ ๊ณ๋ณ ๊ท์ ์ ์ค์ํฉ๋๋ค.
- ๋ณด์ ์ฝ๋ฉ ๊ดํ์ ์๋ ์ ์ฉ์ ํตํด ์ ์ฑ ๊ธฐ๋ฐ ๊ฐ๋ฐ์ ์ง์ํฉ๋๋ค.
- Visual Studio, Azure DevOps, Jenkins, GitHub, GitLab ๋ฐ ๊ธฐํ CI/CD ํ๋ซํผ๊ณผ ํตํฉ๋ฉ๋๋ค.
- ๋ช ํํ ์์ ์ง์นจ, CWE ๋งํฌ ๋ฐ ์์ ๊ถ์ฅ ์ฌํญ์ ์ ๊ณตํฉ๋๋ค.
- ๊ท์ ์ค์ ๋ฐ ๊ฐ์ฌ ์ถ์ ์ ์ํ ๋ถ์ ๋์๋ณด๋์ ์ค์ ์ง์ค์ ์ํ ๋ณด๊ณ ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ณด์ ์ฐ๊ตฌ ๋ฐ ์ ๊ธฐ์ ์ธ ๊ท์น ํฉ ์ ๋ฐ์ดํธ ์ง์
ํ๊ณ์ ๋จ์
Veracode๋ C#์ ๋ํ ๊ฐ๋ ฅํ ๋ณด์ ๋ถ์์ ์ ๊ณตํ์ง๋ง, ๊ตฌ์กฐ์ , ์ค์ฉ์ ์ธก๋ฉด์์ ๋ช ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค.
- ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ ์ค์บ๋์ ์์ค ์์ค ์ปจํ
์คํธ๋ฅผ ์ ํํฉ๋๋ค.
Veracode๋ ์ปดํ์ผ๋ ์ฝ๋์์ ์๋ํ๊ธฐ ๋๋ฌธ์ ์ฃผ์ ์ฒ๋ฆฌ๋ ์์ ํ์ง ์์ ์ฝ๋, ์ฝ๋ ์ฃผ์, ์ธ๋ถํ๋ ์ ์ด ํ๋ฆ ์กฐ๊ฑด ๋ฑ ๊ฐ๋ฐ ๊ณผ์ ์์ ๋ฐ์ํ๋ ์ผ๋ถ ๊ตฌ์ฑ ์์๋ฅผ ํ์ ํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์ฑ์ ์ ๋ก๋ํ๊ธฐ ์ ์ ์ปดํ์ผํด์ผ ํฉ๋๋ค. - ์ค์๊ฐ IDE ๊ธฐ๋ฐ ํผ๋๋ฐฑ์ ์ง์ํ์ง ์์ต๋๋ค.
Roslyn Analyzers๋ ReSharper์ ๊ฐ์ ๋๊ตฌ์ ๋ฌ๋ฆฌ Veracode๋ ๊ฐ๋ฐ ๊ณผ์ ์์ ์ธ๋ผ์ธ ๋๋ ๋ํํ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ทจ์ฝ์ ์ ๋ฐ์ด๋๋ฆฌ๊ฐ ๋น๋๋๊ณ ์ ๋ก๋๋ ํ์๋ง ๋๋ฌ๋ฉ๋๋ค. - CI/CD์ ๋๋ฆฐ ํผ๋๋ฐฑ ๋ฃจํ
์ฌ๋ฌ ํ์ดํ๋ผ์ธ๊ณผ ํตํฉ๋์ด ์์ง๋ง, ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ ๋ก๋ํ๊ณ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ณผ์ ์ ๋น ๋ฅธ ๋ฐ๋ณต ์์ ์ด๋ ํ ์คํธ ์ค์ฌ ์ํฌํ๋ก์ฐ๋ฅผ ์ง์ฐ์ํฌ ์ ์์ต๋๋ค. ํ๋ ์์ด ์ด๋ฐํ ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ฅผ ์ํํด์ผ ํ๋ ํ๊ฒฝ์๋ ์ ํฉํ์ง ์์ต๋๋ค. - ์ ํ๋ ์ ์ ์ฝ๋ ํ์ง ๋๋ ์คํ์ผ ์ ์ฉ
Veracode๋ ์ผ๋ฐ์ ์ธ ์ฝ๋ ํ์ง, ์ํคํ ์ฒ ๊ฒ์ฆ ๋๋ ์์๋ณด๋ค๋ ๋ณด์ ๊ฒฐํจ์ ์ค์ ์ ๋ก๋๋ค. ํ์ ์ ์ฒด ๋ฒ์๋ฅผ ํฌ๊ดํ๊ธฐ ์ํด StyleCop, NDepend ๋๋ ESLint์ ๊ฐ์ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. - ๊ธฐ์
์์ค ๊ฐ๊ฒฉ ์ฑ
์
์๊ท๋ชจ ํ์๊ฒ๋ ์ผ๋ฐ์ ์ผ๋ก ๋น์ฉ์ด ๋ถ๋ด์ค๋ฌ์ธ ์ ์์ต๋๋ค. ์ด ํ๋ซํผ์ ๋ณด์ ์ค์ฌ ๊ฐ๋ฐ์ ์ง์ํ ์์ฐ๊ณผ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ถ ์ค๊ฒฌ ๋ฐ ๋๊ธฐ์ ์ ์ํด ์ค๊ณ๋์์ต๋๋ค. - ๊ท์น ์ฌ์ฉ์ ์ ์ ๋ถ์กฑ
์คํ ์์ค๋ ๋ก์ปฌ ํธ์คํ ๋๊ตฌ์ ๋น๊ตํ์ ๋, Veracode๋ ๋ ์ ์ ์ธ ์ฝ๋ฉ ํจํด์ด๋ ํ์ C# API์ ๋ํ ์๋ก์ด ํ์ง ๊ท์น์ ์ฌ์ฉ์ ์ ์ํ๊ฑฐ๋ ์์ฑํ๋ ๊ธฐ๋ฅ์ด ์ ํ์ ์ ๋๋ค.
Veracode๋ ๊ฑฐ๋ฒ๋์ค ๋ฐ ๊ฐ์ฌ ๊ธฐ๋ฅ์ ๊ฐ์ถ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ ์์ ํ ์ ์ ๋ถ์ ์ ๊ทผ ๋ฐฉ์์ ์ํ๋ ์กฐ์ง์ ์ ํฉํ ์๋ฃจ์ ์ ๋๋ค. ํ์ง๋ง ์ฆ๊ฐ์ ์ธ ๊ฐ๋ฐ์ ํผ๋๋ฐฑ์ด๋ ์์ค ์์ค ์ ์ด๊ฐ ํ์ํ ํ์ IDE ํตํฉ ๋๋ ์คํ ์์ค ํ๋ซํผ๋ณด๋ค ์๋ต์ฑ์ด ๋จ์ด์ง ์ ์์ต๋๋ค.
ํด๋ก์ํฌ
Perforce์์ ๊ฐ๋ฐํ Klocwork๋ ๊ณ ์ ๋ขฐ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ํด ์ค๊ณ๋ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ ์คํธ(SAST) ๋๊ตฌ์ ๋๋ค. C#, C++, Java, Python, JavaScript ๋ฑ ๋ค์ํ ์ธ์ด๋ฅผ ์ง์ํ๋ฉฐ, ์๋์ฐจ, ํญ๊ณต์ฐ์ฃผ, ๋ฐฉ์, ์๋ฃ ๋ฑ ๊ท์ ๊ฐ ์๊ฒฉํ๊ณ ์์ ์ด ์ค์ํ ์ฐ์ ์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
C# ํ์ ๊ฒฝ์ฐ, Klocwork๋ ๊ฐ๋ฐ ์ฃผ๊ธฐ ์ด๊ธฐ์ ๋ณด์ ์ทจ์ฝ์ , ์ฝ๋ ๊ฒฐํจ, ์ ์ง ๊ด๋ฆฌ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
์ฅ์
- ์ต์ C# ํ์ค๊ณผ Visual Studio ๋ฐ MSBuild์์ ํตํฉ์ ์ง์ํฉ๋๋ค.
- ๋ฒํผ ์ค๋ฒํ๋ก, null ์ฐธ์กฐ ์์ธ, ์ฃผ์ ์ทจ์ฝ์ , ๋์์ฑ ๋ฌธ์ ๋ฐ ๋ ผ๋ฆฌ ๊ฒฐํจ์ ๊ฐ์งํฉ๋๋ค.
- ๊ฐํ ์ง์ค ๋ณด์ ์ค์OWASP Top 10, CWE, MISRA ๋ฐ CERT ํ์ค์ ๋ํ ๋ด์ฅ ๊ท์น ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ ๊ณต ์ฆ๋ถ ๋ถ์ ์ฝ๋ ๋ณ๊ฒฝ ์ ์ ์์ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ฌ ํ๊ท๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ฑ๋ฅ ์ ํ ์์ด ๋๊ท๋ชจ ๋ณต์กํ C# ์ฝ๋๋ฒ ์ด์ค์ ํธํ ๊ฐ๋ฅ
- Jenkins, GitHub Actions, Azure DevOps ๋ฑ์ ํฌํจํ CI/CD ํ์ดํ๋ผ์ธ๊ณผ ํตํฉ๋ฉ๋๋ค.
- ์ ๊ณต ๊ฒฐํจ ํ๋ฆ์ ์ถ์ ์ฑ ๊ทผ๋ณธ ์์ธ์ ์ดํดํ๊ธฐ ์ํ ์ฌ์ธต ์ง๋จ
- ๊ฐ๋ฐ์๋ฅผ ์ํ ๋ฐ์คํฌํฑ ํ๋ฌ๊ทธ์ธ๊ณผ ๊ด๋ฆฌ์ ๋ฐ QA๋ฅผ ์ํ ์๋ฒ ๊ธฐ๋ฐ ๋ณด๊ณ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค.
- ๋ชจ๋๋ฆฌ์ ๋๋ ๋ง์ดํฌ๋ก์๋น์ค ๊ธฐ๋ฐ ์์คํ ์์ ์์ ํ๋ ๋ถ์ฐ ํ์ ํ์ฅ ๊ฐ๋ฅ
- DevSecOps ๋ฐ Agile ์ค์ ์์ ๋ณด์ ์ค์ฌ ๊ฐ๋ฐ์ ์ง์ํฉ๋๋ค.
ํ๊ณ์ ๋จ์
Klocwork๋ ๊ธฐ์ ์ ๋ฐ๋ก ์ ์ฉ ๊ฐ๋ฅํ์ง๋ง, ํนํ ๊ท๋ชจ๊ฐ ์๊ฑฐ๋ ๊ท์ ๊ฐ ๋ํ ๊ฐ๋ฐ ํ์ ๊ฒฝ์ฐ ๋์ ์ด๋ ์ฌ์ฉ์ฑ์ ์ ํดํ ์ ์๋ ๋ช ๊ฐ์ง ๊ณผ์ ์ ์์ญ์ด ์์ต๋๋ค.
- ๋ณต์กํ ๊ตฌ์ฑ๊ณผ ๊ฐํ๋ฅธ ํ์ต ๊ณก์
๋ถ์ ๊ท์น์ ์ด๊ธฐ ์ค์ ๋ฐ ์ธ๋ถ ์กฐ์ ์๋ ์๋นํ ์๊ฐ๊ณผ ๋๋ฉ์ธ ์ง์์ด ํ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํ์ ๊ต์ก์ ์๊ฐ์ ํ ์ ํ๊ฑฐ๋ ์ ๋ด ๋ณด์ ์์ง๋์ด๋ฅผ ํฌ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. - ๊ฐ๋ฒผ์ด ๋ถ์๊ธฐ์ ๋นํด ๋ ๋ฌด๊ฑฐ์ด ์ค์น ๊ณต๊ฐ
Klocwork๋ Roslyn์ด๋ StyleCop๊ณผ ๊ฐ์ ๊ฐ๋จํ ๋๊ตฌ๋ณด๋ค ๋ ๋ง์ ๋ฆฌ์์ค๋ฅผ ์๋ชจํ๋ฏ๋ก ์ฌ์์ด ๋ฎ์ ์ปดํจํฐ์์๋ CI ํ์ดํ๋ผ์ธ์ด๋ ๊ฐ๋ฐ ํ๊ฒฝ์ด ๋๋ ค์ง ์ ์์ต๋๋ค. - ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๋ฐ์ ์นํ์ ์ด์ง ์์
ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ ์ ์์ง๋ง, ๊ฐ๋ฐ์๋ ์ต์ IDE ํตํฉ ๋๊ตฌ์ ๋นํด UX๊ฐ ์ง๊ด์ ์ด์ง ์๋ค๊ณ ๋๋ ์ ์์ต๋๋ค. ์ผ๋ถ ๊ฒฐ๊ณผ๋ฅผ ํด์ํ๋ ค๋ฉด ์๋ จ๋ ์ ๋ฌธ๊ฐ์ ์ ๋ฌธ ์ง์์ด ํ์ํ ์ ์์ต๋๋ค. - ๋์ ๋น์ฉ๊ณผ ๊ธฐ์
ํฌ์ง์
๋
๋ผ์ด์ ์ค๋ ์ค๋ํ ์กฐ์ง์ ๋์์ผ๋ก ๊ฐ๊ฒฉ์ด ์ฑ ์ ๋์ด ์์ต๋๋ค. ์๊ท๋ชจ ํ์ด๋ ์คํ์์ค ํ๋ก์ ํธ์์๋ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. - ์ ํ๋ ์คํ์์ค ์ปค๋ฎค๋ํฐ์ ํ์ฅ์ฑ
์ปค๋ฎค๋ํฐ ์ํ๊ณ(์: ESLint, Roslyn)์ ์ํด ์ง์๋๋ ๋ถ์๊ธฐ์ ๋ฌ๋ฆฌ Klocwork๋ ๋ ์ ์ ์ด์ด์ ๊ณต๊ธ์ ์ฒด์ ์ง์ ์์ด ์ฌ์ฉ์ ์ ์ ๊ท์น์ ํ์ฅํ๊ฑฐ๋ ์์ฑํ๋ ๋ฐ ์์ด ์ ์ฐ์ฑ์ด ๋จ์ด์ง๋๋ค. - UI ๋ฐ ๋ณด๊ณ ์ ๊ฒฝํ
๋ฌธ์ ๋ณด๊ณ ๋ฐ ๋ถ๋ฅ๋ฅผ ์ํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ ๊ธฐ๋ฅ์ ์ด์ง๋ง ๊ตฌ์์ ๋๋ค. ์ผ๋ถ ํ์ ๋ง์ ์์ ๋ฐ๊ฒฌ ์ฌํญ๊ณผ ํจ๊ป ์ฌ์ฉ์ฑ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค.
Klocwork๋ ๊ท์ ์ค์, ์์ ํ ์ฝ๋, ๊ทธ๋ฆฌ๊ณ ๊ณต์์ ์ธ ๊ฒฐํจ ์ถ์ ์ ์๊ตฌํ๋ ์ํฐํ๋ผ์ด์ฆ ๋๋ ๋ฏธ์ ํฌ๋ฆฌํฐ์ปฌ C# ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ํฉํฉ๋๋ค. ํ์ง๋ง ๋น ๋ฅด๊ณ ๊ฐ๋ฐ์ ์นํ์ ์ธ ํผ๋๋ฐฑ๊ณผ ์ ์ฐํ ํด์ ์ํ๋ ์๊ท๋ชจ ์ ์์ผ ํ์ด๋ ์กฐ์ง์๋ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
์ ๊ทธ๋
Semgrep์ r2c(ReturnToCorp)์์ ๊ฐ๋ฐํ ์คํ์์ค ์ ์ ๋ถ์ ๋๊ตฌ๋ก, C#์ ํฌํจํ ์ฌ๋ฌ ์ธ์ด์์ ๊ฐํธํจ, ์๋, ๊ทธ๋ฆฌ๊ณ ๊ท์น ๊ธฐ๋ฐ ์ค์บ๋์ ๊ฐ์กฐํฉ๋๋ค. ํนํ ๋ณด์ ์์ง๋์ด์ DevSecOps ํ์์ ํจํด ๋งค์นญ ๊ธฐ๋ฅ๊ณผ ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ๊ท์น์ ํตํด ๋ณด์ ๋ฌธ์ ์ ์ฝ๋ ํ์ง ๋ฌธ์ ๋ฅผ ๋ชจ๋ ํฌ์ฐฉํ๋ ๊ธฐ๋ฅ ๋๋ถ์ ์ธ๊ธฐ๊ฐ ๋์ต๋๋ค.
Semgrep์ ์ปค๋ฎค๋ํฐ์ ์์ ๊ณ์ธต ๋ชจ๋์์ C#์ ์ง์ํ๋ฉฐ ํด๋ผ์ฐ๋ ๋ฐ ์ ํ ํธ์คํ ๋ฐฐํฌ ๋ชจ๋ธ์ ์ ๊ณตํฉ๋๋ค.
์ฅ์
- ์ต์ C# ๊ตฌ๋ฌธ์ ์ง์ํ๋ ๊ฐ๋ณ๊ณ ๋น ๋ฅธ CLI ๊ธฐ๋ฐ ๋ถ์๊ธฐ
- ์์ฑ ๋ฐ ์ดํด๊ฐ ์ฌ์ด YAML ๊ธฐ๋ฐ ๊ท์น์ ํตํด ์กฐ์ง์ ์ฝ๋ฉ ๊ดํ์ ๋ง๋ ์ฌ์ฉ์ ์ ์ ํจํด์ ํ์ฉํฉ๋๋ค.
- ๋น ๋ฅธ ์คํ ๋ฐ GitHub Actions, GitLab CI, Azure DevOps ๋ฑ๊ณผ์ CI/CD ํตํฉ์ผ๋ก DevSecOps ํ์ดํ๋ผ์ธ์ ์ ํฉ
- ๋ณด์, ์ ์ง ๊ด๋ฆฌ ๋ฐ ์ฑ๋ฅ์ ์ํ ๋ด์ฅ ๊ท์น ๋ผ์ด๋ธ๋ฌ๋ฆฌ(OWASP Top 10, SANS 25 ๋ฑ ํฌํจ)
- ๋ณํฉ ๋๋ ๋ฐฐํฌ ์ ์ ๋ฌธ์ ๋ฅผ ํฌ์ฐฉํ์ฌ ๋ณด์์ ์ผ์ชฝ์ผ๋ก ์ด๋์ํค๋ ๋ฐ ๋ํ ๊ฐ๋ ฅํ ์ง์
- ๊ณต์ ์ฝ๋๋ฒ ์ด์ค ์ ๋ฐ์ ๊ฑธ์ณ ๋ณด์ ํจํด๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ์ฉํ๋ ๋ฐ ํจ๊ณผ์ ์ ๋๋ค.
- ํด๋ผ์ฐ๋ ํ๋ซํผ(Semgrep Cloud Platform)์๋ ๋์๋ณด๋, PR ์ฝ๋ฉํ , ๊ฐ์ฌ ๋ก๊ทธ ๋ฐ ํ ๊ธฐ๋ฐ ๊ท์น ์ํ์ด ํฌํจ๋ฉ๋๋ค.
- Semgrep Supply Chain ๋ฐ Semgrep Secrets๋ฅผ ์ฌ์ฉํ์ฌ ๋์ฑ ์ฌ์ธต์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ์ ์ฉ ๋ฒ์ ํ์ฅ ๊ฐ๋ฅ
- ํ๊ธฐ์ฐฌ ์ปค๋ฎค๋ํฐ์ ๋์์์ด ์ฑ์ฅํ๋ ์คํ ๊ท์น ๋ฑ๋ก๋ถ
- ์๊ท๋ชจ ํ์ ์ํ ๋๋ํ ํ๋์ ์ง์ ์ฅ๋ฒฝ ์๋ ๋ฌด๋ฃ ๊ณ์ธต ์ ๊ณต
ํ๊ณ์ ๋จ์
Semgrep์ ์ ์ฐ์ฑ๊ณผ ์๋์๋ ๋ถ๊ตฌํ๊ณ C# ์ฝ๋์ ์ ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋นํ ์ ํ์ด ์์ต๋๋ค. ํนํ ์ฌ์ธต์ ์ธ ์ ์ ๋ถ์ ์์ ์ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
- C#์ ๋ํ ๋ถ๋ถ์ ์ธ ์ธ์ด ์ง์
JavaScript, Python, Go์ ๋ํ ์ฑ์ํ ์ง์์ ๋นํด Semgrep์ C# ์ง์์ ์์ง ๊ฐ๋ฐ ๋จ๊ณ์ ์์ต๋๋ค. LINQ, async/await ํ๋ฆ, ์ ๋ค๋ฆญ, ๋ณต์กํ ํํ์ ํธ๋ฆฌ์ ๊ฐ์ ๊ณ ๊ธ C# ๊ธฐ๋ฅ์ ์์ ํ ํ์ฑํ๊ฑฐ๋ ์ดํดํ์ง ๋ชปํ ์ ์์ต๋๋ค. - ์ฌ์ธต์ ์ธ ๋ฐ์ดํฐ ํ๋ฆ ๋ถ์ ์์
Semgrep์ ๊ตฌ๋ฌธ ๋ฐ ์๋ฏธ ๋งค์นญ์ ํ์ํ์ง๋ง Coverity, Klocwork, CodeQL๊ณผ ๊ฐ์ ๋๊ตฌ๊ฐ ์ ๊ณตํ๋ ๊ณ ๊ธ ์ ์ด ํ๋ฆ ๋ฐ ์ค์ผ ๋ถ์ ๊ธฐ๋ฅ์ด ๋ถ์กฑํฉ๋๋ค. ์ด๋ก ์ธํด ์ฌ๋ฌ ํ์ผ์ด๋ ๋ฉ์๋ ํธ์ถ์ ๊ฑธ์ณ ๋ฐ์ํ๋ ์ทจ์ฝ์ ์ ํ์งํ๋ ๋ฅ๋ ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค. - ์ ํ๋ IDE ํตํฉ
Roslyn ๊ธฐ๋ฐ ๋ถ์๊ธฐ๋ ReSharper์ ๋ฌ๋ฆฌ Semgrep์ ๊ธฐ๋ณธ์ ์ผ๋ก Visual Studio ๋๋ Rider ๋ด๋ถ์์ ์ธ๋ผ์ธ ์ง๋จ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์ฌ์ฉ์ ์ง์ ํตํฉ์ ์์ฑํ์ง ์๋ ํ CI ํผ๋๋ฐฑ์ ์์กดํ๊ฑฐ๋ ์๋ ๊ฒ์ฌ ๋๊ตฌ๋ก ์ฌ์ฉํด์ผ ํฉ๋๋ค. - ์๊ฐํ๋ ์ํคํ
์ฒ ๋ถ์์ด ์์ต๋๋ค
๊ธฐ์ ํ์ ์์ฃผ ํ์ํ ์ข ์์ฑ ๊ทธ๋ํ, ์ฝ๋ ๋ฉํธ๋ฆญ ๋๋ ์ํคํ ์ฒ ๊ฒ์ฆ ๊ธฐ๋ฅ์ ๋ํ ์ง์์ด ์์ต๋๋ค. - ๊ท์น ์์ฑ์ ์ํ ๊ฐํ๋ฅธ ํ์ต ๊ณก์
๊ธฐ๋ณธ ๊ท์น์ ์์ฑํ๊ธฐ ์ฝ์ง๋ง ๋๊ท๋ชจ C# ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ์์ ์ ์ด๊ณ ๋ ธ์ด์ฆ ์๋ ํจํด์ ๋ง๋ค๋ ค๋ฉด Semgrep์ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์ธ์ด ๋ด๋ถ์ ๋ํ ์์ธํ ์ง์์ด ํ์ํ ์ ์์ต๋๋ค. - ์ผ๋ฐ์ ์ธ ํ์ง ์ํ๋ณด๋ค ๋ณด์ ์ํฌํ๋ก์์ ๋ ํจ๊ณผ์ ์
๋๋ค.
Semgrep์ ๊ฐ์ ์ ๋ณด์ ์ค์บ๋๊ณผ ์ ์ฑ ์ค์์ ์์ต๋๋ค. ์คํ์ผ ๊ท์น ์ ์ฉ์ด๋ ์ํ ๋ณต์ก๋ ๊ฒ์ฌ ๊ธฐ๋ฅ์ NDepend๋ StyleCop๊ณผ ๊ฐ์ ๋๊ตฌ๋งํผ ์๋ฒฝํ์ง๋ ์์ต๋๋ค.
Semgrep์ DevSecOps ๋ฐฉ์์ ๋์ ํ๊ณ ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ๊ณ ๋น ๋ฅด๋ฉฐ ํ์ ์ ์ธ ์ค์บ๋์ ํ์๋ก ํ๋ ํ๋ ํ์๊ฒ ํ์ํ ์ ํ์ ๋๋ค. C# ๊ฐ๋ฐ์ ๊ฒฝ์ฐ, ์ฌ์ธต ๋ถ์๊ธฐ๋ IDE ๊ธฐ๋ฐ ์๋ฃจ์ ์ ์์ ํ ๋์ฒดํ๊ธฐ๋ณด๋ค๋ ๋ค์ค ๋๊ตฌ ์ ๋ต์ ์ผ๋ถ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ํจ๊ณผ์ ์ ๋๋ค.
CodeQL
GitHub(ํ์ฌ Microsoft์ ์ผ๋ถ)์์ ๊ฐ๋ฐํ CodeQL์ ์์ค ์ฝ๋๋ฅผ ๋ง์น ๋ฐ์ดํฐ์ฒ๋ผ ์ฟผ๋ฆฌํ ์ ์๋ ์๋ฏธ๋ก ์ ์ฝ๋ ๋ถ์ ์์ง์ ๋๋ค. ์ฝ๋๋ฒ ์ด์ค์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ณ ์ฌ์ฉ์๊ฐ ๋ณด์ ์ทจ์ฝ์ , ์ฑ๋ฅ ๋ฌธ์ ๋ฐ ์ฝ๋ฉ ๊ฒฐํจ์ ํ์งํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. GitHub Advanced Security(GHAS)์ ์ผ๋ถ์ธ CodeQL์ ํนํ ์คํ ์์ค์ ๋๊ท๋ชจ ์ทจ์ฝ์ ํ์ง์์ ํต์ฌ์ ์ธ ์ญํ ์ ํฉ๋๋ค.
C#์ ๊ณต์์ ์ผ๋ก ์ง์๋๋ ์ธ์ด ์ค ํ๋์ด๋ฉฐ, GitHub์์๋ .NET ๊ธฐ๋ฐ ์ํ๊ณ์ ๋ํ ์ง์์ ํ๋ํด ์์ต๋๋ค.
์ฅ์
- ์ฌ์ฉํจ ์ฌ์ธต์ ์๋ฏธ ๋ถ์ C# ์ฝ๋, ๋ชจ๋ธ๋ง ์ ์ด ๋ฐ ๋ฐ์ดํฐ ํ๋ฆ์ ํตํด ๋ณต์กํ๊ณ ์ฌ๋ฌ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ ์ทจ์ฝ์ฑ์ ํ์งํฉ๋๋ค.
- GitHub ๊ธฐ๋ฐ ์ํฌํ๋ก์ ํจ๊ป ์๋ํ์ฌ ํ ์์ฒญ, ํธ์ ์ด๋ฒคํธ ๋ฐ ์์ฝ๋ ๋ณด์ ๊ฒ์ฌ์ ์ํํ๊ฒ ํตํฉ๋ฉ๋๋ค.
- ์์ ํ์ง ์์ ์ญ์ง๋ ฌํ, ๊ฒ์ฆ๋์ง ์์ ์ ๋ ฅ, ๊ฒฝ๋ก ํ์ ๋ฐ ์ฃผ์ ํจํด๊ณผ ๊ฐ์ ์ฐพ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
- GitHub์ ์ฑ์ฅ์ ํ์ ์ด ์ฟผ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌOWASP Top 10 ๋ฐ CWE์ ๋ง์ถฐ์ง ๊ท์น์ ํฌํจํฉ๋๋ค.
- Datalog ๊ธฐ๋ฐ์ ํน์ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ CodeQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๋ฐ ๋ํ ์ ์ฒด ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๊ฐ๋ ฅํ ๋ฒ์ ์ ์ด ์ธ์, ๋ธ๋์น ๋ฐ PR ์ ์ฒด์์ ๋ณ๊ฒฝ ์ฌํญ ์ถ์ ๊ฐ๋ฅ
- GitHub Actions ๊ธฐ๋ฐ ํ์ฅ ๋๋ถ์ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค ๋ฐ ๋ค์ค ๋ฆฌํฌ ์กฐ์ง์ ์ ํฉํฉ๋๋ค.
- ์คํ ์์ค ์ฟผ๋ฆฌ ํฉ์ ์ฌ์ฉํ๋ฉด ์ปค๋ฎค๋ํฐ์์ ๊ฐ๋ฐํ ๋ณด์ ๊ฒ์ฌ๋ฅผ ์ฌ์ฌ์ฉํ๊ณ ๊ณต์ ํ ์ ์์ต๋๋ค.
- ๋ณด์ ์ฐ๊ตฌ์์ ์ํ ๊ณผ๊ฑฐ ์ฝ๋ ๊ฒํ ๋ฐ ์ทจ์ฝ์ฑ ๊ฐ์ฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- GitHub ๋ณด์ ํ์ ๊ธ๋ก๋ฒ CVE ์ฌ๋ฅ์ ์ํด ๋ด๋ถ์ ์ผ๋ก CodeQL์ ์ฌ์ฉํ์ฌ ์ํฅ๋ ฅ์ด ํฐ ์ฌ์ฉ ์ฌ๋ก์์ ์ค์ ํ ์คํธ๋ฅผ ๊ฑฐ์ณค์ต๋๋ค.
ํ๊ณ์ ๋จ์
CodeQL์ ์ฌ์ธต์ ์ธ ์ ์ ๋ถ์์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋๊ตฌ ์ค ํ๋์์๋ ๋ถ๊ตฌํ๊ณ , ์ผ์์ ์ธ ๊ฐ๋ฐ์์ C#์ ์ ์ฉํ๋ฉด ๋ช ๊ฐ์ง ์ฃผ์ ์ฌํญ์ด ์์ต๋๋ค.
- ์ฌ์ฉ์ ์ ์ ๊ท์น์ ๋ํ ๊ฐํ๋ฅธ ํ์ต ๊ณก์
์ฌ์ฉ์ ์ง์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ค๋ฉด ๊ณ ์ ํ ๊ตฌ๋ฌธ๊ณผ ์๋ฏธ ๋ชจ๋ธ์ ๊ฐ์ง CodeQL ์ฟผ๋ฆฌ ์ธ์ด์ ๋ํ ์ง์์ด ํ์ํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๋ ์์ฐ์ฑ์ ๋์ด๊ธฐ ์ํด ์ ๋ด ๊ต์ก์ด๋ ์๊ฐ์ด ํ์ํฉ๋๋ค. - ๊ฑด์ถ๋ฒ๊ท ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์ํฉ๋๋ค
์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ ์ ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ณํํด์ผ ํฉ๋๋ค. ์ด ๋จ๊ณ๋ CI ํ์ดํ๋ผ์ธ, ํนํ ๊ท๋ชจ๊ฐ ํฌ๊ฑฐ๋ ์์ฃผ ๋ณ๊ฒฝ๋๋ ์ ์ฅ์์ ๊ฒฝ์ฐ ๋ณต์ก์ฑ๊ณผ ์๊ฐ์ ์ฆ๊ฐ์ํต๋๋ค. - ์์ค ์ธ์ด ๋ฒ์ ๋ฐ ๋๊ตฌ์ ์ํด ์ ํ๋จ
C#์ ์ง์๋์ง๋ง, Java, JavaScript, Python๊ณผ ๊ฐ์ CodeQL์ ์ฃผ์ ์ธ์ด๋ณด๋ค ์ฌ์ ๋น๋๋ ๊ท์น ๋ฐ ์ฟผ๋ฆฌ ํ์ง ์ธก๋ฉด์์ ๋ค์ฒ์ง ์ ์์ต๋๋ค. ๋ํ, ์ผ๋ถ ๊ณ ๊ธ .NET ๊ด๋ จ ๋์(์: ๋ฆฌํ๋ ์ , ๋ฐํ์ ์ฝ๋ ์์ฑ)์ ๋ชจ๋ธ๋งํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. - ์คํ์ผ ๋๋ ์์ ๊ท์น์ ์ ํฉํ์ง ์์ต๋๋ค.
CodeQL์ ์คํ์ผ ๊ฐ์ด๋๋ ์ฝ๋ ํ์์ ๊ฐ์ ํ๋๋ก ์ค๊ณ๋์ง ์์์ต๋๋ค. ๋ ผ๋ฆฌ์ , ์๋ฏธ์ , ๋ณด์ ๊ธฐ๋ฐ ํจํด์ ์๊ฒฉํ๊ฒ ์ด์ ์ ๋ง์ถฅ๋๋ค. - IDE ์ง์ ๋ถ์กฑ
Visual Studio๋ Rider์ ์ง์ ํตํฉํ ์ ์์ผ๋ฏ๋ก ๊ฐ๋ฐ์๋ CI/CD ํผ๋๋ฐฑ์ ์์กดํ๊ฑฐ๋ CLI ๋๊ตฌ๋ฅผ ์ง์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. - ์ ์ฒด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ํฐํ๋ผ์ด์ฆ ๋ผ์ด์ ์ค๊ฐ ํ์ํฉ๋๋ค.
๊ด๋ฆฌํ CodeQL ์๋น์ค๋ฅผ ์ ๊ณตํ๋ GitHub Advanced Security(GHAS)๋ GitHub Enterprise Cloud ๋ฐ Server ๊ณ ๊ฐ์๊ฒ๋ง ์ ๊ณต๋ฉ๋๋ค. ๋ฐ๋ผ์ GitHub์ ์ฌ์ฉํ์ง ์๋ ํ์ ๋์ ์ด ์ ํ๋ฉ๋๋ค. - ์๊ท๋ชจ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ๊ฐ์น๊ฐ ์ ํ๋จ
๊ฐ๋จํ C# ์ฑ์ด๋ ๋น ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ํ๋ ํ์ ๊ฒฝ์ฐ, CodeQL์ ์ค์ ๊ณผ ๋ณต์ก์ฑ์ Roslyn์ด๋ ReSharper์ ๊ฐ์ ๊ฐ๋ฒผ์ด ๋๊ตฌ์ ๋นํด ์ด์ ์ด ๋ ํด ์ ์์ต๋๋ค.
CodeQL์ ๋ณด์์ ์ต์ฐ์ ์ผ๋ก ์๊ฐํ๊ณ ๋ง์ถคํ ์ฟผ๋ฆฌ ์ธํธ ๋ฐ ์ํฌํ๋ก ๊ตฌ์ถ์ ํฌ์ํ ์ํฅ์ด ์๋ ์กฐ์ง์์ ํ์ํ ์ฑ๋ฅ์ ๋ฐํํฉ๋๋ค. ์๊ฒฉํ ๊ท์ ์ค์ ์๊ตฌ ์ฌํญ, ๋ค์์ ๊ธฐ์ฌ์, ๊ทธ๋ฆฌ๊ณ ์ฑ์ํ DevSecOps ๋ฌธํ๋ฅผ ๊ฐ์ถ C# ํ๋ก์ ํธ์ ์ด์์ ์ ๋๋ค. ๊ธฐ์กด ๋ถ์๊ธฐ๋ฅผ ๋ณด์ํ๋ ๊ณ์ธต์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
ํฉ๊ธฐ๋
Aikido Security๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ๋ถ์ผ์ ์ ์ ๊ธฐ์ ์ผ๋ก, ๊ฐ๋ฐ์ ์นํ์ ์ธ SAST, SCA ๋ฐ ๋น๋ฐ ์ค์บ๋ ๊ธฐ๋ฅ์ ํตํฉ ํ๋ซํผ์์ ์ ๊ณตํฉ๋๋ค. ๊ฐํธ์ฑ๊ณผ ์๋๋ฅผ ์ผ๋์ ๋๊ณ ๊ฐ๋ฐ๋์์ผ๋ฉฐ, GitHub, GitLab, Bitbucket, Azure DevOps์ ๊ฐ์ ์ธ๊ธฐ ํ๋ซํผ๊ณผ ์ฆ์ ์ฐ๋๋๋ ๊ธฐ๋ฅ์ ํตํด ์ต์ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ์ง์ํฉ๋๋ค.
Aikido๋ ReSharper๋ CodeQL๊ณผ ๊ฐ์ ๊ธฐ์กด์ ์ฌ์ธต์ ์ ์ ์ฝ๋ ๋ถ์๊ธฐ๋ ์๋์ง๋ง C# ๋ฐ .NET ํ๋ก์ ํธ๋ฅผ ์ง์ํ์ฌ ํนํ ๋ณด์ ์ทจ์ฝ์ฑ๊ณผ ์ข ์์ฑ ์ํ ์ธก๋ฉด์์ ๊ท์คํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
์ฅ์
- ๊ฐ๋ณ๊ณ GitHub, GitLab, Bitbucket ๋ฐ Azure์ CI/CD ์ํฌํ๋ก์ ์ฝ๊ฒ ํตํฉ ๊ฐ๋ฅ
- ํ๋์ ํ๋ซํผ์์ SAST, SCA(์ํํธ์จ์ด ๊ตฌ์ฑ ๋ถ์) ๋ฐ ๋น๋ฐ์ ๋ํ ๋ด์ฅํ ์ค์บ๋์ ์ ๊ณตํฉ๋๋ค.
- ํ๋์ฝ๋ฉ๋ ๋น๋ฐ, SQL ์ฃผ์ , ์์ ํ์ง ์์ ์ข ์์ฑ๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์ทจ์ฝ์ฑ ํ์ง ํจํด์ ์ฌ์ฉํ์ฌ C#์ ์ง์ํฉ๋๋ค.
- ๋ณด์ ์ ๋ฌธ๊ฐ๋ณด๋ค๋ ๊ฐ๋ฐ์์ DevOps ํ์ ์ํด ์ค๊ณ๋ ๊น๋ํ๊ณ ํ๋์ ์ธ UI
- ์ํฉ ์ธ์ ๋ฌธ์ ๋ถ๋ฅ ๋ฐ ์ํ ์ฐ์ ์์ ์ง์ ์ ์๋ฆผ โโํผ๋ก๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ค์ํ ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ๋ณํฉ์ ์ฐจ๋จํ๋ ๋ฑ ์ ์ฑ ๊ธฐ๋ฐ ์ ์ด๋ฅผ ํ์ฑํํฉ๋๋ค.
- ํ๋ก์ ํธ ๋ฐ ์ธ์ด ์๋ ๊ฒ์์ ํตํด ๊ท์น ๊ตฌ์ฑ์ ์ํ ์ค์ ์ด ํ์ํ์ง ์์ต๋๋ค.
- ์๊ท๋ชจ ํ๊ณผ ์คํ ์์ค ๊ธฐ์ฌ์๋ฅผ ์ํ ๋ฌด๋ฃ ๊ณ์ธต ์ ๊ณต
- ํ ๋ฆฌํ์คํธ์์ ์คํ ๊ฐ๋ฅํ ์ถ๋ ฅ์ ํตํด ๋น ๋ฅธ ์ค์บ ์๊ฐ ์ ๊ณต
- GDPR ๋ฐ ISO 27001 ์ค์๋ฅผ ํตํ ๋ณด์ ์ฐ์ ๊ธฐ์ ๋ฌธํ
ํ๊ณ์ ๋จ์
Aikido๋ ํ๋ ํ์ ์ํ ์ธ์์ ์ธ DevSecOps ํ๋ซํผ์ด์ง๋ง C#์ ํนํ๋ ์ฌ์ธต์ ์ธ ์ ์ ๋ถ์์ด๋ ๊ณ ๊ธ ์ฝ๋ ๊ฒ์ฌ๋ฅผ ์ํ๋ ์ฌ๋๋ค์๊ฒ๋ ์ ์ฝ์ด ์์ต๋๋ค.
- ๋ณต์กํ C# ์ฝ๋ ํจํด์ ๋ํ ์ ํ๋ ๊ท์น ๊น์ด
์์ดํค๋๋ ์ฝ๋ ํ์ง๋ณด๋ค๋ ๋ณด์ ์ค์บ๋์ ๋ ์ค์ ์ ๋๊ณ ์์ผ๋ฉฐ, NDepend๋ ReSharper์ ๊ฐ์ ๋๊ตฌ๊ฐ ์ ๊ณตํ๋ ๋ ผ๋ฆฌ์ ๋๋ ์ฑ๋ฅ ๊ด๋ จ ๊ฒ์ฌ๊ฐ ๋ง์ด ๋ถ์กฑํฉ๋๋ค. - ๊ตฌ์กฐ์ ์ค๊ณ ๊ฒฐํจ์ ๊ฐ์งํ๊ฑฐ๋ ๋ฆฌํฉํ ๋ง ์ ์์ ํ๋ ๋ฐ ์ ํฉํ์ง ์์ต๋๋ค.
์ํฐํ๋ผ์ด์ฆ๊ธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํํ ๋ณผ ์ ์๋ ๊ฐ์ฒด ๋ชจ๋ธ ์ค์ฉ, ์ํ ์ข ์์ฑ ๋๋ ์ํคํ ์ฒ ๋์์ ๊ด๋ จ๋ ๋ฌธ์ ๋ ์๋ณํ์ง ๋ชปํฉ๋๋ค. - ์ฌ์ฉ์ ์ ์ ๊ท์น ์์ฑ์ด๋ ๋ฏธ์ธ ์กฐ์ ๋ ๊ตฌ์ฑ์ ๋ํ ์ง์์ด ๋ถ์กฑํฉ๋๋ค.
CodeQL์ด๋ Roslyn ๋ถ์๊ธฐ์ ๋ฌ๋ฆฌ ์ฌ์ฉ์๋ ์์ฒด ์ ์ ๊ท์น์ ์ ์ํ๊ฑฐ๋ ํ์ง ๋ ผ๋ฆฌ๋ฅผ ์ฝ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค. - Visual Studio ๋๋ IDE ํตํฉ ์์
๋ชจ๋ ๊ฒฐ๊ณผ๋ ์น ์ธํฐํ์ด์ค ๋๋ ํ ๋ฆฌํ์คํธ ๋๊ธ์ ํตํด ํ์๋ฉ๋๋ค. IDE ๊ธฐ๋ฐ ๋ฆฐํ ์ ์ต์ํ ๊ฐ๋ฐ์์๊ฒ๋ ์ด ๋ถ๋ถ์ด ๋ถํธํ ์ ์์ต๋๋ค. - ์ฃผ๋ก Git ๊ธฐ๋ฐ ์ํฌํ๋ก๋ฅผ ์ค์ฌ์ผ๋ก ๊ตฌ์ถ๋จ
์ค์ ์ง์ค์ ์์ค ์ ์ด๋ ์ค๋๋ ๋ฐฐํฌ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ํ์ ์๋ํ ๊ธฐ๋ฅ์ ์ด์ ์ ์ป์ง ๋ชปํ ์ ์์ต๋๋ค. - ์ค์บ๋์ ๋ก์ปฌ ๊ฐ๋ฐ ์ค์ด ์๋ CI์์ ์ฃผ๋ก ๋ฐ์ํฉ๋๋ค.
๊ฐ๋ฐ์ ์ํฌํ๋ก ๋ด์๋ ์ฌ์ ์ปค๋ฐ ํํฌ๋ ์ค์๊ฐ ์ฝ๋ ํผ๋๋ฐฑ์ ์ํ ๊ธฐ๋ณธ ํด์ด ์์ต๋๋ค.
Aikido๋ ์ต์ CI/CD ํ์ดํ๋ผ์ธ์์ C#์ ์ฌ์ฉํ๋ ๋ณด์์ ๋ฏผ๊ฐํ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ํ์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ทจ์ฝ์ ๊ณผ ๋ณด์ ๋น๋ฐ์ ๋ํ ๋น ๋ฅธ ์ธ์ฌ์ดํธ์ ํญ๋์ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง ์ํคํ ์ฒ ๋ถ์, ๋ง์ถคํ ๊ท์น ์ ์ฐ์ฑ ๋๋ ๊ณ ๊ธ ํ์ง ๊ด๋ฆฌ๊ฐ ํ์ํ ํ์ ๊ฒฝ์ฐ ๊ธฐ์กด ์ฝ๋ ๋ถ์๊ธฐ์ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ฅ ์์ค
DeepSource๋ ์ฌ๋ฌ ์ธ์ด์ ๊ฑธ์ณ ์ ์ ๋ถ์, ๋ฒ๊ทธ ํ์ง, ๋ณด์ ์ค์บ๋ ๋ฐ ์ฝ๋ ์์ ์ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์๋ํ๋ ์ฝ๋ ๊ฒํ ํ๋ซํผ์ ๋๋ค. Python, Go, JavaScript์ ๊ฐ์ ์ธ์ด์ ๋ํ ์ง์์ด ๊ฐํ๋์์ง๋ง, DeepSource๋ ๊ฐ๋ฐ์๋ค์ด ๊น๋ํ๊ณ ์์ ํ๋ฉฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์งํ ์ ์๋๋ก C# ๋ฐ .NET ์ํ๊ณ์ ๋ํ ์ง์์ ์ ์ง์ ์ผ๋ก ํ๋ํด ์์ต๋๋ค.
GitHub, GitLab, Bitbucket๊ณผ ๊ฐ์ ๋ฒ์ ์ ์ด ํ๋ซํผ๊ณผ ํตํฉํ์ฌ ๋ชจ๋ ์ปค๋ฐ๊ณผ ํ ์์ฒญ์ ๋ํด ์ ์ ๋ถ์์ ์คํํฉ๋๋ค.
์ฅ์
- ์ฑ๋ฅ, ๋ฒ๊ทธ ์ํ, ์ํฐํจํด ๋ฐ ๋ณด์ ์ทจ์ฝ์ฑ์ ์ด์ ์ ๋ง์ถ C#์ ๋ํ ๊ธฐ๋ณธ ์ ์ ๋ถ์ ์ง์
- ํ ๋ฆฌํ์คํธ์ ๋ํ ์ค์๊ฐ ํผ๋๋ฐฑ์ ์ํด GitHub, GitLab ๋ฐ Bitbucket๊ณผ ์ํํ๊ฒ ํตํฉ
- ์ผ๋ฐ์ ์ธ ์ฝ๋ ๋ฌธ์ ํด๊ฒฐ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์๋ ์์ ์ ์์ ์ ๊ณตํฉ๋๋ค.
- ์ ์ฅ์์ ํ ์ ๋ฐ์ ์ฝ๋ ์ํ ํต์ฐฐ๋ ฅ์ ์ํ ํตํฉ ๋์๋ณด๋
- ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ์ฌ ๊ฐ๋ณ๊ณ ๊ตฌ์ฑ์ด ํ์ ์๋ ์จ๋ณด๋ฉ
- ์ฝ๋ ์ดํ, ์ค๋ณต ๋ฐ ์ ์ฉ ๋ฒ์ ์ถ์ธ์ ๊ฐ์ ์ธก์ ํญ๋ชฉ์ด ํฌํจ๋ฉ๋๋ค.
- ์๊ฐ ๋ฐ ๋ถ๊ธฐ๋ณ ์ฝ๋ ํ์ง ํ๊ท์ ๋ํ ๋น ๋ฅธ ํต์ฐฐ๋ ฅ ์ ๊ณต
- ๋ ๋์ ๋ ธ์ด์ฆ ์ ์ด๋ฅผ ์ํด ๋ฌด์ ๊ท์น, ์ต์ ๋ฐ ์ฌ๊ฐ๋ ์กฐ์ ์ ์ง์ํฉ๋๋ค.
- ์น UI๋ ์ง๊ด์ ์ด๋ฉฐ ๊ฐ๋ฐ์์ ์์ง๋์ด๋ง ๋ฆฌ๋ ๋ชจ๋์๊ฒ ์ ํฉํฉ๋๋ค.
- ์ํฐํ๋ผ์ด์ฆ ๊ธฐ๋ฅ์๋ ํ ๊ธฐ๋ฐ ๊ถํ ๋ฐ ๊ท์ ์ค์ ๋์๋ณด๋๊ฐ โโํฌํจ๋ฉ๋๋ค.
ํ๊ณ์ ๋จ์
DeepSource๋ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๋ ํ๋ซํผ์ด์ง๋ง ํน๋ณํ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฌ๋ฌ ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค. C# ํ๋ก์ ํธ ๊ธฐ์ ๋๋ ๋๊ท๋ชจ ๊ฐ๋ฐ์์:
- C# ์ง์์ Python์ด๋ JavaScript๋ณด๋ค ๋ ์ฑ์ํฉ๋๋ค.
DeepSource๋ Roslyn, ReSharper, NDepend์ ๊ฐ์ ๋๊ตฌ์์ ์ ๊ณตํ๋ ์ ์ ๊ท์น์ ๊น์ด์ ํญ์ด ๋ถ์กฑํฉ๋๋ค. ํนํ ๋ณต์กํ .NET ์ ํ๋ฆฌ์ผ์ด์ ํจํด์ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. - ์ ํ๋ ๊ท์น ์ฌ์ฉ์ ์ ์
์ฌ์ฉ์๋ ๋๋ฉ์ธ๋ณ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ์ ์ ๋ถ์ ๊ท์น์ ์ ์ํ๊ฑฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋๋ ๊ฒ ์ด์์ผ๋ก ๊ท์น ์ธํธ๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค. - Visual Studio์ ํตํฉ๋์ง ์์
Visual Studio๋ Rider์ ๊ฐ์ IDE์์ ์์ ํ๋ ๊ฐ๋ฐ์๋ CI ๊ธฐ๋ฐ ํผ๋๋ฐฑ์ ์์กดํ๊ฑฐ๋ DeepSource ์น UI์์ ์๋์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค. - ์ฝ๋ ์์ค์ ๋ฌธ์ ์ ์ด์ ์ ๋ง์ถ์ง๋ง ์ํคํ ์ฒ ์์ค์ ๋ถ์์ด๋ ์ฝ๋ ๊ตฌ์กฐ ์ต์ ํ๋ ๋ค๋ฃจ์ง ์์ต๋๋ค.
- ๊ณ ๊ธ ํ๋ฆ ๋ถ์์ด๋ ๋ฐ์ดํฐ ์ถ์ ์ ์ง์ํ์ง ์์ต๋๋ค.
์ด๋ก ์ธํด ๋ค์ค์ค ์ทจ์ฝ์ ์ด๋ ๋ณต์กํ ๋ณด์ ๋ ผ๋ฆฌ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ํจ์จ์ฑ์ด ๋จ์ด์ง๋๋ค. - ํ๋ฆฌ๋ฏธ์ ๊ธฐ๋ฅ์ ์ํฐํ๋ผ์ด์ฆ ํ๋ ๋ค์ ์ ๊ฒจ ์์ต๋๋ค.
๊ณผ๊ฑฐ ์ถ์ , ๊ท์ ์ค์ ๋ณด๊ณ , ์ ์ฑ ์ํ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์์ ๊ณ์ธต ๋ผ์ด์ ์ค๊ฐ ํ์ํฉ๋๋ค. - ์ฃผ๋ก ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ด๋ฉฐ, ์๊ฒฉํ๊ฒ ๊ท์ ๋๋ ํ๊ฒฝ์ ๋ํ ์จํ๋ ๋ฏธ์ค ์ต์ ์ ์ ํ์ ์ ๋๋ค.
DeepSource๋ ์ฌ์ธต์ ์ธ ๊ตฌ์ฑ ์์ด ๋น ๋ฅด๊ณ ์๋ํ๋ ์ ์ ๋ถ์์ ์ํ๋ ์ค์ ๊ท๋ชจ C# ํ์ ์ ํฉํ ์ต์ ์ ๋๋ค. Git ๊ธฐ๋ฐ CI ์ํฌํ๋ก์ ๊ฐ์ฅ ์ ํฉํ๋ฉฐ ๊ธฐ์กด ์ฝ๋ ๋ฆฐํฐ๋ฅผ ๋ณด์ํฉ๋๋ค. ์ํคํ ์ฒ์ ๋ํ ํต์ฐฐ๋ ฅ๊ณผ ์ฌ์ธต์ ์ธ .NET ๋ด๋ถ ์ง์์ ์ํ๋ ์ํฐํ๋ผ์ด์ฆ๊ธ ํ๋ก์ ํธ๋ ํ์ ๊ฒฝ์ฐ, ๋ค๋ฅธ ์ ๋ฌธ ๋ถ์๊ธฐ์ ํจ๊ป ์ฌ์ฉํด์ผ ํ ์๋ ์์ต๋๋ค.
๋ฏธ๋ฃจ๋ค#
Infer#๋ Microsoft Research์์ Facebook์ Infer ํ๋ ์์ํฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ C#์ฉ ์ ์ ๋ถ์ ๋๊ตฌ์ ๋๋ค. ํ๋ก์์ ๊ฐ ๋ถ์์ ์ค์ ์ ๋์ด null ์ญ์ฐธ์กฐ, ๋ฆฌ์์ค ๋์, ๊ฒฝ์ ์กฐ๊ฑด, ๋ฉ์๋ ๊ฒฝ๊ณ๋ฅผ ๋๋๋๋ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ์ ๊ฐ์ ๋ณต์กํ ๋ฒ๊ทธ๋ฅผ ํ์งํฉ๋๋ค. Infer#๋ ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ์กด ๋ฆฐํฐ(linter)์์ ๋ฐ๊ฒฌ๋์ง ์๊ฑฐ๋ ๋ฐํ์ ์ค์๋ง ๋๋ฌ๋๋ ์ฌ๊ฐํ ์๋ฏธ๋ก ์ ๋ฒ๊ทธ๋ฅผ ๊ฐ๋ฐ์๊ฐ ๋ฐ๊ฒฌํ๋๋ก ์ง์ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ .NET ์ค๊ฐ ์ธ์ด(IL)๋ฅผ ๋ด๋ถ ํํ์ผ๋ก ๋ณํํ ๋ค์ ๊ณ ๊ธ ํ์์ ๊ฒ์ฆ ๋ถ์์ ์ํํ๋ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค.
์ฅ์
- ๋ชจ๋ฐ์ผ ๋ฐ ์๋ฒ ์ธก ์ฝ๋์ ๊ณ ๊ธ ์ ์ ๋ถ์์ผ๋ก ๋๋ฆฌ ์ธ์ ๋ฐ๋ Facebook์ Infer ์์ง ๊ธฐ๋ฐ
- ์ฌ๋ฌ ๋ฉ์๋๋ ํด๋์ค์ ๊ฑธ์ณ ์๋ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ์ฌ ํ๋ก์์ ๊ฐ ๋ฐ ๊ธฐํธ ๋ถ์์ ์ํํฉ๋๋ค.
- ํนํ null ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ๋์์ฑ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
- .NET Intermediate Language(IL)์ ๋ํ ์ถ๋ก ์ด ๊ฐ๋ฅํ์ฌ ๋ชจ๋ .NET ์ง์ ์ธ์ด์ ๋ํ ๋ถ์์ด ๊ฐ๋ฅํฉ๋๋ค.
- Microsoft Research์์ ๊ฐ๋ ฅํ ํ๋ฌธ์ ๊ธฐ๋ฐ์ ๋ฐํ์ผ๋ก ํ๋ฐํ๊ฒ ๊ฐ๋ฐ
- ๊ธฐ์ ์ด๋ ํ์ ์ ์ฌ์ฉ์ ์ํ ํ๊ฐ๋ ๋ผ์ด์ ์ค๋ฅผ ๊ฐ์ถ ์คํ ์์ค
- ์๋ ๋ถ์์ ์ํด MSBuild ๋ฐ CI ํ์ดํ๋ผ์ธ๊ณผ ํตํฉ ๊ฐ๋ฅ
- ์ฐ๊ตฌ ์ค์ , ๋ณด์ ์ฝ๋ฉ ๊ฐ์ฌ ๋๋ ๊ณต์ ๊ฒ์ฆ ์ํฌํ๋ก์ ์ผ๋ถ๋ก ์ ์ฉํฉ๋๋ค.
- ํ์ค ๋๊ตฌ๋ก๋ ํฌ์ฐฉํ๊ธฐ ์ด๋ ค์ด ์ ์ฌ์ ์ธ ๋ฐํ์ ์ถฉ๋ ๋ฐ ๋ ผ๋ฆฌ ์ค๋ฅ๋ฅผ ๊ฐ์งํฉ๋๋ค.
ํ๊ณ์ ๋จ์
Infer#๋ ๋ฒ์๊ฐ ๋์ง๋ง ์ผ๋ฐ ๊ฐ๋ฐ ์ํฌํ๋ก์ ๋ํ ์ฌ์ฉ์ฑ์ ์ ํํ๋ ์ฌ๋ฌ ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค.
- ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ ์ ์ ๋ถ์๊ธฐ๊ฐ ์๋๋๋ค ์ผ๋ฐ์ ์ธ ์ฝ๋ ์คํ์ผ, ๋์์ธ ๋๋ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ํด
Infer#๋ ๋ฒ๊ทธ ๊ฐ์ง์๋ง ์ง์คํ๋ฉฐ NDepend๋ ReSharper์ ๊ฐ์ ์ฝ๋ ํ์ง ์ธก์ ํญ๋ชฉ, ๋ณต์ก์ฑ ๋ถ์, ๊ตฌ์กฐ์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. - Visual Studio ๋๋ IDE์ ํตํฉ๋์ง ์์
๋ชจ๋ ์ํธ์์ฉ์ ๋ช ๋ น์ค ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ํธ์ง๊ธฐ ๋ด ํผ๋๋ฐฑ์ด๋ ์๋ ์์ ์ ๊ธฐ๋ํ๋ ๊ฐ๋ฐ์์๊ฒ๋ ์ ํฉํ์ง ์์ต๋๋ค. - ๋์ ๊ธฐ์ ์ ์ง์
์ฅ๋ฒฝ
IL, ๋ช ๋ น์ค ์์ ์ ๋ํ ์ง์์ด ํ์ํ๋ฉฐ, ํน์ ์ถ๋ ฅ์ ํด์ํ๊ธฐ ์ํ ๊ณต์์ ์ธ ๋ฐฉ๋ฒ์ ๋ํ ์น์ํจ์ด ํ์ํ ์๋ ์์ต๋๋ค. - ๋ถ์กฑํ ๋ฌธ์์ ์ปค๋ฎค๋ํฐ ์ง์
Roslyn ๋ถ์๊ธฐ๋ SonarQube์ ๊ฐ์ ๋๊ตฌ์ ๋น๊ตํ์ ๋ Infer#์๋ ๋ฌธ์ ํด๊ฒฐ์ ์ํ ๊ด๋ฒ์ํ ํํ ๋ฆฌ์ผ, ์์ ๋๋ ํ์ฑ ํฌ๋ผ์ด ๋ถ์กฑํฉ๋๋ค. - ๊ด๋ฒ์ํ ์์ฐ ์ฉ๋๋ก ์ ๊ทน์ ์ผ๋ก ์ ์ง ๊ด๋ฆฌ๋์ง ์์
์ด๋ Microsoft Research ํ๋ก์ ํธ์ด๋ฏ๋ก ์ผ๊ด๋ ์ ๋ฐ์ดํธ๋ ํ๋ก๋์ ์์ค์ ์ง์์ ๋ฐ์ง ๋ชปํ ์ ์์ต๋๋ค. - SCA(์ข
์์ฑ) ์ค์บ๋์ด๋ ๋ณด์ ๊ด๋ จ ๊ท์น์ด ์์ต๋๋ค.
์ค๋๋ ํจํค์ง, ์์ ํ์ง ์์ API ์ฌ์ฉ ๋๋ ๊ธฐํ ํ๋ฉด ์์ค์ ๋ณด์ ๋ฌธ์ ๋ ๊ฐ์งํ ์ ์์ต๋๋ค. - ๋๊ท๋ชจ ๊ธฐ์
ํ๋ก์ ํธ์ ํ์ฅ์ฑ ๋ฌธ์
๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์ ์ ์ฉํ๋ฉด ๋ถ์ ์๋๊ฐ ๋๋ ค์ง๊ณ ์๋นํ ์์คํ ๋ฆฌ์์ค๋ฅผ ์๋ชจํ ์ ์์ต๋๋ค.
Infer#๋ ์ ์ ๋ฒ๊ทธ ๊ฐ์ง, ์ฐ๊ตฌ ์ค์ฌ ํ๊ฒฝ, ๋๋ ์ฌ์ธต์ ์ธ ๊ฒฝ๋ก ์ธ์ ๋ถ์์ด ํ์ํ ๊ฐ์ฌ๋ฅผ ์ฐ์ ์ํ๋ ํ์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ํฐํ๋ผ์ด์ฆ C# ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ผ์์ ์ธ ์ ์ ๋ถ์์ ์ํ ํดํค ์๋ฃจ์ ์ ์๋์ง๋ง, ๋ณด์ ๋๋ ์์ ์ด ์ค์ํ ๊ฐ๋ฐ ํ๊ฒฝ์์ ๊ฐ๋ ฅํ ๋ณด์ ๋๊ตฌ ์ญํ ์ ํฉ๋๋ค.
ํจ๋ง ์ค์บ
Puma Scan์ .NET ๋ฐ C# ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ์ทจ์ฝ์ , ํนํ ๋ณด์ ์ฝ๋ฉ ๊ดํ ๋ฐ ๊ท์ ์ค์์ ๊ด๋ จ๋ ์ทจ์ฝ์ ์ ์๋ณํ๋๋ก ์ค๊ณ๋ ์ ์ ๋ถ์ ๋๊ตฌ์ ๋๋ค. OWASP Top 10 ๋ฐ CWE(Common Weakness Enumeration) ๋ฒ์ฃผ์ ์ค์ ์ ๋๊ณ ๊ฐ๋ฐ๋์ด ๋ณด์์ ๋ฏผ๊ฐํ .NET ํ์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
์ด ๋๊ตฌ๋ ๋ ๊ฐ์ง ์ฃผ์ ํํ๋ก ์ ๊ณต๋ฉ๋๋ค. Visual Studio์ ํตํฉ๋ Puma Scan Community Edition๊ณผ CI/CD ํตํฉ, ๊ท์น ์ฌ์ฉ์ ์ ์, ์ค์ ๋ณด๊ณ ์ ๊ฐ์ ์ํฐํ๋ผ์ด์ฆ ๊ธฐ๋ฅ์ ์ถ๊ฐํ Puma Scan Professional์ ๋๋ค.
์ฅ์
- OWASP ๋ฐ CWE ํ์ค์ ๋ง์ถฐ์ง ๊ท์น ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ .NET ๋ฐ C# ๋ณด์ ์ค์บ๋์ ๋ง๊ฒ ์กฐ์ ๋์์ต๋๋ค.
- Visual Studio์ ์ง์ ํตํฉ๋์ด ๊ฐ๋ฐ์์๊ฒ ์ฝ๋ฉ ์ค ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค.
- ์ ๋ขฐํ ์ ์๋ ์ ๋ ฅ์ด ์ฝ๋๋ฅผ ํตํด ์ด๋ป๊ฒ ํ๋ฅด๋์ง ์ถ์ ํ๊ณ XSS, SQL ์ฃผ์ , ๋ช ๋ น ์ฃผ์ ๋ฑ์ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ ์ ์๋ ์ฝ๋ ํ๋ฆ ๋ถ์์ ์ ๊ณตํฉ๋๋ค.
- Professional Edition์ DevSecOps ๊ดํ์ ์ ํฉํ CI/CD ํ์ดํ๋ผ์ธ ํตํฉ์ ์ง์ํฉ๋๋ค.
- ์ทจ์ฝ์ฑ ๋ฒ์ฃผ, ์ฌ๊ฐ๋ ์์ค ๋ฐ ์์ ์ง์นจ์ ํฌํจํ ์์ธํ ๋ณด๊ณ ์๋ฅผ ์์ฑํฉ๋๋ค.
- ๋ ์ ์ฝ๋ ํจํด์ ๋ํ ์ฌ์ฉ์ ์ ์ ๊ท์น์ ์ถ๊ฐํ ์ ์์ต๋๋ค(์ ๋ฌธ๊ฐ ์ ์ฉ)
- SDLC ์ด๊ธฐ์ ํ์ด ๋ณด์ ์ฝ๋ฉ ์ ์ฑ ์ ์ํํ๋๋ก ๋์ต๋๋ค.
- ๊ท์ ๋ ์ฐ์ ์ ๋ํ ์์ ํ ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ ์๊ตฌ ์ฌํญ์ ๋ณด์ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ์ง์์ ์ธ ๊ท์น ์ธํธ ์ ๋ฐ์ดํธ๊ฐ ํฌํจ๋ Secure Development Solutions์์ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค.
ํ๊ณ์ ๋จ์
Puma Scan์ ๊ฐ๋ ฅํ C# ๋ณด์ ๋ถ์์ ์ ๊ณตํ์ง๋ง, ํนํ ๊ด๋ฒ์ํ ์ ์ ๋ถ์ ํ๋ซํผ๊ณผ ๋น๊ตํ ๋ ๋ช ๊ฐ์ง ์ฃผ๋ชฉํ ๋งํ ์ ํ ์ฌํญ์ด ์์ต๋๋ค.
- ๋ณด์์๋ง ์ง์คํฉ๋๋ค
Puma Scan์ ์ฑ๋ฅ ๋ฌธ์ , ์ ์ง ๊ด๋ฆฌ์ฑ, ์ฝ๋ ์ ์ทจ ๋๋ ์ค๊ณ ๊ฒฐํจ์ ๋ํ ๋ถ์์ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ผ๋ฐ์ฉ ์ ์ ๋ถ์๊ธฐ๊ฐ ์๋๋๋ค. - ์ปค๋ฎค๋ํฐ ์๋์
์ ์ ํ์ ์
๋๋ค
CI/CD ํตํฉ, ํ ๋ณด๊ณ , ์ฌ์ฉ์ ์ง์ ๊ท์น ๋ฐ ์ง์ ๊ธฐ๋ฅ์ด ๋ถ์กฑํฉ๋๋ค. ๊ธฐ์ ์ฉ์ผ๋ก๋ Professional ๋ฒ์ ๋ง ์ ๊ณต๋๋ฉฐ, ์ถ๊ฐ ๋ผ์ด์ ์ค๊ฐ ํ์ํ ์ ์์ต๋๋ค. - ๊ท์น ์ธํธ ํญ์ด ์ข์ต๋๋ค Fortify, Checkmarx, Veracode์ ๊ฐ์ ๋ํ ํ๋ซํผ๋ณด๋ค.
Puma Scan์ ๋ณด๋ค ์ง๋ณด๋ ์ค์ผ ์ถ์ ์ด๋ ์ํฉ ์ธ์ ์ค์บ๋์ด ํ์ํ ์ทจ์ฝ์ ์ ๋์น ์ ์์ต๋๋ค. - ์๊ฐํ๋ ๊ตฌ์กฐ์ ํต์ฐฐ๋ ฅ์ด ์์
NDepend์ ๊ฐ์ ๋๊ตฌ์ ๋ฌ๋ฆฌ Puma Scan์ ํธ์ถ ๊ทธ๋ํ, ์ข ์์ฑ ๋งต ๋๋ ์ฝ๋ ๊ตฌ์กฐ ๋ถ์์ ์ ๊ณตํ์ง ์์ต๋๋ค. - ์ฌ๋ฌ ์ธ์ด์ ๋ํ SAST ์ง์ ๋ถ์กฑ
Puma Scan์ C#์๋ง ์ด์ ์ ๋ง์ถ๊ณ ์๊ธฐ ๋๋ฌธ์, JavaScript, Java ๋๋ Python ์ค์บ๋์ด ํ์ํ ํด๋ฆฌ๊ธ๋กฏ ์ฝ๋๋ฒ ์ด์ค๋ ํ์คํ ํ์๋ ์ ํฉํ์ง ์์ต๋๋ค. - ์
๋ฐ์ดํธ์ ์ปค๋ฎค๋ํฐ์ ๊ท๋ชจ๊ฐ ๋ ์์ต๋๋ค.
Snyk๋ GitHub์ CodeQL๊ณผ ๊ฐ์ ๋ณด์ ์ค์ฌ ์ํ๊ณ์ ๋น๊ตํ์ ๋, Puma Scan์ ์ฌ์ฉ์ ๊ธฐ๋ฐ๊ณผ ์ปค๋ฎค๋ํฐ ์ง์์ด ๋ ์ ํ์ ์ ๋๋ค.
Puma Scan์ ์ํํธ-๋ ํํธ ์ทจ์ฝ์ ํ์ง๋ฅผ ํตํด ๋ณด์ ์ฝ๋๋ฅผ ์ผ์ ์ ๋ฌด์ ์ผ๋ถ๋ก ์ ์งํ๊ณ ์ ํ๋ ๋ณด์ ์ค์ฌ C# ๊ฐ๋ฐํ์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ํนํ ๊ธ์ต์ด๋ ์๋ฃ์ฒ๋ผ ๊ท์ ์ค์์ ๋ฏผ๊ฐํ ์ฐ์ ์์ ์ ์ฉํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋์ฑ ํฌ๊ด์ ์ธ ๋ถ์์ด๋ ๋ ๊ด๋ฒ์ํ ์ธ์ด ์ง์์ ์ํ๋ ํ์ Puma Scan์ ๋ณด์ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํด์ผ ํ ์๋ ์์ต๋๋ค.
๋ณด์ ์ฝ๋ ์ค์บ
๋ณด์ ์ฝ๋ ์ค์บ(SCS)์ C# ๋ฐ .NET ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ์ทจ์ฝ์ ์ ์๋ณํ๋๋ก ์ค๊ณ๋ ๋ฌด๋ฃ ์คํ ์์ค Roslyn ๊ธฐ๋ฐ ์ ์ ๋ถ์ ๋๊ตฌ์ ๋๋ค. Visual Studio ๋ฐ MSBuild๋ฅผ ํตํด ๋น๋ ํ์ดํ๋ผ์ธ ๋ฐ ๊ฐ๋ฐ์ ์ํฌํ๋ก์ ์ง์ ํตํฉ๋๋ฉฐ, ์ฃผ๋ก OWASP Top 10 ๋ฐ CWE ํ์ค์์ ์ง์ ๋ ์์ ํ์ง ์์ ์ฝ๋ฉ ํจํด์ ํ์งํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค.
SCS๋ ๋ณต์กํ ์ค์ ์ด๋ ๋ฌด๊ฑฐ์ด ๋ผ์ด์ ์ค ์์ด ๊ฐ๋ฐ ์ค์ ๊ฐ๋ณ๊ณ ๋ณด์ ์ค์ฌ์ ํผ๋๋ฐฑ์ ์ํ๋ ๊ฐ๋ฐ์์๊ฒ ํนํ ์ ์ฉํฉ๋๋ค.
์ฅ์
- Roslyn ์ปดํ์ผ๋ฌ ํ๋ซํผ์ ์ฌ์ฉํ์ฌ ๊ตฌ์ถ๋์ด .NET ์ํ๊ณ์ ๋์ ํธํ์ฑ์ ์ ๊ณตํฉ๋๋ค.
- Visual Studio ๋ฐ MSBuild์์ ์ํํ ํตํฉ์ผ๋ก ์ค์๊ฐ ๊ฐ์ง ๋ฐ ํผ๋๋ฐฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋ค์๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์ทจ์ฝ์ ์ ํ์ ์ผ๋ก ์ผ์ต๋๋ค.
- SQL ์ฃผ์
- XSS (๊ต์ฐจ ์ฌ์ดํธ ์คํฌ๋ฆฝํ )
- ํ๋์ฝ๋ฉ๋ ์๊ฒฉ ์ฆ๋ช
- ์์ ํ์ง ์์ ์ญ ์ง๋ ฌํ
- ๋ช ๋ น ์ฃผ์
- ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ฉฐ ๋น๋ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
- NuGet ๋๋ GitHub Actions๋ฅผ ํตํด CI/CD ํ์ดํ๋ผ์ธ์ ์ถ๊ฐํ์ฌ ์๋ ์ค์บ๋์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋น๋ฒํ ์ ๋ฐ์ดํธ์ ํ์ฑ GitHub ์ ์ฅ์
- C# ํ๋ก์ ํธ์ ์์ ํ ๊ฐ๋ฐ ๊ดํ์ ์ํ ์ข์ ์์์
- SARIF ํ์์ ์ถ๋ ฅ์ ์ง์ํ์ฌ ๋ณด์ ๋์๋ณด๋ ๋ฐ ์ง๊ณ๊ธฐ์ ํธํ๋ฉ๋๋ค.
ํ๊ณ์ ๋จ์
C# ๊ฐ๋ฐ์์๊ฒ๋ ๊ฐ๋ ฅํ ์ ์ฉ์ฑ์ด ์์ง๋ง, Security Code Scan์ ๊ท๋ชจ๊ฐ ํฌ๊ฑฐ๋ ๊ท์ ๊ฐ ์๊ฒฉํ ํ๊ฒฝ์์์ ์ ํฉ์ฑ์ ์ํฅ์ ๋ฏธ์น๋ ๋ช ๊ฐ์ง ์ ํ ์ฌํญ์ด ์์ต๋๋ค.
- ์ ํ๋ ๋ฒ์
๋ณด์ ์ทจ์ฝ์ ๋ง ๊ฒ์ฌํฉ๋๋ค. ์ฝ๋ ํ์ง ๋ฌธ์ , ์ฑ๋ฅ ๋ณ๋ชฉ ํ์ ๋๋ ์ํคํ ์ฒ ์๋ฐ์ ๊ฐ์งํ์ง ์์ต๋๋ค. - ๊ธฐ๋ณธ ์ทจ์ฝ์ ํ์ง
SCS๋ ์ผ๋ฐ์ ์ธ ์ค์๋ฅผ ํฌ์ฐฉํ์ง๋ง ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ๋ถ์กฑํฉ๋๋ค. ์ค์ผ ์ถ์ ๊น์ ์ ์ฐจ ๊ฐ ๋ถ์์์ฐ ๋ฐ ๋ฐ์ดํฐ ํ๋ฆ ๋ชจ๋ธ๋ง Fortify๋ CodeQL๊ณผ ๊ฐ์ ์ํฐํ๋ผ์ด์ฆ๊ธ ๋๊ตฌ์์ ๋ฐ๊ฒฌ๋ฉ๋๋ค. - UI, ๋์๋ณด๋ ๋๋ ๋ณด๊ณ ๊ณ์ธต์ด ์์ต๋๋ค.
๊ฐ๋ฐ์๋ ์๊ฐํ, ๊ธฐ๋ก ์ถ์ ๋๋ ์ค์ ๋ณด๊ณ ์ ๊ด๋ฆฌ ์์ด ๋น๋ ์ถ๋ ฅ์ด๋ IDE ๊ฒฝ๊ณ ์๋ง ์์กดํด์ผ ํฉ๋๋ค. - ์ ํ๋ ์ฌ์ฉ์ ์ ์
SCS์์๋ ๋ ์ ์ ์ํ์ ๋ค๋ฃจ๊ธฐ ์ํด ์ธ๋ถ์ ์ผ๋ก ์กฐ์ ๋ ๊ท์น ๊ตฌ์ฑ์ด๋ ์ฌ์ฉ์ ์ ์ ๊ท์น ์ธํธ๋ฅผ ๋ง๋๋ ๊ฒ์ ํ์ฉํ์ง ์์ต๋๋ค. - .NET ์ด์ธ์ ์ธ์ด๋ ์ง์ํ์ง ์์ต๋๋ค.
SCS๋ C#/.NET ์ ์ฉ์ ๋๋ค. ํด๋ฆฌ๊ธ๋กฏ ์คํ์ด๋ ํฌ๋ก์ค ํ๋ซํผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฆฌํ๋ ํ์๋ ๋์์ด ๋์ง ์์ต๋๋ค. - ๋์ ๋ณด์์ด๋ ๊ท์ ์ค์๊ฐ ์ค์ํ ํ๊ฒฝ์๋ ์ ํฉํ์ง ์์ต๋๋ค.
SCS๋ ์๋ฐฉ์ ๋์์ด ๋์ง๋ง, PCI-DSS๋ ISO 27001๊ณผ ๊ฐ์ ํ์ค์ด ์๊ตฌํ๋ ์ฌ์ธต์ ์ด๊ฑฐ๋ ๊ฐ์ฌ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ์ง๋ ์์ต๋๋ค.
๋ณด์ ์ฝ๋ ์ค์บ์ ๊ฐ๋ฐ ํ๋ก์ธ์ค ์ด๊ธฐ์ ๋ณต์ก์ฑ์ ๋ํ์ง ์๊ณ ๊ธฐ๋ณธ์ ์ธ ๋ณด์ ์ฝ๋ฉ ๊ฒ์ฌ๋ฅผ ๋์ ํ๋ ค๋ ๊ฐ์ธ ๊ฐ๋ฐ์๋ ์๊ท๋ชจ ํ์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋ณด์์ด ์ค์ํ ์์คํ ์ ๊ฒฝ์ฐ, ๋์ฑ ๋ฐ์ ๋๊ณ ํฌ๊ด์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ๋ซํผ์ ๋ณด์ํ๋ ๋ฐ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค.
์๋ํ๋ธ
SonarQube๋ ์ฝ๋ ํ์ง์ ์ง์์ ์ผ๋ก ๊ฒ์ฌํ๋ ๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์คํ์์ค ํ๋ซํผ์ผ๋ก, C#์ ํฌํจํ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํฉ๋๋ค. ์ฝ๋์ ๋ฒ๊ทธ, ์ทจ์ฝ์ , ์ฝ๋ ์ค๋ฉ, ์ค๋ณต์ ๋ถ์ํ์ฌ ํ์ด ํ์ง ๊ฒ์ดํธ๋ฅผ ์ํํ๊ณ ๊ฑด๊ฐํ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์งํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ์ด ๋๊ตฌ๋ ์๊ท๋ชจ ํ๊ณผ ๋๊ท๋ชจ ๊ธฐ์ ๋ชจ๋์์ DevOps ํตํฉ ๋ฐ ์ง์์ ์ธ ํ์ง ๋ชจ๋ํฐ๋ง์ ์ํด ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
SonarQube๋ SonarC# ํ๋ฌ๊ทธ์ธ์ ํตํด C# ๋ถ์์ ์ง์ํ๋ฉฐ .NET Core, .NET 5 ์ด์ ๋ฐ ์ด์ .NET Framework ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํธํ๋ฉ๋๋ค. Visual Studio์ ๊ฐ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ CI/CD ์์คํ ๋ฐ IDE์๋ ์ํํ๊ฒ ํตํฉ๋ฉ๋๋ค.
์ฅ์
- ๋ฒ๊ทธ, ์ทจ์ฝ์ฑ, ์ฝ๋ ๋์, ๊ธฐ์ ๋ถ์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ ์งํ๋ฅผ ํฌํจํ ํฌ๊ด์ ์ธ ์ ์ ์ฝ๋ ๋ถ์
- C# ๋ฐ ๊ธฐํ ์ฌ๋ฌ ์ธ์ด์ ๋ํ ๊ธฐ๋ณธ ์ง์์ผ๋ก ๋ค๊ตญ์ด ํ๋ก์ ํธ์ ์ด์์ ์ ๋๋ค.
- ์ฝ๋ ํ์ง ์ถ์ธ, ์ ์ฉ ๋ฒ์ ๋ฐ ํซ์คํ์ ์๊ฐํํ๊ธฐ ์ํ ์ค์ ๋์๋ณด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ํ ์์ฒญ์ด๋ CI ๋น๋ ์ค์ ์ฝ๋ฉ ํ์ค์ ์ ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ํ์ง ๊ฒ์ดํธ๋ฅผ ์ง์ํฉ๋๋ค.
- GitHub, Azure DevOps, Jenkins, GitLab, Bitbucket ๋ฐ ๋ค์ํ CI/CD ํ๋ซํผ๊ณผ ํตํฉ๋ฉ๋๋ค.
- SonarLint์ ํจ๊ป ์ฌ์ฉํ๋ฉด Visual Studio์์ ์ง์ ๋ฌธ์ ๋ฅผ ๊ฐ์กฐ ํ์ํฉ๋๋ค.
- CWE, OWASP ๋ฐ SANS ํ์ค์ ๋งคํ๋ ๋ณด์ ์ค์ฌ ๊ท์น์ ์ ๊ณตํฉ๋๋ค.
- ํ๊ท ๋ฐ ๊ฐ์ ์ฌํญ์ ์ถ์ ํ๊ธฐ ์ํด ์์ธํ ๋ณด๊ณ ์์ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค.
- ํ์ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋ฌด๋ฃ ์ปค๋ฎค๋ํฐ ์๋์ ๊ณผ ๊ณ ๊ธ ์ํฐํ๋ผ์ด์ฆ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ํ ์ ๋ฃ ๊ณ์ธต
- ์ง์ ๋ฐ PR ๋ถ์์ ์ง์ํ์ฌ ๋ณํฉ ์ ํ์ง ์ ํ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
ํ๊ณ์ ๋จ์
SonarQube๋ ๊ทธ ์ฅ์ ์๋ ๋ถ๊ตฌํ๊ณ ๋ณด๋ค ๊ณ ๊ธ ํ๊ฒฝ์ด๋ ๋ณด์์ ๋ฏผ๊ฐํ ํ๊ฒฝ์์ C# ์ ์ ๋ถ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฌ๋ฌ ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค.
- ๋ณด์ ๋ถ์์ ๋ํ ์ ํ๋ ๊น์ด
SonarQube๋ ๊ธฐ๋ณธ์ ์ธ ์ทจ์ฝ์ ์ ๋ค๋ฃจ์ง๋ง ๋ค์์ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ฌ์ธต์ ์ค์ผ ๋ถ์ or ์ ์ฐจ ๊ฐ ํ๋ฆ ์ถ์ Fortify, CodeQL, Checkmarx์ ๊ฐ์ ๊ฒ๋ค์ ๋๋ค. - ๊ท์น ์ฌ์ฉ์ ์ ์๊ฐ ์ ํ๋ฉ๋๋ค ์ปค๋ฎค๋ํฐ ์๋์
์์
๊ณ ๊ธ ๊ท์น ํธ์ง, ๊ฑฐ๋ฒ๋์ค ๋ฐ ๊ท์ ์ค์ ๋ณด๊ณ ์ ๊ฒฝ์ฐ Developer ๋๋ Enterprise Edition์ด ํ์ํฉ๋๋ค.๋น์ฉ์ด ์ถ๊ฐ๋ฉ๋๋ค. - ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์์๋ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
๋งค์ฐ ํฐ ์๋ฃจ์ ์ ๋ถ์ํ๋ฉด ์ค์บ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์์ผ๋ฉฐ ์ธํ๋ผ ํ๋์ด ํ์ํ ์ ์์ต๋๋ค. - ์ค์ ๋ฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ํ์ํฉ๋๋ค
์จํ๋ ๋ฏธ์ค ๋ฐฐํฌ์๋ ๊ตฌ์ฑ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ง์, ๋ฐฑ์ ๋ฐ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ๋ฏ๋ก ์๊ท๋ชจ ํ์๋ ๋ถ๋ด์ด ๋ ์ ์์ต๋๋ค. - ๋ฐํ์ ์ปจํ
์คํธ๊ฐ ๋ถ์กฑํฉ๋๋ค
์ ์ ๋ถ์๋ง์ด๋ ๋ค์์ ์์ฑํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๊ฐ์ ์ฑ ๋๋ ์ปจํ ์คํธ๋ณ ๋ฐํ์ ๋ฌธ์ ๋ฅผ ๋์น๊ฒ ๋ฉ๋๋ค. - ์ํ ๋ชจ๋ธ๋ง์ด๋ ์ํคํ
์ฒ ์๊ฐํ์ ๋ํ ๊ธฐ๋ณธ ์ง์์ด ์์ต๋๋ค.
NDepend๋ Resharper์ฒ๋ผ ์ฝ๋ ๊ตฌ์กฐ, ์ข ์์ฑ ๋๋ ์ํํธ์จ์ด ์ํคํ ์ฒ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. - ๊ท์ ๋ ์ฐ์
์๋ ๋ณด์ ๊ท์น์ด ์ถฉ๋ถํ์ง ์์ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์ธ์์ ๋์์ด ๋์ง๋ง ํ๋ซํผ์ ๋ณด์ ๊ธฐ๋ฅ์ ์ข ์ข ๋ณด์ถฉ ๊ธฐ์ ์ ๋ค๋ฅธ ์ ์ฉ SAST ๋๊ตฌ์ ์ํด.
SonarQube๋ ํนํ DevOps ํ์ดํ๋ผ์ธ์์ ์ฝ๋ ํ์ง ๊ฐํ ๋ฐ ์ง์์ ์ธ ๊ฒ์ฌ์ ๋งค์ฐ ํจ๊ณผ์ ์ธ ๋๊ตฌ์ ๋๋ค. ํ์ง๋ง ์ฌ์ธต์ ์ธ ๋ณด์ ๋ณด์ฆ์ด๋ ์ํคํ ์ฒ ๊ฐ๋ ์ ์ํด์๋ ๋ค๊ณ์ธต ์ ์ ๋ถ์ ์ ๋ต์์ ๋ค๋ฅธ ์ ๋ฌธ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
C# ์ ์ ์ฝ๋ ๋ถ์ ํ๊ฒฝ ํ์
์ํํธ์จ์ด์ ์์ ์ฑ, ์ฑ๋ฅ ๋ฐ ๋ณด์์ด ๋์์์ด ๊ฒํ ๋๋ ์๋์, ์ ์ ์ฝ๋ ๋ถ์ C# ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ผ์ดํ์ฌ์ดํด์์ ์์ด์๋ ์ ๋ ์์๊ฐ ๋์์ต๋๋ค. ์ค์ํ ๋ฒ๊ทธ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๊ฑฐ๋, ๊ท์ ์ค์๋ฅผ ๋ณด์ฅํ๊ฑฐ๋, ๊น๋ํ ์ํคํ ์ฒ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ๋ชฉํ์ด๋ , ํต์ฐฐ๋ ฅ๊ณผ ํ์ ์ ์ ๊ณตํ๋ ๋๊ตฌ๋ ๋ถ์กฑํจ์ด ์์ต๋๋ค.
Coverity, Fortify, Veracode์ ๊ฐ์ ๊ณ ๊ธ ์์ฉ ํ๋ซํผ๋ถํฐ StyleCop, FxCop, Security Code Scan๊ณผ ๊ฐ์ ์ปค๋ฎค๋ํฐ ์ง์ ์ ํธ๋ฆฌํฐ์ ์ด๋ฅด๊ธฐ๊น์ง ๊ฐ๋ฐ์์ ๊ธฐ์ ๋ชจ๋์๊ฒ ๊ด๋ฒ์ํ ์๋ฃจ์ ์ด ์ ๊ณต๋ฉ๋๋ค. ๊ฐ ์๋ฃจ์ ์ ๊ณ ์ ํ ๊ฐ์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ฌ์ธต์ ์ธ ์ทจ์ฝ์ ์ค์บ๋์ ์ ๊ณตํ๋ ์๋ฃจ์ ๋ ์๊ณ , ์ํคํ ์ฒ ๋ชจ๋ธ๋ง, ๊ฐ๋ฐ์ ์์ฐ์ฑ ํฅ์, ์ํํ CI/CD ํตํฉ์ ์ค์ํ๋ ์๋ฃจ์ ๋ ์์ต๋๋ค.
๋์ ๋๋ ์ ์ ๋ฉํฐ ํด ์ ๋ต์ ์ค์์ฑ์ด ์ปค์ง๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. ํ๋ ์์ง๋์ด๋ง ์กฐ์ง์ ๋จ์ผ ๋ถ์๊ธฐ์ ์์กดํ๋ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ์์ต๋๋ค. ๋์ ReSharper, CodeRush, Roslyn Analyzer์ ๊ฐ์ IDE ํตํฉ ๋ฆฐํฐ์ ์ํฐํ๋ผ์ด์ฆ๊ธ SAST ๋๊ตฌ๋ฅผ ๊ฒฐํฉํ์ฌ ๊ณ์ธต์ ๊ฐ์์ฑ์ ํ๋ณดํฉ๋๋ค. ํํธ, DevSecOps ํ์ Semgrep, Snyk, CodeQL๊ณผ ๊ฐ์ ์๋ฃจ์ ์ ์๋ํ๋ ํ์ดํ๋ผ์ธ์ ์ ์ ๋ ๋ง์ด ๋ด์ฅํ์ฌ ๋ฐฐํฌ ์ ์ ์ทจ์ฝ์ ์ ํด๊ฒฐํ๊ณ ์์ต๋๋ค.
์ด๋ฌํ ์ ํ๋ค ๊ฐ์ด๋ฐ, SMART TS XL ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ ํ๋ซํผ์ผ๋ก ๋ถ์ํ๊ณ ์์ต๋๋ค. ๊ด๋ฒ์ํ ๊ท์น ์ฌ์ฉ์ ์ ์, ์ ๋ฐํ COBOL ๋ฐ ๋ ๊ฑฐ์ ์ง์์ ํตํด ์ํฐํ๋ผ์ด์ฆ๊ธ ์ ์ ๋ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ด์ ๋ ์ต์ C# ์ฝ๋๋ฒ ์ด์ค๊น์ง ์ง์ ๋ฒ์๋ฅผ ํ์ฅํ๊ณ ์์ต๋๋ค. ๊ธฐ์กด ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ฐ๊ฒฐํ๋ ๋ฅ๋ ฅ์ ๋จ์ผ ํ๋ซํผ์์ ํ์ง๊ณผ ๋ณด์์ ํตํฉํ๋ ค๋ ๋๊ท๋ชจ, ๊ท์ ๋์ ๋๋ ํ์ด๋ธ๋ฆฌ๋ ์กฐ์ง์ ํนํ ์ ์ฉํฉ๋๋ค.
์์ ์ ์ ํฉํ ๋๊ตฌ ์ ํ
๊ถ๊ทน์ ์ผ๋ก C#์ "์ต๊ณ ์" ์ ์ ๋ถ์ ๋๊ตฌ๋ ์ํฉ์ ๋ฐ๋ผ ํฌ๊ฒ ๋ฌ๋ผ์ง๋๋ค. ํ์ ๋ค์๊ณผ ๊ฐ์ ์์๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ์ฝ๋๋ฒ ์ด์ค์ ํฌ๊ธฐ์ ๋ณต์ก์ฑ
- ๋ณด์ ๋ฐ ๊ท์ ์ค์ ์๊ตฌ ์ฌํญ
- ๊ฐ๋ฐ ํ๊ฒฝ ๋ฐ CI/CD ํ์ดํ๋ผ์ธ๊ณผ์ ํตํฉ
- ์ฌ์ฉ์ ์ ์ ๋ฐ ๊ท์น ํ์ฅ์ฑ
- ๋น์ฉ, ๋ผ์ด์ผ์ฑ ๋ฐ ์ง์ ์๊ตฌ ์ฌํญ
๋จ์ผ ๋๊ตฌ๋ง์ผ๋ก ๋ชจ๋ ๊ฒ์ ํด๊ฒฐํ ์๋ ์์ต๋๋ค. ์ง์ ํ ๊ฐ์น๋ ์ํฌํ๋ก์ ์ํ์ ๋ง์ถฐ ๋ถ์๊ธฐ, ๋ฆฐํฐ, ์ค์บ๋๋ฅผ ํตํฉ์ ์ผ๋ก ๊ตฌ์ถํ๋ ๋ฐ ์์ต๋๋ค.
์ ์คํ ๋๊ตฌ ์ ํ๊ณผ ๊ฐ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ฒฐํฉํจ์ผ๋ก์จ ํ์ ๊ธฐ์ ๋ถ์ฑ๋ฅผ ํฌ๊ฒ ์ค์ด๊ณ , ๋ณด์ ํ์ธ๋ฅผ ๊ฐํํ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ๋งค์ผ ๋ ๋์, ๋ ์์ ํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด C# ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ์ง์ํ ์ ์์ต๋๋ค.