JavaScript๋ ๋จ์ํ ์คํฌ๋ฆฝํ ์ธ์ด์์ ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๊ฐ์ฅ ์ค์ํ ์ถ ์ค ํ๋๋ก ๋ฐ์ ํ์ต๋๋ค. JavaScript๋ ๋์ ์น ์ ํ๋ฆฌ์ผ์ด์ , Node.js๋ฅผ ํตํ ๋ฐฑ์๋ ์๋น์ค, React Native์ ๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ํตํ ๋ชจ๋ฐ์ผ ์ฑ, ์ฌ์ง์ด ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ๊น์ง ์ง์ํฉ๋๋ค. JavaScript ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง๊ณ ๋ณต์ก์ฑ, ์ฝ๋ ํ์ง ์ ์งํนํ ์ธ์ด์ ์ญ๋์ ์ด๊ณ ๋์จํ ์ ํ์ ํน์ฑ์ ๊ฐ์ํ ๋ ์ผ๊ด์ฑ๊ณผ ๋ณด์์ ํ๋ณดํ๋ ๊ฒ์ด ์ ์ ๋ ์ด๋ ค์์ง๊ณ ์์ต๋๋ค.
์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ ์ด๋ฌํ ๊ณผ์ ์ ๋ํ ๊ฐ๋ ฅํ ํด๊ฒฐ์ฑ ์ ์ ์ํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ์์ค ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ๊ฒ์ฌํจ์ผ๋ก์จ ๊ฐ๋ฐ ์ฃผ๊ธฐ ์ด๊ธฐ์ ๊ด๋ฒ์ํ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค. ์ฌ์ฉ๋์ง ์๋ ๋ณ์์ ๋๋ฌํ ์ ์๋ ์ฝ๋๋ฅผ ํฌ์ฐฉํ๋ ๊ฒ๋ถํฐ ์ฝ๋ฉ ํ์ค์ ์ ์ฉํ๊ณ ์ ์ฌ์ ์ธ ๋ณด์ ๊ฒฐํจ์ ์๋ณํ๋ ๊ฒ๊น์ง, ์ ์ ๋ถ์์ ๊ฐ๋ฐ์๊ฐ ๋ ๊น๋ํ๊ณ ์์ ์ ์ธ JavaScript๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ ์ค๋๋ค. ๋ ์ค์ํ ๊ฒ์, CI/CD ํ์ดํ๋ผ์ธ์ ์๋ฒฝํ๊ฒ ํตํฉ๋ฉ๋๋ค.์ด๋ฅผ ํตํด ํ์ ํ์ง ๊ฒ์ฌ๋ฅผ ์๋ํํ๊ณ , ์๋ ์ฝ๋ ๊ฒํ ์์ ์ ์ค์ด๊ณ , ๋๊ท๋ชจ๋ก ๊ฑฐ๋ฒ๋์ค๋ฅผ ์ํํ ์ ์์ต๋๋ค.
2025๋ ์ ์ถ์๋ JavaScript์ฉ ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ ์ค ์ต๊ณ ์ ๋๊ตฌ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋ฒ ์คํธ ํ๋ํฐ์ค๋ฅผ ์ถ๊ตฌํ๋ ์๋ก ๊ฐ๋ฐ์๋ , ์ํฐํ๋ผ์ด์ฆ๊ธ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ ๋๊ท๋ชจ ์์ง๋์ด๋ง ํ์ ์ผ์์ด๋ , ์ ์ ํ ๋๊ตฌ๋ ๊ฐ๋ฐ ์ํฌํ๋ก, ์ฝ๋๋ฒ ์ด์ค ์ํ, ๊ทธ๋ฆฌ๊ณ ์ํํธ์จ์ด ์ ์ง ๊ด๋ฆฌ ํธ์์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ต๊ณ ์ ๋๊ตฌ๋ค์ ์ดํด๋ณด๊ณ , ๊ฐ ์ฌ์ฉ ์ฌ๋ก์ ๋ง๋ ๋๊ตฌ๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
SMART TS XL: ํ๋ฉด์ ๋์ด์๋ ์ํฐํ๋ผ์ด์ฆ๊ธ ํต์ฐฐ๋ ฅ
์ ํต์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์์ต๋๋ค. COBOL ๋ฐ ๋ฉ์ธํ๋ ์ ๋ถ์ ๊ธฐ๋ฅ, SMART TS XL JavaScript๋ฅผ ํฌํจํ ํ๋์ ์ธ ๋ค๊ตญ์ด ๊ธฐ์ ํ๊ฒฝ์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๋๋ก ํ์ฅ๋์์ต๋๋ค. ๋ ๋ง์ ์กฐ์ง์ด ํ์คํ ๊ฐ๋ฐ ๋ฐ ํ์ด๋ธ๋ฆฌ๋ ์์คํ ์ ๋์ ํจ์ ๋ฐ๋ผ, SMART TS XL ๋จ์ผ ํตํฉ ์ธํฐํ์ด์ค์์ ํฌ๋ก์ค ํ๋ซํผ ์ ์ ์ฝ๋ ๋ถ์์ ์ ๊ณตํ์ฌ ๊ฐ๋ ฅํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ SMART TS XL ํ๋ถํ ๋ฉํ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง, ์ ์ด ๋ฐ ๋ฐ์ดํฐ ํ๋ฆ ์๊ฐํ, ๊ทธ๋ฆฌ๊ณ ์ํฅ ๋ถ์์ ์ ๊ณตํ์ฌ ํ์ด ์ฝ๋๋ฒ ์ด์ค ์ ๋ฐ์์ ํจ์, ๋ชจ๋, ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ์ํธ ์์ฉํ๋์ง ๋ ์ ์ดํดํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ๋จ์ํ ๋ฆฐํ ์ด๋ ๊ตฌ๋ฌธ ๊ฒ์ฌ๋ฅผ ๋์ด, ์ฝ๋ ์คํ ์์ด๋ ์ํคํ ์ฒ ์ข ์์ฑ, ๋ก์ง ๋ณต์ก์ฑ, ๋ฐํ์ ์ํ์ ๋ํ ์ฌ์ธต์ ์ธ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
๊ณ ๊ธ ๊ทธ๋ํ ๊ธฐ๋ฐ ํ์ ๋๊ตฌ๋ฅผ ํตํด ๊ฐ๋ฐ์์ ์ค๊ณ์๋ ๋ฐฉ๋ํ ์ฝ๋๋ฒ ์ด์ค ์ ๋ฐ์์ API ์ฌ์ฉ, ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ, ํจ์ ํธ์ถ์ ์ถ์ ํ ์ ์์ต๋๋ค. ์ด๋ ๋์ ๋ก๋ฉ, ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ๋น๋๊ธฐ ์์ ์ ์ฌ์ฉํ๋ ๋๊ท๋ชจ JavaScript ํ๋ก์ ํธ์์ ํนํ ์ ์ฉํ๋ฉฐ, ์ค์ ์คํ ๊ฒฝ๋ก๋ฅผ ํ์ ํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
์ ์ฅ์ SMART TS XL:
- ๊ตฌ๋ฌธ์ ๋์ด ์ ์ด ํ๋ฆ ๋ฐ ๋ฐ์ดํฐ ํ๋ฆ ๋ชจ๋ธ๋ง์ ํฌํจํ ์ฌ์ธต์ ์ธ ์ ์ ๋ถ์์ ์ ๊ณตํฉ๋๋ค.
- ๋ชจ๋ ๊ด๊ณ, API ์ฌ์ฉ ๋ฐ ํจ์ ํธ์ถ ๊ณ์ธต์ ์๊ฐํํฉ๋๋ค.
- ํตํฉ ์ธํฐํ์ด์ค์์ ๋ ๊ฑฐ์ ๋ฐ ์ต์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ฐ์ถ ํ์ด๋ธ๋ฆฌ๋ ํ๊ฒฝ์ ์ง์ํฉ๋๋ค.
- ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ๋ ์ ์ฒด ์์คํ ์ํฅ ๋ถ์ ๋ฐ ๋ ผ๋ฆฌ ์ถ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ฌ์ฉ์ ์ ์๊ฐ ๊ฐ๋ฅํ๊ณ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํ๋ถํ ๊ฒ์ ๋ฐ ์๋ฏธ ํ๊ทธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ์ํฐํ๋ผ์ด์ฆ ๊ฑฐ๋ฒ๋์ค, ๊ฐ์ฌ ๋ฐ ๋ฌธ์ํ ์ํฌํ๋ก์ ์ ํตํฉ๋ฉ๋๋ค.
- ๋๊ท๋ชจ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์จ๋ณด๋ฉ, ์ ์ง ๊ด๋ฆฌ ๋ฐ ํ๋ํ ๋ ธ๋ ฅ์ ๊ฐํํฉ๋๋ค.
์ผ์์ ์ธ ๋ฆฐํ ์ ์ํ ESLint๋ ํฌ๋งทํ ์ ์ํ Prettier๋ฅผ ๋์ฒดํ ์๋ ์์ง๋ง, SMART TS XL ์ด๋ฌํ ๋๊ตฌ๋ฅผ ๋ณด์ํ์ฌ ์์คํ ์์ค์ ๊ฐ์์ฑ์ ์ ๊ณตํ๋ฏ๋ก JavaScript๋ฅผ ํฌํจํ์ฌ ๋ ๊ฑฐ์ ๋ฐ ์ต์ ํ๋ซํผ ๋ชจ๋์์ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ฝ๋ ์ธํ ๋ฆฌ์ ์ค, ๋ณด์ ์ธ์ ๋ฐ ์ํคํ ์ฒ ๋ช ํ์ฑ์ด ํ์ํ ์กฐ์ง์ ํ์ํ ์ ํ์ ๋๋ค.
ESLint: ์ ๊ณ ํ์ค
ESLint๋ ๊ฐ์ธ ๊ฐ๋ฐ์์ ๋๊ท๋ชจ ์กฐ์ง ๋ชจ๋์์ ์ฌ์ฉํ๋ JavaScript ๋ฐ TypeScript์ฉ ์ ์ ๋ถ์ ๋๊ตฌ ์ค ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋๊ตฌ ์ค ํ๋์ ๋๋ค. ์ฃผ๋ก ๋ฆฐํฐ(linter) ์ญํ ์ ํ๋ฉฐ ์ฝ๋ ํ์ง ๊ท์น๊ณผ ์คํ์ผ ์ผ๊ด์ฑ์ ๊ฐํํฉ๋๋ค. ESLint๋ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ด ๋ฐ์ด๋๊ณ , ๋ค์ํ ํ๋ฌ๊ทธ์ธ ์ํ๊ณ๋ฅผ ์ง์ํ๋ฉฐ, ๋๋ถ๋ถ์ ์ต์ IDE ๋ฐ CI/CD ํ์ดํ๋ผ์ธ๊ณผ ์๋ฒฝํ๊ฒ ํตํฉ๋ฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ตฌ๋ฌธ ์ค๋ฅ, ์ฝ๋ ๋์ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ๊ท์น ๊ธฐ๋ฐ ๋ฆฐํ
- ํ๋ฌ๊ทธ์ธ์ ํตํ ํ์ฅ์ฑ(์: React, Vue, TypeScript, Node)
- ๋ง์ ๋ฌธ์ ์ ๋ํ ์๋ ์ฝ๋ ์์
- Prettier์ ๊ฐ์ ํฌ๋งทํฐ์์ ํธํ์ฑ
- ์ค์๊ฐ ํผ๋๋ฐฑ์ ์ํ IDE ํตํฉ
- ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ์ฝ๋ฉ ํ์ค ์ํ
.eslintrcํ์ผ - GitHub Actions, Jenkins, GitLab CI ๋ฐ ๊ธฐํ DevOps ๋๊ตฌ์์ ์ํํ ํตํฉ
ESLint๋ ํ๋ฐํธ์๋์ ํ์คํ ํ์ ์์ด์๋ ์ ๋ ๋๊ตฌ์ด์ง๋ง, ์ฌ์ธต์ ์ธ ์ ์ ๋ถ์๊ณผ ๊ธฐ์ ๊ท๋ชจ์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๋ ๋ฐ๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
ESLint์ ๋จ์ :
- ์ํคํ
์ฒ๋ ๋ฐ์ดํฐ ํ๋ฆ ๋ถ์ ์์
ESLint๋ ํ์ผ๋ณ ๋๋ ํจ์๋ณ๋ก ์ฝ๋๋ฅผ ๊ฒ์ฌํ์ง๋ง, ์ ํ๋ฆฌ์ผ์ด์ ๋ด ๋ฐ์ดํฐ ํ๋ฆ์ ๋ชจ๋ธ๋งํ์ง ์์ต๋๋ค. ํ์ผ ๊ฐ ๋ณ์๋ฅผ ์ถ์ ํ๊ฑฐ๋ ์ฌ๋ฌ ๋ชจ๋์ ๊ฑธ์ณ ๋ฐ์ํ๋ ์ ์ฌ์ ์ธ ๋ฐํ์ ๋ฌธ์ ๋ฅผ ์๋ณํ ์ ์์ต๋๋ค. - ์ฝ๋ ์ข
์์ฑ ๋ฐ ์ํฅ์ ๋ํ ๊ฐ์์ฑ์ด ์ ํ๋จ
ESLint๋ ์ํฅ ๋ถ์, ์ข ์์ฑ ๋งต, ๋๋ ๊ตฌ์ฑ ์์๋ ํจ์์ ์ํธ ์์ฉ ๋ฐฉ์์ ๋ํ ์๊ฐํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์จ๋ณด๋ฉ, ๊ฐ์ฌ ๋๋ ์์คํ ์ ์ฒด ๋ณ๊ฒฝ ๊ณํ์ ๋์์ด ๋์ง ์์ต๋๋ค. - ๋ณด์ ๊ฐ์ฌ์ฉ์ผ๋ก ์ ์๋์ง ์์์ต๋๋ค.
ํ๋ฌ๊ทธ์ธ(์: eslint-plugin-security)์ด ์กด์ฌํ์ง๋ง, ESLint๋ ๋ณด์ ์ค์บ๋๋ก ์ค๊ณ๋์ง ์์์ต๋๋ค. ์์ ํ์ง ์์ ์ญ์ง๋ ฌํ๋ ์ธ์ฆ ๊ฒฐํจ๊ณผ ๊ฐ์ ๋ณต์กํ ์ทจ์ฝ์ ์ ํ์ฌ ๋๊ตฌ ์์ด ํ์งํ ์ ์๋ ๊ธฐ๋ฅ์ด ๋ถ์กฑํฉ๋๋ค. - ๋ณต์กํ ๋ชจ๋
ธ๋ ํฌ์์๋ ํ์ฅํ๊ธฐ ์ด๋ ค์
๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค, ํนํ ๋ชจ๋ ธ๋ฆฌํฌ๋ ํ์ด๋ธ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์ฌ๋ฌ ํจํค์ง์ ํ๋ ์์ํฌ์ ๊ฑธ์ณ ESLint ๊ตฌ์ฑ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ค๋ฃจ๊ธฐ ํ๋ค๊ณ ๊ตฌ์ฑ์ด ์ด๊ธ๋๋ ๊ฒฐ๊ณผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. - ๋ ๊ฑฐ์ ์ฝ๋ ํ๋ํ์ ์ ํฉํ์ง ์์ต๋๋ค.
ESLint๋ ๋ฉํ๋ฐ์ดํฐ ๋ชจ๋ธ, ๋น์ฆ๋์ค ๋ก์ง ์ถ์ถ ๋๋ ๋ณํ ์ง์นจ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ESLint๋ ๋ฆฐํ ๋๊ตฌ์ผ ๋ฟ, ํ๋ํ ํ๋ซํผ์ด ์๋๋๋ค.
ESLint๋ JavaScript ์ฝ๋ ํ์ค์ ์ค์ํ๊ณ ์์ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๋ ๋ฐ ํ์ํ ๋น ๋ฅด๊ณ ๊ฐ๋ ฅํ๋ฉฐ ํ์์ ์ธ ๋๊ตฌ์ ๋๋ค. ํ์ง๋ง ํนํ ์ํคํ ์ฒ ๊ฐ์์ฑ, ์ํฅ ๋ถ์, ๋ณด์ ๋ณด์ฅ์ด ๋ชจ๋ ์ค์ํ ๊ธฐ์ ํ๊ฒฝ์์๋ ๋ ๊ด๋ฒ์ํ ์ฝ๋ ํ์ง ์ ๋ต์ ์ผ๋ถ๋ก ๊ฐ์ฃผ๋์ด์ผ ํฉ๋๋ค.
TypeScript: ์ ์ ์์ ์ฑ์ ์ปดํ์ผ๋ฌ์์ ์์๋ฉ๋๋ค
์ ํ ์คํฌ๋ฆฝํธ ๊ฐ๋ ฅํ ์ ์ ์ ํ ์์คํ ์ ๋์ ํ์ฌ JavaScript๋ฅผ ํฅ์์ํค๊ณ , ๊ฐ๋ฐ์๊ฐ ์ปดํ์ผ ํ์์ ๊ด๋ฒ์ํ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ ์ ์๋๋ก ํฉ๋๋ค. TypeScript ์ปดํ์ผ๋ฌ(TSC) ์์ฒด๊ฐ ๊ฐ๋ ฅํ ์ ์ ๋ถ์ ์์ง ์ญํ ์ ํ์ฌ ์ ํ ๋ถ์ผ์น, ๋๋ฌํ ์ ์๋ ์ฝ๋, ๋๋ฝ๋ ๊ฐ์ ธ์ค๊ธฐ, ์๋ชป๋ ํจ์ ์๊ทธ๋์ฒ ๋ฑ ๋ชจ๋ ๊ฒ์ ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ ์ ํ๋๊ทธ๋ก ํ์ํฉ๋๋ค.
์ ์ ํ๊ฒ ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ tsconfig.json ํ์ผ์์ TypeScript๋ ๋์ฑ ์๊ฒฉํด์ง๋๋ค. ๊ฐ๋ฐ์๋ ์๊ฒฉํ ํ์
๊ฒ์ฌ๋ฅผ ํ์ฑํํ๊ณ , no-implicit-any ๊ท์น์ ์ ์ฉํ๊ณ , ์ฝ๋๋ฒ ์ด์ค ์ ๊ทผ์ฑ์ ์ ํํ๋ ๋ฑ์ ์์
์ ์ํํ ์ ์์ต๋๋ค. TSC๋ ๋ชจ๋ ์ ๋ฐ์ ๊ฑธ์ณ ์๋ฏธ๋ก ์ ๋ถ์์ ์ํํ์ฌ ํ์ผ ๋ฐ ํจํค์ง ์ ๋ฐ์์ API ์ค์ฉ, ์๋ชป๋ ์์ฑ ์ ๊ทผ, ํ์
์๋ฐ์ ๊ฐ์งํ ์ ์๋๋ก ํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ปดํ์ผ ํ์ ์ ํ ๊ฒ์ฌ ๋ฐ ๊ตฌ์กฐ์ ์ ํ ์ ์ฉ
- ๊ฐ์ ธ์ค๊ธฐ, ๋ด๋ณด๋ด๊ธฐ ๋ฐ ํจ์ ์๊ทธ๋์ฒ์ ๊ต์ฐจ ํ์ผ ๋ถ์
- ์๊ฒฉํ ์ฝ๋ ์ ์ฑ
์ํ
tsconfig.json(์ :strict,noUnusedLocals) - ๋ผ์ด๋ธ ํผ๋๋ฐฑ ๋ฐ ์๋ ์์ฑ์ ์ํ IDE ๋ฐ ํธ์ง๊ธฐ ํตํฉ
- ๋ณต์กํ ๋น๋๊ธฐ ๋๋ ๊ธฐ๋ฅ ํ๋ฆ์์ ๋ ผ๋ฆฌ ์ค๋ฅ๋ฅผ ์กฐ๊ธฐ์ ๊ฐ์ง
- ๋ ์์ ํ ๋ชจ๋ ์ฌ์ฉ์ ์ํ ์ ํ ์ ์ธ ์๋ ์์ฑ
TSC ๋ฐ tsconfig ๊ธฐ๋ฐ ๋ถ์์ ๋จ์ :
- ์ฝ๋ ํ์ง์ด๋ ์คํ์ผ์ด ์๋ ์ ํ ์์ ์ฑ์๋ง ์ด์ ์ ๋ง์ถฅ๋๋ค.
TypeScript๋ ์ ํ๊ณผ ๊ตฌ๋ฌธ ์ ํ์ฑ์ ๊ฒ์ฌํ์ง๋ง, ์ฝ๋ ์ ์ทจ, ์์ ๋ฌธ์ ๋๋ ์ํฐํจํด์ ๋ํด์๋ ๊ฒฝ๊ณ ํ์ง ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ด๋ฆฌํ๋ ค๋ฉด ESLint๋ Prettier ๊ฐ์ ๋๊ตฌ๊ฐ ํ์ํฉ๋๋ค. - ๋ณด์ ๋ถ์ ์์
TSC๋ ์ฃผ์ ์ํ, ์์ ํ์ง ์์ API ์ฌ์ฉ, ์ ์ฌ์ ๋ฐ์ดํฐ ์ ์ถ๊ณผ ๊ฐ์ ๋ณด์ ์ทจ์ฝ์ ์ ๊ฐ์งํ์ง ๋ชปํฉ๋๋ค. ๋ํ ์์ ํ ์ฝ๋ฉ ๊ดํ์ ๊ฒ์ฆํ๊ฑฐ๋ ๋ก์ง ๊ฒฝ๋ก๋ฅผ ์์ ํ ์ ์์ต๋๋ค. - ์ํคํ
์ฒ ๋๋ ์ ์ด ํ๋ฆ์ ๋ํ ํต์ฐฐ๋ ฅ์ด ๋ถ์กฑํฉ๋๋ค.
TypeScript๋ ์ ์ด/๋ฐ์ดํฐ ํ๋ฆ ์๊ฐํ๋ ์ํคํ ์ฒ ๋งคํ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ํจ์๊ฐ ์ผ๋ง๋ ๊น์ด ์ค์ฒฉ๋์ด ์๋์ง, ์ํฅ ๋ฒ์๋ ์ด๋์ธ์ง, ๋น์ฆ๋์ค ๋ก์ง์ด ์ค๋ณต๋๋์ง ์ฌ๋ถ๋ฅผ ์๋ ค์ฃผ์ง ์์ต๋๋ค. - ๊ท์น ์ฌ์ฉ์ ์ ์ ๋ฐ ํ์ฅ์ฑ์ ๋ํ ์ง์์ด ์ ํ๋จ
๋ฆฐํฐ๋ ์ํฐํ๋ผ์ด์ฆ๊ธ ๋ถ์๊ธฐ์ ๋ฌ๋ฆฌ TSC๋ ๊ณ ์ ๋ ๊ฒ์ฌ ์ธํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ตฌ์ฑ์ ๊ฐ๋ฅํ์ง๋ง, ํ๋ฌ๊ทธ์ธ์ ํตํด TypeScript๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ ๊ฒ ์ด์์ ์๋ก์ด ์ ํ์ ๋ถ์์ ์ง์ํ๋๋ก ํ์ฅํ ์๋ ์์ต๋๋ค. - ํน์ ์ํฉ์์ ์ธ๋ชจ์๋ ์ฝ๋์ ์ฌ์ฉ๋์ง ์๋ ๋
ผ๋ฆฌ๋ฅผ ๋ฌด์ํฉ๋๋ค.
TSC๋ ๋์ ์ผ๋ก ๋ก๋๋ ๋ชจ๋์ด๋ ์กฐ๊ฑด๋ถ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ฐํ์ ๊ธฐ๋ฅ ์ ํ๊ณผ ๊ด๋ จ๋ ์ํฉ์์ ์ธ๋ชจ์๋ ์ฝ๋๋ฅผ ๋์น ์ ์์ต๋๋ค. - ํ์ง ๋์๋ณด๋ ๋๋ DevOps ์ ์ฑ
๊ณผ ํตํฉ๋์ง ์์
TypeScript๋ ํ์ดํ๋ผ์ธ ์ ๋ฐ์ ๊ฑธ์ณ ๋ณด๊ณ , ์ด๋ ฅ ์ถ์ ๋๋ ์ ์ฑ ์ ์ฉ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ฆ๊ฐ์ ์ธ ์ปดํ์ผ๋ฌ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ง๋ง ํ ๋๋ ์์คํ ์์ค์์์ ๊ฐ์์ฑ์ด ๋ถ์กฑํฉ๋๋ค.
TypeScript๋ ์์ ํ๊ณ ์ ํ ๊ฒ์ฆ๋ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๊ธฐ๋ฐ์ด๋ฉฐ, TypeScript ์ปดํ์ผ๋ฌ๋ ํ์์ ์ธ ์ ์ ๋ถ์์ ์ํํฉ๋๋ค. ํ์ง๋ง ์๋ฒฝํ ํ์ง์ด๋ ๋ณด์ ์๋ฃจ์ ์ ์๋๋๋ค. ํนํ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์ TypeScript ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์๋ฒฝํ๊ฒ ๊ด๋ฆฌํ๋ ค๋ฉด ํ์ TSC๋ฅผ ๋ฆฐํฐ, SAST ๋๊ตฌ ๋ฐ ์ํคํ ์ฒ ๋ถ์๊ธฐ์ ํจ๊ป ์ฌ์ฉํ์ฌ ๊ด๋ฒ์ํ ์ฝ๋ ๊ฐ์์ฑ๊ณผ ๊ท์ ์ค์๋ฅผ ํ๋ณดํด์ผ ํฉ๋๋ค.
SonarQube(SonarJS ํฌํจ): ์ฝ๋ ํ์ง ๊ฑฐ๋ฒ๋์ค
SonarQube๋ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ฝ๋ ํ์ง, ์ ์ง๋ณด์์ฑ ๋ฐ ๋ณด์์ ํ๊ฐํ๋๋ก ์ค๊ณ๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ ์ ์ฝ๋ ๋ถ์ ํ๋ซํผ์ ๋๋ค. SonarJS ํ๋ฌ๊ทธ์ธ์ ํตํด JavaScript์ TypeScript๋ฅผ ๊ฐ๋ ฅํ๊ฒ ์ง์ํ์ฌ ์ฝ๋ ๋์, ๋ฒ๊ทธ, ์ทจ์ฝ์ ๋ฐ ์ค๋ณต์ ๋ํ ์๋ํ๋ ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
SonarQube๋ CI/CD ํ์ดํ๋ผ์ธ ๋ฐ DevOps ์ํฌํ๋ก์ ์๋ฒฝํ๊ฒ ํตํฉ๋์ด ํ์ด ํ์ง ๊ฒ์ดํธ๋ฅผ ์ ์ฉํ๊ณ ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ๊ธฐ์ ๋ถ์ฑ๋ฅผ ์ถ์ ํ๋ ๊ฒ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค. ํนํ ์ฝ๋ ๊ฒํ ๋ฐ ๊ท์ ์ค์ ํ์ค์ ๋ถํฉํ๋ ์ค์ ์ง์ค์ ๋์๋ณด๋, ๊ณผ๊ฑฐ ๋ณด๊ณ , ์ ์ฑ ์ ์ฉ ๋ฉ์ปค๋์ฆ ๋๋ถ์ ๊ธฐ์ ํ๊ฒฝ์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- JavaScript ๋ฐ TypeScript์ ๋ฒ๊ทธ, ์ฝ๋ ๋์ ๋ฐ ๋ณด์ ์ทจ์ฝ์ ๊ฐ์ง
- ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ํ์ง ๊ฒ์ดํธ ๋ฐ ์ฝ๋ฉ ๊ท์น ์ํ
- ๊ณผ๊ฑฐ ์งํ์ ์ถ์ธ ๊ทธ๋ํ๊ฐ ํฌํจ๋ ํ๋ถํ ๋์๋ณด๋
- Jenkins, GitHub Actions, GitLab, Azure DevOps ๋ฑ๊ณผ์ ์ํํ ํตํฉ
- ์ฝ๋ ์ค๋ณต ๋ฐ ์ํ ๋ณต์ก๋ ๋ถ์์ ๋ํ ์ฌ์ธต ์ง์
- OWASP Top 10, CWE ๋ฐ SANS ์ง์นจ์ ๋ง์ถฐ ๊ท์ ์ค์ ์ถ์
SonarQube(SonarJS ํฌํจ)์ ๋จ์ :
- ์ฌ์ธต์ ์ธ ์ ์ด ๋ฐ ๋ฐ์ดํฐ ํ๋ฆ ๋ชจ๋ธ๋ง์ด ๋ถ์กฑํฉ๋๋ค.
SonarQube๋ ๋ง์ ๋ฌธ์ ์ ์ ์ง์ ํ์ง๋ง, ํจ์๋ ์๋น์ค๋ฅผ ํตํ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ํ ์ฌ์ธต์ ์ธ ์๋ฏธ๋ก ์ ๋ชจ๋ธ์ ๊ตฌ์ถํ์ง ์์ต๋๋ค. ๋น๋๊ธฐ ์์ ์ ๋ฐ์์ ๊ฐ์ ์ถ์ ํ๊ฑฐ๋ ๋ณต์กํ ์ฝ๋ฐฑ ์ฒด์ธ์์ ๋ฐํ์ ๋ถ์์ฉ์ ํ์ ํ ์ ์์ต๋๋ค. - ์ ํ๋ ์ํฉ ์ธ์
SonarJS๋ ์ฃผ๋ก ํจํด ๊ธฐ๋ฐ ๊ท์น์ผ๋ก ์๋ํฉ๋๋ค. ๋ฐ๋ผ์ API์ ๋ถ์ ์ ํ ์ฌ์ฉ, Promise์ ์ค์ฉ, ๋๋ ๋ ๊ด๋ฒ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ์์กดํ๋ ๋ ผ๋ฆฌ ์ค๋ฅ์ ๊ฐ์ ๋ฏธ๋ฌํ ๋ฌธ์ ๋ฅผ ๋์น ์ ์์ต๋๋ค. - ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์์์ ๊ฑฐ์ง ์์ฑ ๋ฐ ๋
ธ์ด์ฆ
์ํฐํ๋ผ์ด์ฆ๊ธ JavaScript ๋ชจ๋ ธ๋ ํฌ์์ SonarQube๋ ๋ถํ์ํ ์๋ฆผ์ ๊ณผ๋ํ๊ฒ ์์ฑํ ์ ์์ผ๋ฉฐ, ๊ทธ์ค ์๋น์๋ ์ค์ํ์ง ์์ ์๋ฆผ์ ๋๋ค. ์ด๋ก ์ธํด ์๋ฆผ ํผ๋ก๊ฐ ๋ฐ์ํ๊ฑฐ๋ ํ์ด ๊ฒฝ๊ณ ๋ฅผ ์์ ๋ฌด์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. - ์ ์ ๊ท์น ์ธํธ ์ ํ ์ฌํญ
SonarJS๋ ๊ท์น์ ์ฌ์ฉ์ ์ ์ํ๊ฑฐ๋ ์ ํํ ์ ์์ง๋ง, ๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ํจํด์ด๋ ํ๋ก์ ํธ๋ณ ๋ณด์ ์กฐ๊ฑด์ ์ ์ํ๋ ๋ฐ ์์ด Semgrep์ด๋ CodeQL๊ณผ ๊ฐ์ ๋๊ตฌ๋งํผ ์ ์ฐํ์ง๋ ์์ต๋๋ค. - ์ต์ JavaScript ์ํ๊ณ์ ๋ํ ์ ํ๋ ์ง์
ECMAScript ๋ชจ๋, ๋ฐ์ฝ๋ ์ดํฐ ๋๋ ๊ณ ๊ธ TypeScript ๊ตฌ๋ฌธ๊ณผ ๊ฐ์ ์ต์ ๊ธฐ๋ฅ์ ๋ํ ์ง์์ด ์ง์ฐ๋ ์ ์์ต๋๋ค. ํนํ ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋์ง ์๋ ์์ฒด ํธ์คํ ์ธ์คํด์ค์ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. - SonarLint์ ํจ๊ป ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ค์๊ฐ ๊ฐ๋ฐ์ ํผ๋๋ฐฑ์ด ์ ๊ณต๋์ง ์์ต๋๋ค.
SonarQube ์์ฒด๋ SonarLint์ ํตํฉ๋์ง ์๋ ํ ํธ์ง๊ธฐ ๋ด ์ง๋จ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ํผ๋๋ฐฑ ๋ฃจํ๊ฐ ํ์ดํ๋ผ์ธ ๋จ๊ณ๋ก ์ง์ฐ๋์ด ๊ฐ๋ฐ์์ ์ ์์ฑ์ด ์ ํ๋ฉ๋๋ค.
SonarJS๋ฅผ ํ์ฌํ SonarQube๋ ํนํ ๋๊ท๋ชจ JavaScript ํ๋ก์ ํธ์์ ์ผ๊ด๋ ํ์ง๊ณผ ๋ณด์ ๊ธฐ์ค์ ์ ์ฉํ๊ณ ์ ํ๋ ํ์๊ฒ ๊ฐ๋ ฅํ ์๋ฃจ์ ์ ๋๋ค. ๋์๋ณด๋, ๊ท์น ์ ์ฉ, CI ํ์ดํ๋ผ์ธ๊ณผ์ ํตํฉ ๊ธฐ๋ฅ์ ๊ฑฐ๋ฒ๋์ค ๋ฐ ๊ท์ ์ค์์ ์ด์์ ์ ๋๋ค. ํ์ง๋ง ์ฌ์ธต์ ์ธ ์๋ฏธ ๋ถ์, ๋ฐํ์ ๋์ ํต์ฐฐ๋ ฅ ๋๋ ์ ๋ฐํ ๊ท์น ์ ์ด๋ฅผ ์ํด์๋ SonarQube๋ฅผ CodeQL์ด๋ Semgrep๊ณผ ๊ฐ์ ์ปจํ ์คํธ ์ธ์ ๋๋ ๊ฐ๋ฐ์ ์ค์ฌ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค.
JSHint: JS ๊ธฐ๋ณธ์ ์ํ ๊ฐ๋ฒผ์ด ๋ฆฐํ
JSHint๋ JavaScript ์ฝ๋์์ ํํ ๋ฐ์ํ๋ ์ค๋ฅ์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ํฌ์ฐฉํ๋๋ก ์ค๊ณ๋ ๋น ๋ฅด๊ณ ๊ฐ๋ฒผ์ด ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ์ ๋๋ค. ์๋ JSLint๋ณด๋ค ๋ ์ ์ฐํ ๋์์ผ๋ก ๊ฐ๋ฐ๋์์ผ๋ฉฐ, ํนํ ๋จ์์ฑ, ์๋, ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ ์ ์ ๊ท์น ๊ตฌ์ฑ์ด ์ค์ํ ํ๊ฒฝ์์ ์ค์ ๊ท๋ชจ JavaScript ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๊ฐ๋ฐ์์๊ฒ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
๋ชจ๋ํ ํ์ฅ์ฑ๊ณผ ์ํ๊ณ ํ๋ฌ๊ทธ์ธ์ ์ค์ ์ ๋๋ ESLint์ ๋ฌ๋ฆฌ, JSHint๋ ๊ฐ๊ฒฐํ๊ณ ๋ ๋จ์ ์ธ ๋ฆฐํ ๋ฐฉ์์ ์ ๊ณตํ์ฌ ๋ณต์กํ ๊ท์น ์์ง์ ๊ตฌ์ฑํ์ง ์๊ณ ๋ ๋ช ํํ ์ฝ๋ฉ ๋ฌธ์ ์ ๋ํ ๋น ๋ฅธ ํผ๋๋ฐฑ์ ์ํ๋ ํ์ ์ ํฉํฉ๋๋ค. ๋น๋ ํ๋ก์ธ์ค์ ์ฝ๊ฒ ํตํฉํ ์ ์์ผ๋ฉฐ, ์ด์ ECMAScript ๋ฒ์ ์ ํฌํจํ ๋ ๊ฑฐ์ JavaScript ์ฝ๋๋ฒ ์ด์ค์๋ ์ ์๋ํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ผ๋ฐ์ ์ธ ๊ตฌ๋ฌธ ์ค๋ฅ, ์ ์ธ๋์ง ์์ ๋ณ์ ๋ฐ ์ ํ ๊ฐ์ ๋ณํ ํจ์ ์ ๊ฐ์งํฉ๋๋ค.
- ๊ตฌ์ฑ์ ํตํด ์ง์
.jshintrc๋๋ ์ธ๋ผ์ธ ๋๊ธ - ์ต์ํ์ ์ข ์์ฑ์ผ๋ก ๋น ๋ฅธ ์คํ
- Grunt, Gulp, npm ์คํฌ๋ฆฝํธ์ ๊ฐ์ ๋น๋ ๋๊ตฌ์์ ๊ฐ๋จํ ํตํฉ
- ์ด์ JavaScript ํ๊ฒฝ(ES5 ๋ฐ ์ด์ ๋ฒ์ )์์ ์ ์๋ํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ , ํฐ๋ฏธ๋ ๋๋ CI/CD ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ก ์คํ๋ฉ๋๋ค.
JSHint์ ๋จ์ :
- ์ต์ JavaScript(ES6+)์ ๋ํ ์ง์์ด ์ ํ๋จ
JSHint๋ ์ต์ ๊ตฌ๋ฌธ์ ์ด๋ ์ ๋ ์ง์ํ์ง๋ง, ๋ชจ๋, ๊ตฌ์กฐ ๋ถํด, ํ์ดํ ํจ์, async/await, ์ต์ ๋ ์ฒด์ด๋, TypeScript ๋ฑ์ ๊ธฐ๋ฅ ์ฒ๋ฆฌ์๋ ๋ค์ฒ์ง๋๋ค. ๋ํ, ์ต์ JS ์ํ๊ณ๋ฅผ ์ผ๋์ ๋๊ณ ์ค๊ณ๋์ง ์์์ต๋๋ค. - ํ๋ฌ๊ทธ์ธ ์ํคํ
์ฒ ์์
ESLint์ ๋ฌ๋ฆฌ JSHint๋ ํ์ฌ ํ๋ฌ๊ทธ์ธ์ ์ง์ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์ ์ ์ ๊ท์น ์ ์, ํ๋ ์์ํฌ๋ณ ์ ํจ์ฑ ๊ฒ์ฌ(์: React, Vue) ๋๋ ๋์ ๋ฆฐํ ๊ท์น์ด ํ์ํ ํ๋ก์ ํธ์๋ ์ ์ฐ์ฑ์ด ๋จ์ด์ง๋๋ค. - ๋ณด์์ด๋ ์๋ฏธ ๋ถ์์ด ๋ถ์กฑํจ
JSHint๋ ์ทจ์ฝ์ , ์์ ํ์ง ์์ ํจํด ๋๋ API ์ค์ฉ์ ๊ฐ์งํ ์ ์์ต๋๋ค. ๊ตฌ๋ฌธ ๋ฐ ๊ธฐ๋ณธ ๋ ผ๋ฆฌ ๋ฌธ์ ์๋ง ์ง์คํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ์ด๋ ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ์๋ ์ค์ ์ ๋์ง ์์ต๋๋ค. - ์ ํ ์ธ์์ด๋ ํ๋ฆ ์ ์ด ๋ถ์์ด ์์ต๋๋ค.
JSHint๋ ํผ์์ ์ธ ๊ตฌ๋ฌธ ์์ค์์ ์๋ํฉ๋๋ค. ์ต์ JavaScript์์ ํํ ๋ณผ ์ ์๋ ๋ณ์ ์๋ช , ํจ์ ๊ฐ ์ข ์์ฑ, ๋น๋๊ธฐ ๋ ผ๋ฆฌ ์ฒด์ธ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค. - ์ ํ๋ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ ๋ฐ IDE ํตํฉ ๋ถ๋
๊ตฌ์ฑ ์ต์ ์ ๊ธฐ๋ณธ์ ์ด๋ฉฐ, ์ต์ ํธ์ง๊ธฐ ์ง์์ ํธ์ง๊ธฐ ๋ด ์ง๋จ, ์๋ ์์ฑ ๋ฐ ๋ฆฌํฉํ ๋ง ์ง์์ ์ ๊ณตํ๋ ESLint ๋ฐ TypeScript ๋๊ตฌ์ ํฌ๊ฒ ๊ฐ๋ ค์ ธ ์์ต๋๋ค. - ์ง์ญ ์ฌํ ํ๋ ๊ฐ์
ESLint๊ฐ ์ฌ์ค์์ ํ์ค์ด ๋๋ฉด์ JSHint์ ์ ๋ฐ์ดํธ์ ์ปค๋ฎค๋ํฐ ๊ธฐ์ฌ๋ ๋ํ๋์์ต๋๋ค. ์ด๋ก ์ธํด ์ง์์ ์ฐจ์ง์ด ์๊ธฐ๊ณ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๊ฐ์ ์ฌํญ๋ ์ค์ด๋ค ์ ์์ต๋๋ค.
JSHint๋ ํนํ ๋ ๊ฑฐ์ ํ๋ก์ ํธ๋ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ํ๋ก์ ํธ์์ ๊ธฐ๋ณธ์ ์ธ JavaScript ์ค๋ฅ ๊ฐ์ง๋ฅผ ์ํ ๋น ๋ฅด๊ณ ์์ ์ ์ธ ๋๊ตฌ์ ๋๋ค. ํ์ง๋ง ์ต์ ํ๋ ์์ํฌ, ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค ๋๋ ๊ฐ๋ฐ์ ์์ฐ์ฑ ์ํฌํ๋ก์๋ ์ ํฉํ์ง ์์ต๋๋ค. ์ค๋๋ ๋๋ถ๋ถ์ ํ์ ESLint๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ TypeScript๋ฅผ ๋ณด์ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ์ฌ ํฌ๊ด์ ์ด๊ณ ๋ฏธ๋์ ๋๋นํ ์ ์๋ ์ ์ ๋ถ์์ ๊ตฌํํ๋ ๊ฒ์ด ์ฅ๊ธฐ์ ์ธ ์ธก๋ฉด์์ ๋ ํฐ ๊ฐ์น๋ฅผ ์ ๊ณตํ ๊ฒ์ ๋๋ค.
Prettier(ESLint ํตํฉ ํฌํจ): ๊ท๋ชจ์ ๋ฐ๋ฅธ ์ผ๊ด์ฑ์ ์ํ ์๋ํ๋ ์ฝ๋ ํฌ๋งทํ
Prettier๋ ๋๋ฆฌ ์ฑํ๋ ๋ ๋ณด์ ์ธ ์ฝ๋ ํฌ๋งทํฐ๋ก, ์ ์๋ ๊ท์น ์งํฉ์ ๋ฐ๋ผ ์์ค ํ์ผ์ ์๋์ผ๋ก ์ฌํฌ๋งทํ์ฌ JavaScript(๋ฐ ๊ธฐํ ์ฌ๋ฌ ์ธ์ด) ์ ๋ฐ์์ ์ผ๊ด๋ ์ฝ๋ ์คํ์ผ์ ๋ณด์ฅํฉ๋๋ค. ์คํ์ผ์ด๋ ๋ ผ๋ฆฌ์ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๋ ๋ฆฐํฐ(linter)์ ๋ฌ๋ฆฌ, Prettier๋ ์ฝ๋ ์ฌํฌ๋งท์ ์๋์ผ๋ก ์ํํ์ฌ ํฌ๋งทํ ์ ๋ํ ๋ ผ์์ ์์ ๊ณ ํ ์ ์ฒด์์ ๊น๋ํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ๊ตฌํํฉ๋๋ค.
ESLint์ ํจ๊ป ์ฌ์ฉํ๋ฉด Prettier๋ ๊ฐ์ํ๋ ๊ฐ๋ฐ์ ๊ฒฝํ์ ๊ตฌ์ถํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ESLint๋ ์ฝ๋ ํ์ง๊ณผ ๋ก์ง ๊ท์น์ ๊ฐํํ๊ณ , Prettier๋ ์ผ๊ด๋ ์คํ์ผ๊ณผ ๋ ์ด์์์ ๋ณด์ฅํฉ๋๋ค. ๋ง์ ํ๋ก์ ํธ์์ ๋ ๋๊ตฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉฐ, ์ข
์ข
eslint-config-prettier eslint-plugin-prettier ๋๊ตฌ๊ฐ ์ถฉ๋ํ์ง ์๋๋ก ํจํค์ง๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- JavaScript, TypeScript, JSX, JSON, HTML, CSS ๋ฑ์ ๋ํ ์๋ ์์ ์ง์
- ์ผ๊ด๋ ๋ค์ฌ์ฐ๊ธฐ, ๊ฐ๊ฒฉ, ์ค ๋๋น ๋ฐ ์ธ์ฉ ์คํ์ผ์ ์ ์ฉํฉ๋๋ค.
- ํ์ผ๊ณผ ๊ธฐ์ฌ์ ๊ฐ์ ์คํ์ผ ๋ถ์ผ์น๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ๋๋ถ๋ถ์ ํธ์ง๊ธฐ(VSCode, WebStorm, Sublime ๋ฑ)์ ํตํฉ๋ฉ๋๋ค.
- CLI, ์ฌ์ ์ปค๋ฐ ํํฌ(์: Husky ์ฌ์ฉ) ๋๋ CI ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ฝ๊ฒ ์คํํ ์ ์์ต๋๋ค.
- ์ ์ ํ๊ฒ ๊ตฌ์ฑํ๋ฉด ESLint์ ์ ์ด์ธ๋ฆฝ๋๋ค.
Prettier์ ๋จ์ (ESLint ํตํฉ์ด ์๋ ๊ฒฝ์ฐ์๋):
- ์ ์ ์ฝ๋ ๋ถ์๊ธฐ๊ฐ ์๋๋๋ค
Prettier๋ ์ฝ๋ ๋ก์ง์ ๋ถ์ํ๊ฑฐ๋ ๋ฒ๊ทธ๋ฅผ ๊ฐ์งํ๊ฑฐ๋ ํ์ง ๊ธฐ์ค์ ์ ์ฉํ์ง ์์ต๋๋ค. ์ฝ๋์ ์ ํ์ฑ ์ฌ๋ถ๋ ์ค์ํ์ง ์๊ณ , ์ผ๊ด์ฑ์ ์ ์งํ๋ ๋ฐ๋ง ์ง์คํฉ๋๋ค. ๋ฒ๊ทธ๊ฐ ์๊ฑฐ๋ ์์ ํ์ง ์์ ์ฝ๋๋ ์๋ฌด๋ฐ ๊ฒฝ๊ณ ์์ด ์๋์ผ๋ก ํฌ๋งทํฉ๋๋ค. - ์ค๊ณ์ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ด ์ ํ๋จ
Prettier๋ ์๋์ ์ผ๋ก ์๊ฒฌ์ ์ ์ํฉ๋๋ค. ์ด๋ก ์ธํด ํ ํ ๋ก ์ ์ค์ด๋ค์ง๋ง, ์ฌ์ฉ์ ์ ์ ๊ธฐ๋ฅ๋ ์ ํ๋ฉ๋๋ค. ๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ์คํ์ผ ๊ฐ์ด๋๋ผ์ธ์ ๊ฐ์ง ํ๋ก์ ํธ์์๋ Prettier๊ฐ ๋๋ฌด ์๊ฒฉํ๊ฒ ๋๊ปด์ง ์ ์์ต๋๋ค. - ๊ฑด์ถ์ ๋๋ ์๋ฏธ์ ์ผ๊ด์ฑ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
Prettier๋ ์ฝ๋์ ๋น์ฆ๋์ค ๋ก์ง, ๋ฐ์ดํฐ ํ๋ฆ ๋๋ ๋ชจ๋ ๊ตฌ์กฐ๋ฅผ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ์ค๋ณต๋ ๋ก์ง, ๊น์ด ์ค์ฒฉ๋ ํจ์, ๋๋ ์๋ชป๋ ๊ด์ฌ์ฌ ๋ฑ ์ ์ง ๊ด๋ฆฌ์๋ ์ํฅ์ ๋ฏธ์น์ง๋ง ํ์๊ณผ๋ ๊ด๋ จ์ด ์๋ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค. - ์ฑ๋ฅ, ๋ณด์ ๋๋ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ํต์ฐฐ๋ ฅ์ด ์์ต๋๋ค.
Prettier๋ ๋๋ฆฐ ๋ฃจํ, ์์ ํ์ง ์์ ๋น๋๊ธฐ ํธ์ถ, ์ฌ์ฉ๋์ง ์๋ ๋ณ์ ๋๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ API์ ๋ํด ๊ฒฝ๊ณ ํ์ง ์์ต๋๋ค. ์ด๋ฌํ ์ฑ ์์ ์ ์ ์ผ๋ก ๋ฆฐํฐ์ ์ ์ ๋ถ์ ๋๊ตฌ์ ์์ต๋๋ค. - ๋ฆฐํฐ ์์ด ์ฌ์ฉํ๋ฉด ์ค๋ณต๋ฉ๋๋ค.
Prettier ์์ฒด๋ง์ผ๋ก๋ ์ธ๊ด์ ๊ฐ์ ๋์ง๋ง ์ ํ์ฑ์ ์ํ ๊ฐ๋๋ ์ผ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ESLint๋ ๋ค๋ฅธ ๋ฆฐํฐ๊ฐ ์๋ค๋ฉด, ๊ฐ๋ฐ์๋ ์๋ฒฝํ๊ฒ ํฌ๋งท๋ ์ฝ๋๋ผ๋ ์ฌ์ ํ ๋ฌธ์ ๊ฐ ๋๋ ํจํด์ด๋ ์ค๋ฅ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
Prettier๋ JavaScript ํ๋ก์ ํธ ์ ๋ฐ์์ ์ผ๊ด๋ ์ฝ๋ ํ์์ ์ ์งํ๊ณ , ์คํ์ผ ๋ง์ฐฐ์ ์ค์ด๋ฉฐ, ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๋ ๋ฐ ํ์์ ์ธ ๋๊ตฌ์ ๋๋ค. ํ์ง๋ง ์ ์ ์ฝ๋ ๋ถ์์ ๋์ฒดํ ์๋ ์์ต๋๋ค. ESLint์ ํตํฉํ๋ฉด Prettier์ ์ฑ๋ฅ์ด ๊ทน๋ํ๋ฉ๋๋ค. Prettier๋ ์ฝ๋์ ์๊ฐ์ ์ธก๋ฉด์ ์ฒ๋ฆฌํ๋ ๋ฐ๋ฉด, ESLint๋ ๊ตฌ์กฐ์ ๋ฐ ๋ ผ๋ฆฌ์ ๋ฌด๊ฒฐ์ฑ์ ๊ฐํํฉ๋๋ค.
Flow: ๋ ์์ ํ JS๋ฅผ ์ํ ์ ์ ์ ํ ๊ฒ์ฌ
Meta(Facebook)์์ ๊ฐ๋ฐํ Flow๋ JavaScript์ฉ ์ ์ ํ์ ๊ฒ์ฌ๊ธฐ๋ก, ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ๋ ๋ถ์ํ์ฌ ๊ฐ๋ฐ์๊ฐ ๊ฐ๋ฐ ์ฃผ๊ธฐ ์ด๊ธฐ์ ํ์ ๊ด๋ จ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. TypeScript์ ์๋๋ ์ ์ฌํ์ง๋ง ์ค๊ณ ๋ฐฉ์์ด ๋ค๋ฅธ Flow๋ ๊ฐ๋ฐ์๊ฐ JavaScript ํ์ผ์ ํ์ ์ด๋ ธํ ์ด์ ์ ์ ์ง์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋๋ก ํ์ฌ vanilla JS์์ ํธํ์ฑ์ ์ ์งํ๋ฉด์๋ ์กฐ๊ธฐ์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
Flow๋ ํจ์ ์ธ์, ๋ณ์ ํ ๋น, ๋ฐํ ์ ํ ๋ฐ ๊ฐ์ฒด ์์ฑ ์ฌ์ฉ์ ๋ถ์ผ์น๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ํ์ฑํฉ๋๋ค. Babel, ์ฌ๋ฌ ์ธ๊ธฐ ํธ์ง๊ธฐ ๋ฐ ๋น๋ ๋๊ตฌ์ ํตํฉ๋์ด ์ ํ ์์ ์ฑ ๋ฌธ์ ์ ๋ํ ๋น ๋ฅธ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค. Flow๋ ๋น ๋ฅด๊ฒ ๋ฐ์ ํ๊ณ ๊ฐ๋ ฅํ ์ ํ์ฑ ๋ณด์ฅ์ ์๊ตฌํ๋ ๋๊ท๋ชจ ๋์ JavaScript ํ๋ก์ ํธ์ ํนํ ํจ๊ณผ์ ์ ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ ํ์ ๋๋ ๋ช ์์ ์ฃผ์์ ์ฌ์ฉํ ์ ์ ์ ํ ์ถ๋ก
- ์ ํ ๋ถ์ผ์น, ์ ์๋์ง ์์ ๋ณ์ ๋ฐ ๋ ผ๋ฆฌ ์ค๋ฅ๋ฅผ ๊ฐ์งํฉ๋๋ค.
- ์ ์ง์ ํ์ดํ์ ์ง์ํฉ๋๋ค. ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์์ ํ ๋ณํํ ํ์๊ฐ ์์ต๋๋ค.
- ๊ท๋ชจ์ ๋ฐ๋ฅธ ์ฑ๋ฅ์ ์ํ ๋น ๋ฅธ ์ฆ๋ถ ๊ฒ์ฌ
- VSCode ๋ฐ Atom๊ณผ ๊ฐ์ IDE์ ํตํฉํ์ฌ ์ค์๊ฐ ์ง๋จ์ด ๊ฐ๋ฅํฉ๋๋ค.
- React ๋ฐ ์ผ๋ฐ์ ์ธ ํ๋ฐํธ์๋ ํด๊ณผ ์ ์๋ํฉ๋๋ค.
Flow์ ๋จ์ :
- ์ ํ ์์ ์๋ง ์ด์ ์ ๋ง์ถ๋ค
Flow๋ ์ ํ ์ ํ์ฑ๋ง ๋ถ์ํฉ๋๋ค. ์คํ์ผ ๊ท์น์ ์ ์ฉํ๊ฑฐ๋, ์ฝ๋ ์ ์ทจ๋ฅผ ๊ฐ์งํ๊ฑฐ๋, ๋ณด์ ์ทจ์ฝ์ ์ ์๋ณํ์ง ์์ต๋๋ค. ๋ ผ๋ฆฌ ๊ฒ์ฆ, ๋ฆฐํ , ์ฝ๋ ํ์ง ๊ฐํ๋ฅผ ์ํด์๋ ๋ค๋ฅธ ๋๊ตฌ๋ค์ด ์ฌ์ ํ ํ์ํฉ๋๋ค. - ์ง์ญ ์ฌํ์ ์ฐ์
์ง์ ์ถ์
ํ๋ TypeScript์ ๋ํ ์ธ๊ธฐ ์๋ ๋์์ด์๋ Flow๋ ๊ฐ์ํ๋ ์ฑํMeta ์์ฒด ํ๋ก์ ํธ๋ฅผ ํฌํจํ ๋ง์ ์คํ์์ค ํ๋ก์ ํธ๊ฐ TypeScript๋ก ์ด์ ๋์์ต๋๋ค. ์ด๋ ์ํ๊ณ ๊ฑด๊ฐ, ํ๋ฌ๊ทธ์ธ ์ ์ง ๊ด๋ฆฌ ๋ฐ ์ปค๋ฎค๋ํฐ ๋ฆฌ์์ค์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. - ์ต์ JS ํด๋ง๊ณผ์ ํธํ์ฑ ๋ง์ฐฐ
Flow๋ Babel ์ค์ ๊ณผ ์ฌ์ฉ์ ์ง์ ํ๋ฆฌ์ ์ ํตํด ์ ํ์ ์ ๊ฑฐํด์ผ ํ๋ฏ๋ก ๋น๋ ํ์ดํ๋ผ์ธ์ด ๋ณต์กํด์ง ์ ์์ต๋๋ค. TypeScript์ ํตํฉ ์ปดํ์ผ๋ฌ ๋ฐ ์ํ๊ณ์ ๋น๊ตํ์ ๋ Flow๋ ๊ตฌ์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ์ด๋ ค์ด ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋๋ค. - TypeScript์ ๋นํด IDE ๋ฐ ํ๋ฌ๊ทธ์ธ ์ง์์ด ์ ํ์ ์
๋๋ค.
Flow๋ ํธ์ง๊ธฐ ํตํฉ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง TypeScript ๊ฐ๋ฐ์ ๋๊ตฌ๋ณด๋ค ์์ฑ๋๊ฐ ๋ฎ๊ณ ์ง์ ๋ฒ์๋ ๋์ง ์์ต๋๋ค. ์ด๋ก ์ธํด ์ฌ๋ฌ ํ๊ฒฝ์์ ์ง๋จ ์๋๊ฐ ๋๋ฆฌ๊ฑฐ๋ ์ ํ๋๊ฐ ๋จ์ด์ง๋๋ค. - ํฌ๋ก์ค ํ๋ซํผ ํ๋ก์ ํธ์ ์ ์ฐ์ฑ์ด ๋ฎ์
Flow์ ์ํ๊ณ๋ ์ฃผ๋ก JavaScript์ React๋ฅผ ์ค์ฌ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. TypeScript์ ๊ด๋ฒ์ํ ํ๋ซํผ ์ง์(์: Node, Angular, ๋ฐฑ์๋ ์๋น์ค ๋ฑ)์ด ๋ถ์กฑํ์ฌ ํ์คํ ์ฝ๋๋ฒ ์ด์ค์์ ํ์คํํ๊ธฐ๊ฐ ๋ ์ด๋ ต์ต๋๋ค. - ์ํฐํ๋ผ์ด์ฆ๊ธ ๊ฑฐ๋ฒ๋์ค ๊ธฐ๋ฅ ์์
Flow๋ SonarQube๋ CodeQL๊ณผ ๊ฐ์ ๋๊ตฌ์ฒ๋ผ ๋์๋ณด๋, ์ ์ฑ ์ ์ฉ ๋๋ CI ์ค์ฌ ๋ถ์์ ์ ๊ณตํ์ง ์์ต๋๋ค. Flow๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๋ฐ ์์ ์ ์ฌ์ฉ๋๋ ๋๊ตฌ์ด๋ฉฐ, ๊ฑฐ๋ฒ๋์ค ์๋ฃจ์ ์ด ์๋๋๋ค.
Flow๋ JavaScript๋ฅผ ์์ ํ ๋ฒ์ด๋์ง ์๊ณ ๋ ์กฐ๊ธฐ์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๊ณ ์ ํ๋ ๊ฐ๋ฐ์์๊ฒ ๊ฒฌ๊ณ ํ ์ ์ ํ์ ๊ฒ์ฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง Flow์ ์ฑ์ฅ์ธ๊ฐ ๋ํ๋๊ณ , ๋๊ตฌ ์ง์์ด ๋ถ์กฑํ๋ฉฐ, ํ์ง, ์ํคํ ์ฒ ๋๋ ๋ณด์์ ๋ํ ํต์ฐฐ๋ ฅ์ด ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ Flow๋ ์๊ท๋ชจ ํ์ด๋ ์ด๋ฏธ Flow๋ฅผ ๋์ ํ ๋ ๊ฑฐ์ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ๋๋ถ๋ถ์ ์ ๊ท ํ๋ก์ ํธ์์๋ TypeScript๊ฐ ๋ฏธ๋ ์งํฅ์ ์ธ ์ ํ์ด๋ฉฐ, ํนํ ๋ณด์์ ์ธ ์ ์ ๋ถ์ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
Tern: ๊ฐ๋ฒผ์ด JS ์ฝ๋ ์ธํ ๋ฆฌ์ ์ค
Tern์ ํธ์ง๊ธฐ ์๋ ์์ฑ ๋ฐ ํ์์ ์ํ ์ง๋ฅํ ์ฝ๋ ๋ถ์์ ์ ๊ณตํ๋ JavaScript ์ฝ๋ ๋ถ์๊ธฐ ๋ฐ ์ถ๋ก ์์ง์ ๋๋ค. ์๋๋ Vim, Emacs, Sublime Text ๋ฐ ์ด๊ธฐ Visual Studio Code ์ค์ ๊ณผ ๊ฐ์ ํธ์ง๊ธฐ์์ ๋์ฑ ์ค๋งํธํ ์ฝ๋ ํํ , ํ์ ์ถ๋ก ๋ฐ ๋ฌธ์ ์กฐํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์ ๊ฒฝํ์ ํฅ์์ํค๊ธฐ ์ํด ๊ฐ๋ฐ๋์์ต๋๋ค.
Tern์ JavaScript ์ฝ๋๋ฅผ ํ์ฑํ์ฌ ๋ณ์ ์ ํ, ๊ฐ์ฒด ๊ตฌ์กฐ, ํจ์ ์๊ทธ๋์ฒ ๋ฐ ๋ฒ์๋ฅผ ํ์ ํฉ๋๋ค. ๋ช ์์ ์ธ ํ์ ์ด๋ ธํ ์ด์ ์์ด๋ ๋์ ๋ถ์ ๋ฐ ํ์ ์ถ๋ก ์ ํตํด ์ ํํ ์ ์๊ณผ ์ธ์ฌ์ดํธ๋ฅผ ์์ฑํฉ๋๋ค. ๋ฆฐํ ์ด๋ ์ทจ์ฝ์ ํ์ง ์ธก๋ฉด์์ ์์ ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ ์ ์ ๋ถ์ ๋๊ตฌ๋ ์๋์ง๋ง, ์ฝ๋ ํ์ ๋ฐ ํธ์ง ๊ธฐ๋ฅ์ ํฅ์์ํค๋ ์ฝ๋ ์ธํ ๋ฆฌ์ ์ค ์์ง ์ญํ ์ ํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํธ์ง๊ธฐ์์ ์ค์๊ฐ ์๋ ์์ฑ ๋ฐ ์ง๋ฅํ ์ฝ๋ ์ ์
- ํจ์, ๊ฐ์ฒด ๋ฐ ๋ณ์์ ๋ํ ๋์ ์ ํ ์ถ๋ก
- ์ปจํ ์คํธ ์ธ์ ํ์ ๋ฐ ์ ์๋ก์ ์ ํ ์ง์
- ์ต์ํ์ ๊ตฌ์ฑ์ผ๋ก ๊ฐ๋ณ๊ณ ๋น ๋ฆ ๋๋ค.
- ์ธ๊ธฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: jQuery, AngularJS, Node.js)์ ๋ํ ํ๋ฌ๊ทธ์ธ ์ง์
- ์คํ๋ผ์ธ์ผ๋ก ์๋ํ๋ฉฐ ๋ค์ํ ํธ์ง๊ธฐ์ ํตํฉ๋ฉ๋๋ค.
Tern์ ๋จ์ :
- ์ ํต์ ์ธ ์๋ฏธ์ ์ ์ ๋ถ์๊ธฐ๊ฐ ์๋๋๋ค
Tern์ ๋ฒ๊ทธ, ์ฝ๋ ๋์, ๋ ผ๋ฆฌ ์ค๋ฅ ๋๋ ๋ณด์ ์ทจ์ฝ์ ์ ๊ฐ์งํ์ง ์์ต๋๋ค. ์ฝ๋ ํ์ ๋ฐ ์ถ๋ก ๋ง ๊ฐ๋ฅ์ฝ๋์ ์ ํ์ฑ์ด๋ ํ์ง์ ๊ฐ์ ํ์ง ์์ต๋๋ค. - ์ต์ JavaScript ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ต๋๋ค.
Tern์ ES5/ES6 ์ด๊ธฐ ์๋์ ๊ฐ๋ฐ๋์์ผ๋ฉฐ, async/await, ๊ตฌ์กฐ ๋ถํด, ์ต์ ๋ ์ฒด์ด๋, ES ๋ชจ๋, TypeScript์ ๊ฐ์ ์ต์ JavaScript ๊ตฌ๋ฌธ์ ๋ํ ๊ฐ๋ ฅํ ์ง์์ด ๋ถ์กฑํฉ๋๋ค. ๋ํ, ์ต์ ์ฝ๋์์๋ ํ์๊ฐ ์์ฃผ ์๋ํ์ง ์๊ฑฐ๋ ์ ๋ขฐํ ์ ์๊ฒ ๋ฉ๋๋ค. - ์ ํ์ ์ด๊ณ ์ค๋๋ ์ํ๊ณ
Tern ๊ฐ๋ฐ ์๋๊ฐ ์๋นํ ๋๋ ค์ก๊ณ , ๋ง์ ํ๋ฌ๊ทธ์ธ์ด ๋ ์ด์ ์ ์ง ๊ด๋ฆฌ๋์ง ์์ต๋๋ค. VSCode๋ WebStorm๊ณผ ๊ฐ์ IDE๊ฐ ๋ฐ์ ํจ์ ๋ฐ๋ผ ๋๋ถ๋ถ์ ์ํฌํ๋ก์์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ด Tern์ ํ์์ฑ์ ๋์ฒดํ์ต๋๋ค. - ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์๋ ํ์ฅ ๋ถ๊ฐ๋ฅ
Tern์ ๋๊ท๋ชจ ๋ชจ๋ ธ๋ฆฌํฌ ๋๋ ๊ณ ๋๋ก ๋ชจ๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๋ฅ๊ณผ ์ ํ๋๊ฐ ์ ํ๋ฉ๋๋ค. ์ํฐํ๋ผ์ด์ฆ๊ธ ํ๋ก์ ํธ์ ํ์ํ ์ธ๋ฑ์ฑ, ์บ์ฑ ๋ฐ ์ํคํ ์ฒ ๋ชจ๋ธ๋ง ๊ธฐ๋ฅ์ด ๋ถ์กฑํฉ๋๋ค. - CI/CD ๋๋ DevOps ์ํฌํ๋ก์ ํตํฉ๋์ง ์์
Tern์ ์ง์์ ํตํฉ, ๋ณด๊ณ ๋๋ ์ ์ฑ ์ ์ฉ์ ์ง์ํ์ง ์๋ ๋ก์ปฌ ๊ฐ๋ฐ์ ๋๊ตฌ์ ๋๋ค. ํ์ดํ๋ผ์ธ ๊ธฐ๋ฐ ํ์ง ๊ฒ์ดํธ๋ ํ ์ ์ฒด ์ฝ๋ ๊ฑฐ๋ฒ๋์ค์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. - LSP(Language Server Protocol) ๊ธฐ๋ฐ ๋๊ตฌ๋ก ๋์ฒด๋จ
TypeScript์ ์ธ์ด ์๋ฒ, VSCode์ ๋ด์ฅ๋ IntelliSense, LSP ๊ธฐ๋ฐ ๋๊ตฌ ๋ฑ์ ๋๊ตฌ๋ก ์ธํด Tern์ ํ๋ JavaScript ๊ฐ๋ฐ์ ์์ด ๊ฑฐ์ ์ธ๋ชจ์๊ฒ ๋์์ต๋๋ค.
Tern์ ๋น์๋ก์๋ ํ์ ์ ์ธ ๋๊ตฌ์์ผ๋ฉฐ, ์ด๊ธฐ JavaScript ํธ์ง๊ธฐ์ ์ง๋ฅ์ ์ธ ์ฝ๋ ์์ฑ ๋ฐ ํ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค๋๋ ๊ตฌ๋ฌธ ์ง์, ์ ํ๋ ๊ธฐ๋ฅ, ๊ทธ๋ฆฌ๊ณ ์ต์ ํตํฉ ๊ธฐ๋ฅ์ ๋ถ์ฌ๋ก ์ธํด TypeScript, ESLint, ๊ทธ๋ฆฌ๊ณ ํธ์ง๊ธฐ ๋ค์ดํฐ๋ธ ์ธ์ด ์๋ฒ์ ๊ฐ์ ์๋กญ๊ณ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋ฐ๋ ค๋ฌ์ต๋๋ค. ์ค๋๋ Tern์ ํ์ฌ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์์ ํ์ฉ๋๊ฐ ๋ฎ์ ๋ ๊ฑฐ์ ๋๊ตฌ๋ก ๊ฐ์ฃผํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
Snyk Code: ๋ณด์์ ์ด์ ์ ๋ง์ถ ๊ฐ๋ฐ์ ์ค์ฌ ์ ์ ๋ถ์
Snyk Code๋ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ ์คํธ(SAST), ์คํ์์ค ์ทจ์ฝ์ ์ค์บ๋, ์ปจํ ์ด๋ ๋ณด์ ๋ฑ ๊ฐ๋ฐ์ ์นํ์ ์ธ ๋ณด์ ์๋ฃจ์ ์ ์ค์ ์ ๋ Snyk ํ๋ซํผ์ ์ผ๋ถ์ ๋๋ค. Snyk Code๋ฅผ ์ฌ์ฉํ๋ฉด JavaScript, TypeScript, Node.js ๋ฐ ๊ธฐํ ์ต์ ์ธ์ด์ ๋ํ ์ค์๊ฐ ์ ์ ์ฝ๋ ๋ถ์์ ์ํํ์ฌ ๊ฐ๋ฐ ์ํฌํ๋ก์์ ์ง์ ์ทจ์ฝ์ ๊ณผ ์์ ํ์ง ์์ ์ฝ๋ฉ ํจํด์ ํ์งํ ์ ์์ต๋๋ค.
Snyk Code๋ ์๋ฏธ๋ก ์ ๋ฐ ํจํด ๊ธฐ๋ฐ ๋ถ์์ ํตํด ์ด์๋๋ฉฐ, ์ ๋ณ๋๊ณ ํ์ฅ๋๋ ์ผ๋ จ์ ๊ท์น์ ์ฌ์ฉํ์ฌ ์์ ํ์ง ์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ฃผ์ ์ํ, ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS), ์์๋ ์ธ์ฆ ํ๋ฆ ๋ฑ์ ๋ฌธ์ ๋ฅผ ์๋ณํฉ๋๋ค. ๋น ๋ฅธ IDE ๊ธฐ๋ฐ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ ๋์์ CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉ๋์ด ์๋ํ๋ ์ ์ฉ์ ์ง์ํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฝ๋ฉ ์ค JavaScript ๋ฐ Node.js ์ทจ์ฝ์ ์ค์๊ฐ ๊ฐ์ง
- ์คํ ๊ฐ๋ฅํ ๋ณด์ ๊ถ์ฅ ์ฌํญ์ ํฌํจํ ์๋ฏธ ์ฝ๋ ๋ถ์
- ํธ์ง๊ธฐ ๋ด ๋ฌธ์ ์ถ์ ์ ์ํ IDE ํตํฉ(VSCode, IntelliJ, WebStorm)
- GitHub, GitLab, Bitbucket, Azure, Jenkins ๋ฑ๊ณผ์ CI/CD ํตํฉ
- ์๋ ค์ง ๋ณด์ ์ํ์ ๋ํด ๋ ์ ์ฝ๋์ ํ์ฌ ์ฝ๋๋ฅผ ๊ฒ์ฌํฉ๋๋ค.
- OWASP Top 10 ๋ฐ ๊ณตํต ๊ท์ ์ค์ ํ๋ ์์ํฌ์ ์ผ์นํฉ๋๋ค.
Snyk ์ฝ๋์ ๋จ์ :
- ๋ณด์์๋ง ์ง์ค
Snyk Code๋ ๋ฒ์ฉ ์ ์ ๋ถ์๊ธฐ๊ฐ ์๋๋๋ค. ์ฝ๋ ์ ์ทจ, ์คํ์ผ ์๋ฐ, ์ ์ง ๊ด๋ฆฌ ๋ฌธ์ ๋๋ ์ํคํ ์ฒ ๋ฌธ์ ๋ฅผ ํ์ํ์ง ์์ต๋๋ค. ESLint๋ SonarQube์ ๊ฐ์ ๋๊ตฌ๋ฅผ ๋ณด์ํ์ง๋ง ๋์ฒดํ์ง๋ ์์ต๋๋ค. - ๋ฐ์ดํฐ ๋ฐ ์ ์ด ํ๋ฆ์ ๋ํ ๊ฐ์์ฑ์ด ์ ํ๋จ
Snyk Code๋ ์๋ฏธ ์ค์บ๋์ ์ํํ์ง๋ง, ๋ณต์กํ ๋น๋๊ธฐ ๋ ผ๋ฆฌ, ๊น์ด ์ค์ฒฉ๋ ์ฝ๋ฐฑ ๋๋ ๋๊ท๋ชจ JS ํ๋ก์ ํธ์์์ ๋ค์ค ํ์ผ ๋ฐ์ดํฐ ์ ํ๋ฅผ ์ถ์ ํ ๋ ๊น์ด๊ฐ ์ ํ๋ฉ๋๋ค. - ์ฝ๋ ํฌ๋งทํ
์ด๋ ์ฝ๋ ํ์ง ๊ท์น ์ง์ ์์
ESLint๋ Prettier์ ๋ฌ๋ฆฌ Snyk Code๋ ์คํ์ผ ๊ท์น์ด๋ ์์ ๊ท์น์ ์ ์ฉํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ํ์ ์ผ๊ด๋ ์ฝ๋ ํ์ง๊ณผ ์คํ์ผ์ ์ ์งํ๊ธฐ ์ํด ์ฌ์ ํ ๋ณ๋์ ๋๊ตฌ๊ฐ ํ์ํฉ๋๋ค. - ํ์ํ ๊ท์น ์์ง ๋ฐ ์ ํ๋ ์ฌ์ฉ์ ์ ์
Semgrep์ด๋ CodeQL๊ณผ ๊ฐ์ ๋๊ตฌ์ ๋ฌ๋ฆฌ Snyk Code๋ ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉ์ ์ง์ ๊ท์น์ด๋ ๋ ผ๋ฆฌ ํจํด์ ์ ์ํ ์ ์์ต๋๋ค. Snyk์ ๊ธฐ๋ณธ ์ ๊ณต ๊ท์น ์ธํธ์ ์ ๋ฐ์ดํธ ์ฃผ๊ธฐ์ ๋ฐ๋ผ ์ ํ๋ฉ๋๋ค. - ์์
๋ผ์ด์ผ์ค
๋ฌด๋ฃ ํฐ์ด๊ฐ ์์ง๋ง, ์ ์ฒด ํ๋ก์ ํธ ์ค์บ๋, ์ด๋ ฅ ๋ณด๊ณ , ์ ์ฑ ์ ์ฉ๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๋ฃ ํ๋์์๋ง ์ ๊ณต๋ฉ๋๋ค. ์ด๋ ์๊ท๋ชจ ํ์ด๋ ์คํ์์ค ํ๋ก์ ํธ์๋ ์ฅ๋ฒฝ์ด ๋ ์ ์์ต๋๋ค. - ์ ์ฒด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์ธํฐ๋ท ์ ์์ด ํ์ํฉ๋๋ค.
Snyk Code๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ด๋ฏ๋ก ์๊ฒฉํ ์์ด๊ฐญ ํ๊ฒฝ์ด๋ ์จํ๋ ๋ฏธ์ค ๋ณด์ ์๊ตฌ ์ฌํญ์ด ์๋ ์กฐ์ง์ ๊ฒฝ์ฐ ํตํฉ์ ์ด๋ ค์์ ๊ฒช์ ์ ์์ต๋๋ค.
Snyk Code๋ ๋น ๋ฅธ ํผ๋๋ฐฑ, ๋ช ํํ ๊ถ์ฅ ์ฌํญ, ๊ทธ๋ฆฌ๊ณ ์ํํ ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ ์ด๊ธฐ์ JavaScript ๋ฐ Node.js ์ฝ๋์ ๋ณด์ ์ทจ์ฝ์ ์ ํฌ์ฐฉํ๋ ๋ฐ ํ์ํ ๋๊ตฌ์ ๋๋ค. ํ์ง๋ง ์์ ํ ์ ์ ๋ถ์ ํ๋ซํผ์ ์๋๋ฏ๋ก ์ฝ๋ ํ์ง, ์ํคํ ์ฒ ๋ถ์, ๊ทธ๋ฆฌ๊ณ ํ๋ํ๋ฅผ ๋ค๋ฃจ๋ ๋๊ตฌ๋ค๊ณผ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ต์ JavaScript ์ํ๊ณ์์ ๋ณด์์ ์ค์ ์ ๋ ํ์ ๊ฒฝ์ฐ, Snyk Code๋ ๊ณ์ธตํ๋ DevSecOps ํด์ฒด์ธ์ ์ผ๋ถ๋ก ์ ํฉํฉ๋๋ค.
Semgrep: ๊ฐ๋ณ๊ณ ๊ฐ๋ฐ์ ์นํ์ ์ธ ์ ์ ๋ถ์
Semgrep์ ๊ธฐ์กด ๋ฆฐํฐ์ ์๋์ ๊ฐํธํจ์ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST) ๋ถ์์ ์๋ฏธ๋ก ์ ๊ฐ๋ ฅํจ์ ๊ฒฐํฉํ ์คํ ์์ค ํจํด ๊ธฐ๋ฐ ์ ์ ๋ถ์ ์์ง์ ๋๋ค. ๊ฐ๋ฐ์ ์นํ์ ์ด๊ณ ๋ณด์์ ๊ณ ๋ คํ๋๋ก ์ค๊ณ๋ Semgrep์ JavaScript, TypeScript, Node.js๋ฅผ ๋น๋กฏํ ์ฌ๋ฌ ์ต์ ์ธ์ด๋ฅผ ์ง์ํฉ๋๋ค.
Semgrep์ ๋ ๋ณด์ ์ธ ํน์ง์ ์ ์ฐ์ฑ๊ณผ ์ฌ์ฉ์ ์ ์ ๊ธฐ๋ฅ์ ๋๋ค. ํ์ ์ฝ๋์์ ํน์ ํจํด์ด๋ ๋ณด์ ๋ฌธ์ ๋ฅผ ๊ฒ์ํ๋ ์์ฒด ๊ท์น์ ์์ฑํ์ฌ ๋์ ์์ค์ ์ ๋ฐ์ฑ๊ณผ ์ ์ด๋ ฅ์ ํ๋ณดํ ์ ์์ต๋๋ค. ๊ฐ๋ณ ๊ฐ๋ฐ์์ ๋ณด์ ํ ๋ชจ๋ ์ฝ๋ ํ์ค์ ์ค์ํ๊ณ , ์ทจ์ฝ์ ์ ์๋ณํ๊ณ , CI/CD ์ํฌํ๋ก ๋๋ ์ฝ๋ ๊ฒํ ๊ณผ์ ์์ ์ํํ ์ฝ๋ฉ ๊ดํ์ ๋ฐฉ์งํ๊ธฐ ์ํด Semgrep์ ๋๋ฆฌ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ฐ๋จํ YAML ๋๋ Semgrep์ ๋๋ฉ์ธ๋ณ ๊ตฌ๋ฌธ์ผ๋ก ์์ฑ๋ ์ฌ์ฉ์ ์ ์ ๊ท์น์ ์ง์ํฉ๋๋ค.
- ์ฝ๋ ํจํด, ์์ ํ์ง ์์ ๋ ผ๋ฆฌ, ํ๋์ฝ๋ฉ๋ ๋น๋ฐ ๋ฑ์ ๊ฐ์งํฉ๋๋ค.
- JavaScript์ ๋ํ ์ฌ์ ๊ตฌ์ถ๋ ๊ท์น ์ธํธ ์ ๊ณต(OWASP Top 10 ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก ํฌํจ)
- ๋ก์ปฌ์์ ๋น ๋ฅด๊ฒ ์คํ๋๋ฉฐ CI/CD ๋๊ตฌ์ ์ฝ๊ฒ ํตํฉ๋ฉ๋๋ค.
- ํธ์ง๊ธฐ ๋ด ํผ๋๋ฐฑ์ ์ํ IDE ํตํฉ(์: VSCode)
- ์คํ ์์ค ๋ฐ ์์ฉ SaaS(๋์๋ณด๋, ์ ์ฑ ๋ฐ ํต์ฐฐ๋ ฅ ํฌํจ)๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ณด์ ๋ฐ ์ฝ๋ ํ์ง ์ฌ์ฉ ์ฌ๋ก ๋ชจ๋์ ์ ํฉํฉ๋๋ค.
Semgrep์ ๋จ์ :
- ํจํด ๊ธฐ๋ฐ ์ ํ
Semgrep์ ๊ฐ์ง์ ๋งค์ฐ ๊ฐ๋ ฅํฉ๋๋ค. ์ฝ๋๊ฐ ์ด๋ป๊ฒ ๋ณด์ด๋์ง, ํ์ง๋ง ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง. ๋ชจ๋ ๊ฐ ๋๋ ๋ณต์กํ ๋น๋๊ธฐ ์์ ์์ ์ฌ์ธต์ ์ธ ์ ์ด ํ๋ฆ, ๋ฐ์ดํฐ ํ๋ฆ ๋๋ ์ค์ผ ๋ถ์์ ์ํํ์ง ์์ต๋๋ค. ์ด๋ก ์ธํด ์ปจํ ์คํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ ๋์น๊ฑฐ๋ ์คํ์ง๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. - ์ฌ์ฉ์ ์ ์๋ฅผ ์ํด์๋ ๊ท์น ์์ฑ ์ ๋ฌธ์ฑ์ด ํ์ํฉ๋๋ค.
์๋ จ๋ ์ฌ์ฉ์์๊ฒ๋ ๊ท์น ์์ฑ์ด ๊ฐ๋จํ์ง๋ง, ๋ณด์ ์์ง๋์ด๊ฐ ์๋๊ฑฐ๋ ์ด๋ณด ๊ฐ๋ฐ์๋ ๋ณ๋์ ๊ต์ก ์์ด๋ ์ฌ์ฉ์ ์ง์ ๊ท์น์ ๋ง๋๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์ ์ ์์ต๋๋ค. ๋ณต์กํ ํ๊ฒฝ์์๋ ๋ฐฉ๋ํ ๊ท์น ์ธํธ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ๋ถ๋ด์ค๋ฌ์ธ ์ ์์ต๋๋ค. - ๊ธฐ๋ณธ ์ ๊ณต ์์์ด๋ ์คํ์ผ ๊ฒ์ฌ ์์
ESLint๋ Prettier์ ๋ฌ๋ฆฌ Semgrep์ ์คํ์ผ ์ ์ฉ, ๋ค์ฌ์ฐ๊ธฐ ์์ , ๋ช ๋ช ๊ท์น ๊ฒ์ฆ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ฝ๋์ ์ธํ๋ณด๋ค๋ ๋ ผ๋ฆฌ์ ์๋ฏธ ๊ตฌ์กฐ์ ์ค์ ์ ๋ก๋๋ค. - ์ ์ฒด ์ ํ ์์คํ
์ธ์ ์์
Semgrep์ TypeScript ๋ฐ ๊ธฐํ ํ์ ์ธ์ด๋ฅผ ํ์ฑํ ์ ์์ง๋ง, TypeScript ์ปดํ์ผ๋ฌ๋ Flow์ฒ๋ผ ์์ ํ ํ์ ๋ถ์์ ์ํํ์ง๋ ์์ต๋๋ค. ์ด๋ก ์ธํด ์ผ๋ถ ํ์ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ํ์ ํ๋ ๋ฅ๋ ฅ์ด ์ ํ๋ฉ๋๋ค. - ๊ฑด์ถ ์๊ฐํ๋ ๊ธฐ์ ๋ถ์ฑ ๋ชจ๋ธ๋ง์ด ์์ต๋๋ค.
Semgrep์๋ SonarQube์ ๊ฐ์ ์ํฐํ๋ผ์ด์ฆ ๋๊ตฌ์์ ํํ ๋ณผ ์ ์๋ ์ข ์์ฑ ๋งต, ์ค๋ณต ์ถ์ ๋๋ ๊ธฐ์ ๋ถ์ฑ ๋์๋ณด๋์ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. SMART TS XL. - ์คํ ์์ค ๋ฒ์ ์์๋ ์ ํ๋ ์ญ์ฌ์ ์ถ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
์คํ์์ค CLI๋ ๊ฐ๋ ฅํ์ง๋ง ์๋ฆผ ๊ด๋ฆฌ, ์ ์ฑ ์ํ, ๊ณผ๊ฑฐ ๋ฐ์ดํฐ ์ถ์ , ์กฐ์ง ๋์๋ณด๋์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ์์ฉ Semgrep Cloud ๋ฒ์ ์ด ํ์ํฉ๋๋ค.
Semgrep์ ๋งค์ฐ ์ ์ฐํ๊ณ ๋น ๋ฅธ ์ ์ ๋ถ์ ๋๊ตฌ๋ก, ๋ณด์, ์ฝ๋ ์์, ๊ท์น ์ ์ฉ์ด ์ค์ํ ์ต์ JavaScript ํ๊ฒฝ์์ ํนํ ํจ๊ณผ์ ์ ๋๋ค. ์ ํํ ํจํด์ ์ ์ํ ์ ์๋ค๋ ์ ์ ๊ธฐ์กด ๋๊ตฌ์ ๋นํด ํฐ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๊ท์น ๊ธฐ๋ฐ ๋งค์นญ์ ์์กดํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์ ์ด ํ๋ฆ ๋ถ์, ์ ํ ๊ฒ์ฌ ๋๋ ์ฝ๋ ์คํ์ผ๋ง์ ์ํด์๋ ๋ค๋ฅธ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ชจ๋ DevSecOps ํด์ฒด์ธ์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ํนํ ์ฌ๋ฌ ํ์ ๊ฑธ์ณ ๋ณด์ ์ฝ๋ฉ ๊ดํ์ ํ์ฅํ๋ ๋ฐ ๋งค์ฐ ์ ํฉํฉ๋๋ค.
CodeQL: ์ฟผ๋ฆฌ ๋ก์ง์ ํ์ฉํ ์๋ฏธ๋ก ์ ์ฝ๋ ์ค์บ๋
GitHub(ํ์ฌ Microsoft์ ํธ์ ๋จ)์์ ๊ฐ๋ฐํ CodeQL์ ๊ฐ๋ฐ์์ ๋ณด์ ํ์ด ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ธต์ ์ธ ์ ์ ๋ถ์์ ์ํํ ์ ์๋๋ก ํ๋ ์๋ฏธ๋ก ์ ์ฝ๋ ๋ถ์ ์์ง์ ๋๋ค. CodeQL์ ๋จ์ํ ํจํด ๋งค์นญ ๋์ ์์ค ์ฝ๋๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ณํํ์ฌ ์ ๊ตํ ์ทจ์ฝ์ , ๋ ผ๋ฆฌ์ ๊ฒฐํจ, ์ํฐํจํด์ ์ฐพ์๋ด๋ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค.
JavaScript, TypeScript, Python, Java, C/C++, C#, Go ๋ฑ ์ฌ๋ฌ ์ธ์ด๋ฅผ ์ง์ํ๋ฉฐ, GitHub์ ์ฝ๋ ์ค์บ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ ํต์ฌ ๋ถ์ ์์ง์ ๋๋ค. CodeQL์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ฑฐ๋ ์ฌ์ฌ์ฉํ์ฌ ํจ์ ๊ฐ ๋ฐ์ดํฐ ํ๋ฆ์ ํ์ํ๊ณ , ์ค์ผ ์์ค์์ ์ฑํฌ๊น์ง ์ถ์ ํ๊ณ , ์ทจ์ฝํ ์ฝ๋ฉ ๊ตฌ์กฐ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- SQL๊ณผ ์ ์ฌํ ์ธ์ด๋ฅผ ์ฌ์ฉํ ์๋ฏธ๋ก ์ ์ฟผ๋ฆฌ ๊ธฐ๋ฐ ๋ถ์
- ๋ฐ์ดํฐ ํ๋ฆ, ์ ์ด ํ๋ฆ ๋ฐ ๊ธฐ๋ฅ ๋์์ ๋ํ ์ฌ์ธต์ ์ธ ํต์ฐฐ๋ ฅ
- OWASP Top 10, CWE ๋ฐ ์๋ ค์ง ๋ณด์ ์ํฐํจํด์ ๋ํ ๋ด์ฅ ์ฟผ๋ฆฌ
- GitHub Actions, GitHub Enterprise ๋ฐ CLI ์ํฌํ๋ก์์ ์ํํ ํตํฉ
- ์ฌ์ฉ์ ์ ์ ์ฟผ๋ฆฌ ๋ฐ ์ฟผ๋ฆฌ ํฉ์ ์ง์ํ์ฌ ๋์ ์์ค์ ์ฌ์ฉ์ ์ ์๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ๊ณ ๊ธ ๋ณด์ ์ฐ๊ตฌ, ์ฝ๋ ๊ฐ์ฌ ๋ฐ DevSecOps ํ์ดํ๋ผ์ธ์ ์ด์์ ์ ๋๋ค.
CodeQL์ ๋จ์ :
- ๋์ ํ์ต ๊ณก์
CodeQL์ ์ฟผ๋ฆฌ ์ธ์ด๋ ๊ฐ๋ ฅํ์ง๋ง ๋ณต์กํฉ๋๋ค. ์ฌ์ฉ์ ์ ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ ผ๋ฆฌ ํ๋ก๊ทธ๋๋ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ก , ๊ทธ๋ฆฌ๊ณ CodeQL ์คํค๋ง์ ๋ํ ์ง์์ด ํ์ํฉ๋๋ค. ๋ฐ๋ผ์ CodeQL์ ๋ํ ์ฌ์ธต์ ์ธ ๊ต์ก์ด๋ ๋ฌธ์ ๋ถ์ ์์ด๋ ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๊ธฐ ์ด๋ ต์ต๋๋ค. - ์ฝ๋ ํ์ง์ด๋ ์คํ์ผ ๋ถ์์ ๋ํ ์ ํ๋ ์ ํธ๋ฆฌํฐ
CodeQL์ ๋ค์์ ์ํด ์ค๊ณ๋์์ต๋๋ค. ๋ณด์ ๋ฐ ์ ํ์ฑ์์, ๋ช ๋ช ๊ท์น ๋๋ ์คํ์ผ ๊ท์น์ ์ ์ฉํ๋ ๋ฐ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์ฝ๋ ๋์, ์ค๋ณต ๋๋ ์์๊ณผ ๊ฐ์ ๋ฌธ์ ์๋ ESLint๋ Prettier์ ๊ฐ์ ๋๊ตฌ๊ฐ ์ฌ์ ํ ํ์ํฉ๋๋ค. - ๋ผ์ด๋ธ ๋๋ ํธ์ง๊ธฐ ๋ด ํผ๋๋ฐฑ ์์
CodeQL์ ๊ฐ๋ฐ์ ์์ฐ์ฑ ๋๊ตฌ๊ฐ ์๋๋๋ค. IDE์์ ์ค์๊ฐ ์ง๋จ, ์๋ ์์ฑ ๋๋ ์ธ๋ผ์ธ ์์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. GitHub Actions ๋๋ CLI๋ฅผ ํตํ ์คํ ๊ฒ์ฌ์๋ ํผ๋๋ฐฑ์ด ์ง์ฐ๋ฉ๋๋ค. - ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์ ๋๋ฆฐ ์ค์บ ์๊ฐ
CodeQL์ ์ฌ์ธต์ ์ธ ์๋ฏธ ๋ถ์์ ์ํํ๋ฏ๋ก ๊ณ์ฐ์ ์ผ๋ก ๋น์ธ๋คํนํ ๋ชจ๋ ธ๋ ํฌ์ ๊ฒฝ์ฐ ์ ์ฒด ํ๋ก์ ํธ ์ค์บ์ ๋ช ๋ถ ์ด์ ๊ฑธ๋ฆด ์ ์์ผ๋ฏ๋ก ํ์ฅ์์ ์์ฃผ ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ์ง ์์ต๋๋ค. - ์คํ ์์ค ๋ฒ์ ์๋ ์๊ฐํ๋ ๋์๋ณด๋๊ฐ โโ์์ต๋๋ค.
GitHub Advanced Security์๋ ๋์๋ณด๋ ๋ฐ PR ์๋ฆผ๊ณผ ํตํฉ๋ CodeQL์ด ํฌํจ๋์ด ์์ง๋ง, ๋ ๋ฆฝํ ์คํ์์ค ๋๊ตฌ๋ ์ํฐํ๋ผ์ด์ฆ ์ ํ๊ณผ ํจ๊ป ์ฌ์ฉํ์ง ์์ผ๋ฉด ํฌ๊ด์ ์ธ ์๊ฐํ, ๊ณผ๊ฑฐ ๊ธฐ๋ก ์ถ์ ๋๋ ์ค์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด ๋ถ์กฑํฉ๋๋ค. - ๋ณด์ ์ค์ฌ, ํ๋ํ ์ค์ฌ ์๋
CodeQL์ ์ทจ์ฝ์ , ์ค์ผ ํ์ฐ, ๋ณต์กํ ์ค์ฉ ํจํด์ ์๋ณํ๋ ๋ฐ ํ์ํ์ง๋ง ์ํคํ ์ฒ ๋ฆฌํฉํ ๋ง, ๊ธฐ์ ๋ถ์ฑ ํ๊ฐ ๋๋ ํ๋ํ ๊ณํ์๋ ๋์์ด ๋์ง ์์ต๋๋ค.
CodeQL์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ณด์์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ์ ์ ๋ถ์ ๋๊ตฌ ์ค ํ๋๋ก, ์ฝ๋์ ์ค์ ๋์ ๋ฐฉ์์ ๋ํ ์ ํํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋งจํฑ ๋ชจ๋ธ๊ณผ ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ์ฟผ๋ฆฌ๋ ํ๋ฉด์ ์ธ ์ ๊ฒ์ ๋์ด์ ๋ณด์ ์ฐ๊ตฌ์, ๊ฐ์ฌ ๋ด๋น์, DevSecOps ์์ง๋์ด์๊ฒ ์ด์์ ์ ๋๋ค. ํ์ง๋ง ์ผ์์ ์ธ ๊ฐ๋ฐ ์ฉ๋๋ก๋ ์ ํฉํ์ง ์์ผ๋ฉฐ, ์ ์ฒด์ ์ธ ํ์ง ๋ฐ ๋ณด์ ์ ๋ต์ ์ํด์๋ ESLint, Semgrep, SonarQube์ ๊ฐ์ด ์ ๊ทผ์ฑ์ด ๋์ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค.
PMD: ๋ ๊ฑฐ์ ์ดํ์ ํ์ฉํ ๊ท์น ๊ธฐ๋ฐ ์ ์ ์ฝ๋ ๋ถ์
PMD๋ Java, Apex, JavaScript, XML ๋ฑ ๋ค์ํ ์ธ์ด๋ฅผ ์ง์ํ๋ ์ค๋ ์ญ์ฌ๋ฅผ ๊ฐ์ง ์คํ์์ค ์ ์ ์ฝ๋ ๋ถ์๊ธฐ์ ๋๋ค. ๊ท์น ๊ธฐ๋ฐ ์์ง์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ๋์ง ์๋ ๋ณ์, ๋น catch ๋ธ๋ก, ์ค๋ณต ์ฝ๋, ์ง๋์น๊ฒ ๋ณต์กํ ๋ฉ์๋, ๊ธฐํ ์ ์ง ๊ด๋ฆฌ ๋ฌธ์ ๋ฑ ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๊ฒฐํจ์ ์๋ณํฉ๋๋ค.
PMD๋ Java ์ํ๊ณ์์ ๊ฐ์ฅ ์ ์๋ ค์ ธ ์์ง๋ง, ์ฌ์ ์ ์๋ ๋ช ๊ฐ์ง ๊ท์น์ ํตํด JavaScript๋ ์ ํ์ ์ผ๋ก ์ง์ํฉ๋๋ค. PMD๋ XML์ ํตํด ๊ตฌ์ฑ ๊ฐ๋ฅํ๊ณ , ์ฌ์ฉ์ ์ ์ ๊ท์น ์ ์๋ฅผ ์ง์ํ๋ฉฐ, Maven, Gradle, Ant์ ๊ฐ์ ๋น๋ ๋๊ตฌ์ Jenkins ๋๋ GitHub Actions์ ๊ฐ์ CI ์๋ฒ์ ํตํฉ๋ ์ ์์ต๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฝ๋ ๊ตฌ์กฐ, ๋ณต์ก์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ์ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ๊ฐ์งํฉ๋๋ค.
- ์ฌ์ฉํ์ง ์๋ ๋ณ์, ๋๋ฌด ๊ธด ํจ์ ๋๋ ๋น ๋ธ๋ก๊ณผ ๊ฐ์ ๊ธฐ๋ณธ JavaScript ๊ท์น์ ์ง์ํฉ๋๋ค.
- XPath ๋๋ Java ๊ธฐ๋ฐ ํ์ฅ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ๊ท์น์ ์์ฑํ ์ ์์ต๋๋ค.
- ๋ค์ํ IDE ๋ฐ ๋น๋ ๋๊ตฌ์ ๋ํ ๋ช ๋ น์ค ์ธํฐํ์ด์ค ๋ฐ ํ๋ฌ๊ทธ์ธ ์ง์
- ์ํฐํจํด ํฌ์ฐฉ, ์คํ์ผ ๊ฐ์ด๋ ์ ์ฉ, ๊ธฐ์ ๋ถ์ฑ ๊ฐ์์ ์ ์ฉํฉ๋๋ค.
- ํ์ฑ์ ์ธ(์ธ์ด์ ์ผ๋ก ํธํฅ๋) ์ปค๋ฎค๋ํฐ๋ฅผ ๊ฐ์ถ ์์ ํ ์คํ ์์ค
PMD์ ๋จ์ :
- ์ ํ๋ JavaScript ์ง์
PMD์ JavaScript ๊ท์น์ ์ ํ์ ์ด๊ณ ์ค๋๋์์ต๋๋ค. ์ต์ JavaScript ๊ตฌ๋ฌธ(์: ํด๋์ค, async/await, ๋ชจ๋, ํ์ดํ ํจ์ ๋ฑ ES6+ ๊ธฐ๋ฅ)์ ์ง์ํ์ง ์์ผ๋ฉฐ TypeScript๋ ์ง์ํ์ง ์์ต๋๋ค. - ์๋ฏธ ๋ถ์์ด๋ ์ฌ์ธต ํ๋ฆ ์ถ์ ์ด ์์ต๋๋ค.
PMD๋ ๊ตฌ๋ฌธ ํจํด์ผ๋ก ์๋ํฉ๋๋ค. ํจ์ ๊ฐ ๋๋ ํ์ผ ๊ฐ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ํ ์๋ฏธ๋ก ์ ์ดํด๋ฅผ ๊ตฌ์ถํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ํฉ์ ๋ง๋ ๋ฒ๊ทธ๋ ์ทจ์ฝ์ ์ ๊ฐ์งํ๋ ๋ฅ๋ ฅ์ด ์ ํ๋ฉ๋๋ค. - ๋ณด์ ์ค์ฌ ๊ธฐ๋ฅ ์์
PMD๋ ์ทจ์ฝ์ ํ์ง๋ ๊ท์ ์ค์ ์ ๊ฒ(์: OWASP, CWE) ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ฃผ์ ์ง์ , ์์ ํ์ง ์์ API ์ฌ์ฉ ๋๋ ๋ฐ์ดํฐ ์ ์ถ์ ์๋ณํ ์ ์์ผ๋ฏ๋ก ๋ณด์ ๋ณด์ฆ์ ์ํ SAST ๋๊ตฌ๋ก ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ์ง ์์ต๋๋ค. - ์ต์ JavaScript ํด๋ง๊ณผ ํตํฉ๋์ง ์์
PMD๋ ์ต์ JavaScript ์ํ๊ณ์์ ์ํํ ํตํฉ์ด ๋ถ์กฑํฉ๋๋ค. ESLint, Prettier, Babel, Webpack๊ณผ ๊ฐ์ ๋๊ตฌ๋ React, Vue, Angular์ ๊ฐ์ ์ต์ ํ๋ ์์ํฌ์ ๋ํ ๊ธฐ๋ณธ ์ง์์ด ์์ต๋๋ค. - ์๋ ๊ท์น ๊ด๋ฆฌ ๋ฐ ์ฌ์ฉ์ ์ ์๊ฐ ํ์ํฉ๋๋ค.
๊ท์น์ ์์ธํ XML์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑํด์ผ ํ๋ฉฐ, ์ฌ์ฉ์ ์ ์ ๊ท์น ์์ฑ๋ ๊ฐ๋ฅํ์ง๋ง ๊ฐ๋จํ์ง ์์ผ๋ฉฐ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ์ XPath ๋๋ Java ๊ท์น ๊ฐ๋ฐ์ ๋ํ ์ดํด๊ฐ ํ์ํฉ๋๋ค. - JavaScript์ ๋ํ ์ค์๊ฐ IDE ํผ๋๋ฐฑ ์์
PMD๋ Java์ฉ IDE(์: Eclipse, IntelliJ)์ ํตํฉ๋์ง๋ง, JavaScript ์ง์์๋ ํ๋ถํ ๋๊ตฌ๊ฐ ๋ถ์กฑํฉ๋๋ค. VSCode๋ WebStorm์ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ ๊ฐ๋ฐ ๊ณผ์ ์์ PMD์ ๋ค์ดํฐ๋ธ ํผ๋๋ฐฑ์ ๊ฑฐ์ ๋ฐ์ง ๋ชปํ ๊ฒ์ ๋๋ค.
PMD๋ Java ๋ฐ ๋ ๊ฑฐ์ JavaScript ํ๋ก์ ํธ, ํนํ ์ด๋ฏธ ๋ค๋ฅธ ์ธ์ด์ PMD๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ์กฐ์ง์์ ์ ๋ขฐํ ์ ์๋ ์ ์ ๋ถ์ ๋๊ตฌ๋ก ๋จ์ ์์ต๋๋ค. ํ์ง๋ง JavaScript ์ง์์ ์ ํ์ ์ด๊ณ ์ค๋๋์์ผ๋ฉฐ ์ต์ ๊ฐ๋ฐ ๋ฐฉ์์๋ ์ ํฉํ์ง ์์ต๋๋ค. ์ต์ JavaScript ๋ฐ TypeScript ์ฝ๋๋ฒ ์ด์ค์ ๊ฒฝ์ฐ, ESLint, Semgrep ๋๋ SonarQube๊ฐ ํจ์ฌ ๋ ๊ด๋ฒ์ํ ๊ธฐ๋ฅ, ํ๋ฐํ ์ํ๊ณ ์ง์, ๊ทธ๋ฆฌ๊ณ ์ต์ ํ๋ฐํธ์๋ ๋ฐ ํ์คํ ํด๋ง๊ณผ์ ํฅ์๋ ํตํฉ์ ์ ๊ณตํฉ๋๋ค.
DeepScan: ๋ฐํ์ ๋ฌธ์ ์ ์ด์ ์ ๋ง์ถ ์ ์ ๋ถ์
DeepScan์ JavaScript ๋ฐ TypeScript์ฉ์ผ๋ก ํน๋ณํ ์ค๊ณ๋ ์ ์ ๋ถ์ ๋๊ตฌ๋ก, ESLint์ ๊ฐ์ ๊ธฐ์กด ๋ฆฐํฐ๊ฐ ๊ฐ๊ณผํ๊ธฐ ์ฌ์ด ๋ฐํ์ ๋ฌธ์ , ํ์ง ๊ฒฐํจ, ๊ทธ๋ฆฌ๊ณ ๋ก์ง ๋ฒ๊ทธ๋ฅผ ํ์งํ๋ ๋ฐ ์ค์ ์ ๋๊ณ ์์ต๋๋ค. ๋จ์ํ ์คํ์ผ ์ ์ฉ์ ๋์ด ์ฌ์ธต์ ์ธ ์๋ฏธ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ฌ React, Vue, Angular์ ๊ฐ์ ์ต์ ํ๋ฐํธ์๋ ํ๋ ์์ํฌ์์ ๋ฌธ์ ๊ฐ ์๋ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ๋ ๋ฐ ํนํ ์ ์ฉํฉ๋๋ค.
DeepScan์ ์ ์ด ํ๋ฆ ๋ฐ ๋ฐ์ดํฐ ํ๋ฆ ๋ถ์์ ์ํํ์ฌ ๋๋ฌํ ์ ์๋ ์ฝ๋, null ์ฐธ์กฐ ์ค๋ฅ, ์์ด๋ฒ๋ฆฐ ์ฝ๋ ๋ฑ์ ํ๋๊ทธ๋ก ํ์ํ ์ ์์ต๋๋ค. await ๋ช
๋ น๋ฌธ, ์๋ชป๋ ์กฐ๊ฑด ๊ฒ์ฌ ๋ฐ ๊ธฐํ ๋ฐํ์์ ์ค์ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. GitHub ๋ฐ ์ธ๊ธฐ ์๋ CI/CD ํ๋ซํผ๊ณผ ํตํฉ๋๋ฉฐ, ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ์๋น์ค์ ์น IDE ํ์ฅ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ ๊ณตํ์ฌ ๊ฐ์ธ๊ณผ ํ ๋ชจ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- JavaScript ๋ฐ TypeScript ์ฝ๋์ ์ฌ์ธต์ ์๋ฏธ ๋ถ์
- null ์ญ์ฐธ์กฐ, ์๋ชป๋ ์กฐ๊ฑด, ์์ด๋ฒ๋ฆฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๊ฐ์ ๋ฐํ์ ๋ฌธ์ ๊ฐ์ง
- ์ธ๊ธฐ ์๋ ํ๋ ์์ํฌ(React, Vue, Angular)์ ๋ํ ๊ธฐ๋ณธ ์ง์
- ์ฝ๋ ํ์ง ์ถ์ ๋ฐ ์ธก์ ์ ์ํ ์น ๊ธฐ๋ฐ ๋์๋ณด๋
- ์ธ๋ผ์ธ ํ ๋ฆฌํ์คํธ ๋ถ์์ ์ํ GitHub ํตํฉ
- CLI ์ง์ ๋ฐ VSCode ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ถ ๊ฐ๋ฒผ์ด ์ค์
DeepScan์ ๋จ์ :
- ์ฌ์ฉ์ ์ ์ ๊ท์น ์ง์ ์์
ESLint๋ Semgrep๊ณผ ๊ฐ์ ๋๊ตฌ์ ๋ฌ๋ฆฌ DeepScan์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉ์ ์ง์ ๊ท์น์ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ํ๋ก์ ํธ๋ณ ์ฝ๋ฉ ์ง์นจ์ ์ ์ฉํ๊ฑฐ๋ ํน์ ๋ก์ง์ ์ ์ฉํ๊ธฐ๊ฐ ๋ ์ด๋ ต์ต๋๋ค. - ๋๊ท๋ชจ ๊ธฐ์
ํ๋ก์ ํธ์ ๋ํ ํ์ฅ์ฑ ์ ํ
DeepScan์ ๋์๋ณด๋์ ์ ์ฑ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์๊ท๋ชจ ๋ฐ ์ค๊ท๋ชจ ํ๋ก์ ํธ์ ์ ํฉํ์ง๋ง, ์ํฐํ๋ผ์ด์ฆ๊ธ ๋ณด๊ณ , ๋ค์ค ์ ์ฅ์ ๊ฑฐ๋ฒ๋์ค ๋๋ ์กฐ์ง ๊ท์ ์ค์ ์ถ์ ์ธก๋ฉด์์๋ SonarQube๋ CodeQL๊ณผ ๊ฐ์ ํ๋ซํผ๋งํผ ๊ฐ๋ ฅํ์ง ์์ต๋๋ค. - ๋ณด์์ด ์๋ ๋ฐํ์ ์ ํ์ฑ์ ์ง์คํ์ธ์
DeepScan์ ๋ ผ๋ฆฌ์ ๊ฒฐํจ์ ํฌ์ฐฉํ๋ ๋ฐ ๋งค์ฐ ๋ฐ์ด๋์ง๋ง ๋ณด์ ๋ถ์์ ์ ๊ณตํ์ง ์์ต๋๋คXSS, SQL ์ฃผ์ , ์์ ํ์ง ์์ ์ธ์ฆ ๋ ผ๋ฆฌ ๋๋ ์๋ ค์ง ์ทจ์ฝ์ ํจํด๊ณผ ๊ฐ์ ์ทจ์ฝ์ ์ ์ฝ๋ ๋ ผ๋ฆฌ ๋ฌธ์ ๋ก ๋ํ๋์ง ์๋ ํ ๊ฐ์งํ์ง ์์ต๋๋ค. - ๊ฑด์ถ ์๊ฐํ๋ ๊ธฐ์ ๋ถ์ฑ ๋ชจ๋ธ๋ง์ด ์์ต๋๋ค.
DeepScan์ ์ธก์ ํญ๋ชฉ๊ณผ ๋ฌธ์ ๋ถ๋ฅ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ์ข ์์ฑ ๊ทธ๋ํ, ์ค๋ณต ๊ฐ์ง, ํ๋ํ ์ค๋น์ฑ ํต์ฐฐ๋ ฅ๊ณผ ๊ฐ์ ๊ณ ์์ค ์๊ฐํ ๊ธฐ๋ฅ์ด ๋ถ์กฑํฉ๋๋ค. - ์น ๊ธฐ๋ฐ์ด์ง๋ง ์จํ๋ ๋ฏธ์ค ๋๋ ์์ด๊ฐญ ํ๊ฒฝ์์๋ ์ ํ์ด ์์ต๋๋ค.
DeepScan์ ๊ธฐ๋ฅ ๋๋ถ๋ถ์ ํด๋ผ์ฐ๋ ํตํฉ์ ์์กดํฉ๋๋ค. CLI๊ฐ ์กด์ฌํ๋๋ผ๋, ์ ํ์ ์ด๊ฑฐ๋ ์คํ๋ผ์ธ ํ๊ฒฝ์์ ์์ ํ๋ ์ฌ์ฉ์๋ ๋์ ์ ์ด๋ ค์์ ๊ฒช์ ์ ์์ต๋๋ค. - ๋ฆฐํฐ๋ ํฌ๋งคํฐ๋ฅผ ์์ ํ ๋์ฒดํ์ง ์์
DeepScan์ ESLint๋ Prettier์ ๊ฐ์ ๋๊ตฌ๋ฅผ ๋ณด์ํ์ง๋ง, ์ฝ๋ ์คํ์ผ์ด๋ ์์์ ๊ฐ์ ํ์ง๋ ์์ต๋๋ค. ํ์ ์คํ์ผ ์ผ๊ด์ฑ์ ์ํด ๋ณ๋์ ๋๊ตฌ๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค.
DeepScan์ ๋จ์ํ ๋ฆฐํ ์ ๋์ด JavaScript ๋ฐ TypeScript ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐํ์ ๊ฒฐํจ๊ณผ ์จ๊ฒจ์ง ๋ก์ง ๋ฒ๊ทธ๋ฅผ ํฌ์ฐฉํ๊ณ ์ ํ๋ ํ์๊ฒ ํ๋ช ํ ์ ํ์ ๋๋ค. DeepScan์ ์๋ฏธ๋ก ์ ๋ถ์ ์์ง์ ๋ณต์กํ ํ๋ฐํธ์๋ ์ฝ๋๋ฒ ์ด์ค์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ๋ ๋ฐ ํนํ ์ ์ฉํฉ๋๋ค. ํ์ง๋ง ๋ณด์, ๊ท์ ์ค์ ๋๋ ์ํฐํ๋ผ์ด์ฆ๊ธ ๋ถ์์ ์ํ ํฌ๊ด์ ์ธ ์๋ฃจ์ ์ ์๋๋ฉฐ, ESLint, Snyk, SonarQube์ ๊ฐ์ ๋ค๋ฅธ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ ์ฒด์ ์ธ ๋ถ์์ ์ํํ๋ ๋ฐ ๊ฐ์ฅ ํจ๊ณผ์ ์ ๋๋ค.
Retire.js: ์ข ์์ฑ์ ๋ํ ํ๊ฒ ์ทจ์ฝ์ ์ค์บ๋
Retire.js๋ ๊ฐ๋ฐ์๊ฐ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์ข ์์ฑ์ ์๋ ค์ง ์ทจ์ฝ์ ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋๋ ๋ณด์ ์ค์ฌ ์ ์ ๋ถ์ ๋๊ตฌ์ ๋๋ค. Retire.js๋ ์ฝ๋ ๋ ผ๋ฆฌ๋ ๊ตฌ๋ฌธ์ ๋ถ์ํ๋ ๋์ , jQuery, AngularJS, Bootstrap ๋ฑ๊ณผ ๊ฐ์ ํ๋ฐํธ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น๋กฏํ ํ์ฌ ๊ตฌ์ฑ ์์์ ์ค๋๋์๊ฑฐ๋ ์์ ํ์ง ์์ ๋ฒ์ ์ ๊ฒ์ฌํฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ฝ๋ ๋ฐ ํจํค์ง ๊ด๋ฆฌ์์ ์ข ์์ฑ์ ํ๋ ์ดํ ๋ ์ทจ์ฝ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๊ตํ์ฌ ์๋ ค์ง CVE ๋๋ ๊ณต๊ฐ ๋ณด์ ๊ถ๊ณ ๊ฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ํฉ๋๋ค. Retire.js๋ ๋ช ๋ น์ค์์ ์คํํ๊ฑฐ๋, CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉํ๊ฑฐ๋, ๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ์ผ๋ก ์ฌ์ฉํ์ฌ ์คํ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ทจ์ฝํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์๋ ค์ง ์ทจ์ฝ์ ์ ์ฐพ๊ธฐ ์ํด JavaScript ์์ค ํ์ผ๊ณผ Node.js ๋ชจ๋์ ๊ฒ์ฌํฉ๋๋ค.
- ๊ณต๊ฐ ์ทจ์ฝ์ฑ ์ ์ฅ์(์ปค๋ฎค๋ํฐ ํ๋ ์ด์ )๋ฅผ ์ ์งํฉ๋๋ค.
- ๋น๋ ๋ฐ ํ์ดํ๋ผ์ธ ์๋ํ๋ฅผ ์ํ CLI ๋๊ตฌ
- ํด๋ผ์ด์ธํธ ์ธก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ทจ์ฝ์ ์ ์ค์๊ฐ์ผ๋ก ๊ฐ์งํ๋ ๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ
- ๋น ๋ฅธ ์คํ ๋ฐ ๊ฐ๋ฒผ์ด ์ค์
- npm, Yarn ๋ฐ ๊ธฐํ Node.js ์ํ๊ณ์ ํธํ ๊ฐ๋ฅ
Retire.js์ ๋จ์ :
- ์๋ ค์ง ์ทจ์ฝ์ ๋ง ๊ฐ์งํฉ๋๋ค
Retire.js๊ฐ ๊ฐ์งํ ์ ์์ต๋๋ค. ์ ์์๋ or ์์ค ์ทจ์ฝ์ , ์์ ํ์ง ์์ ์ฝ๋ฉ ํจํด ๋๋ ๋ฐํ์ ๋ก์ง ์ค๋ฅ๋ฅผ ํ์งํฉ๋๋ค. CVE ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ์นํ๋ ํจํค์ง์ ์คํฌ๋ฆฝํธ๋ง ํ์ํฉ๋๋ค. - ์ฝ๋ ๋
ผ๋ฆฌ๋ ๋์ ๋ถ์์ด ์์ต๋๋ค.
Retire.js๋ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ๋ถ์ํ์ง ์๊ณ , ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ๋ถ์ํฉ๋๋ค. ์์ฒด ์ฝ๋๋ฒ ์ด์ค์์ ์์ ํ์ง ์์ API ์ฌ์ฉ, ์ค์ผ๋ ๋ฐ์ดํฐ ํ๋ฆ ๋๋ ์๋ชป ๊ตฌ์ฑ๋ ๋ณด์ ์ ์ด๋ฅผ ๊ฐ์งํ์ง ์์ต๋๋ค. - ์ข
์์ฑ ํด๊ฒฐ์ ๊ธฐ๋ณธ์
๋๋ค
Retire.js๋ ์์ ํ ์ข ์์ฑ ๊ทธ๋ํ, ์ ์ด์ ์ข ์์ฑ ํด๊ฒฐ, ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ ๋ฐฉ์์ ๋ํ ๋งฅ๋ฝ์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ด๋ก ์ธํด ๊ฐ์ ์ฑ (๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ง๋ง ์ฌ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ) ๋๋ ๊ฑฐ์ง ๋ถ์ (์ทจ์ฝ์ ์ด ํธ๋ฆฌ์ ๋ ๊น์ ๊ณณ์ ์กด์ฌํ๋ ๊ฒฝ์ฐ). - ์์ธํ ๊ฐ์ ์ง์นจ์ด ๋ถ์กฑํฉ๋๋ค.
Retire.js๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ทจ์ฝํ๋ค๋ ์ฌ์ค์ ์๋ ค์ฃผ์ง๋ง ํนํ ๋ค์๊ณผ ๊ฐ์ ๋๊ตฌ์ ๋น๊ตํ์ ๋ ์์ ๋๋ ์ ๊ทธ๋ ์ด๋ ๋ฐฉ๋ฒ์ ๋ํ ์คํ ๊ฐ๋ฅํ ์กฐ์ธ์ ์ ํ์ ์ ๋๋ค. ์ค ๋ํฌ or npm ๊ฐ์ฌ ํน์ ์์ ๋ฒ์ ์ ์ ์ํฉ๋๋ค. - IDE ๋๋ ์ธ๋ผ์ธ ๊ฐ๋ฐ์ ํผ๋๋ฐฑ๊ณผ์ ํตํฉ์ด ์์ต๋๋ค.
ESLint๋ Snyk Code์ ๊ฐ์ ๋๊ตฌ์ ๋ฌ๋ฆฌ Retire.js๋ ํธ์ง๊ธฐ ๋ด์์ ์ค์๊ฐ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ง์ ์คํํ๊ฑฐ๋ ๋น๋ ํ์ ์๋ํ์ ์์กดํด์ผ ํฉ๋๋ค. - ์ ์ฒด๋ ๊ฐ๋ฐ๊ณผ ์ ํ๋ ์ํ๊ณ ์ง์
Retire.js๋ ์์ง ์๋ํ์ง๋ง, ๋ ์ด์ ํ๋ฐํ๊ณ ๋น๋ฒํ ๊ฐ๋ฐ์ด ์ด๋ฃจ์ด์ง์ง ์์ต๋๋ค. ์ปค๋ฎค๋ํฐ ๊ท๋ชจ๊ฐ ์๊ณ , ์ทจ์ฝ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ฐ์ดํธ๊ฐ ์ต์ ๋๊ตฌ๋ณด๋ค ๋๋ฆด ์ ์์ต๋๋ค.
Retire.js๋ ํนํ ํ๋ฐํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ ๊ฑฐ์ ํ๋ก์ ํธ์์ ์ค๋๋์๊ฑฐ๋ ์ทจ์ฝํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์งํ๋ ๋ฐ ์ ์ฉํ ์ ํธ๋ฆฌํฐ์ ๋๋ค. ํ์ง๋ง ์ด๋ ์์ ํ ์ ์ ์ฝ๋ ๋ถ์ ์๋ฃจ์ ์ด ์๋, ํน์ ๋ชฉ์ ์ ๊ตญํ๋ ๋๊ตฌ์ ๋๋ค. ์ทจ์ฝ์ ์ค์บ๋, ์ฝ๋ ๋ก์ง ๋ถ์, ์ค์๊ฐ ํผ๋๋ฐฑ ๋ฑ ๋ ๊ด๋ฒ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ์ํด์๋ Retire.js๋ฅผ ์ต์ DevSecOps ์ํฌํ๋ก์ ์ผ๋ถ๋ก Snyk, Semgrep, SonarQube์ ๊ฐ์ ๋๊ตฌ๋ก ๋ณด์ํด์ผ ํฉ๋๋ค.
OWASP ์ข ์์ฑ ๊ฒ์ฌ: ์คํ์์ค ์ข ์์ฑ ์ทจ์ฝ์ ์ค์บ๋
OWASP ์ข ์์ฑ ๊ฒ์ฌ(ODASP Dependency-Check)๋ ์คํ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ๋ก์ ํธ(OWASP)์์ ๊ฐ๋ฐ๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ๊ตฌ์ฑ ๋ถ์(SCA) ๋๊ตฌ์ ๋๋ค. ์ํํธ์จ์ด ํจํค์ง๋ฅผ ๊ฒ์ฌํ๊ณ ์ด๋ฅผ NVD(National Vulnerability Database)์ ๊ฐ์ ๊ณต๊ฐ ์ทจ์ฝ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๊ตํ์ฌ ํ๋ก์ ํธ ์ข ์์ฑ์์ ์๋ ค์ง ์ทจ์ฝ์ (CVE)์ ์๋ณํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
Dependency-Check๋ ์ฒ์์๋ Java ์ํ๊ณ(Maven ๋ฐ Gradle์ ํตํด)์ ๋ง์ถฐ์ ธ ์์์ง๋ง ๋ถ์์ ํตํด JavaScript ๋ฐ Node.js ํ๋ก์ ํธ๋ ์ง์ํฉ๋๋ค. package.json package-lock.json ํ์ผ. ์ด ๋๊ตฌ๋ CLI ์ ํธ๋ฆฌํฐ, Maven ํ๋ฌ๊ทธ์ธ, Gradle ํ๋ฌ๊ทธ์ธ, Ant ์์
๋ฐ Jenkins ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ ๊ณต๋์ด CI/CD ํ์ดํ๋ผ์ธ ๋ฐ ๋น๋ ์์คํ
์์ ์๋ํ๋ฅผ ์ฝ๊ฒ ์ํํ ์ ์์ต๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์๋ ค์ง CVE์ ๋ํ JavaScript(Node.js) ์ข ์์ฑ์ ๊ฒ์ฌํฉ๋๋ค.
- ํ์ฑํ๋ค
package.json,npm-shrinkwrap.json๊ธ๋ ๋ฐ์ผpackage-lock.jsonํ์ผ - CI/CD ๋๊ตฌ์ ํตํฉํ์ฌ ์๋ํ๋ฅผ ์ํ ์์คํ ์ ๊ตฌ์ถํฉ๋๋ค.
- NVD, Retire.js DB, OSS Index ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์์ธํ HTML, XML ๋ฐ JSON ๋ณด๊ณ ์๋ฅผ ์์ฑํฉ๋๋ค.
- ๊ฑฐ์ง ์์ฑ์ ๊ฑธ๋ฌ๋ด๊ธฐ ์ํ ์ต์ ํ์ผ ์ง์
- OWASP ์ฌ๋จ์ ๋ฌด๋ฃ ์คํ ์์ค
์ข ์์ฑ ๊ฒ์ฌ์ ๋จ์ :
- ํ์ฌ ์ข
์์ฑ์๋ง ์ด์ ์ ๋ง์ถฅ๋๋ค.
Dependency-Check๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ์ง์ JavaScript ๋๋ TypeScript ์ฝ๋๋ฅผ ๊ฒ์ฌํ์ง ์์ต๋๋ค. ์ฌ์ฉ์ ์ฝ๋๋ฒ ์ด์ค ๋ด์ ๋ ผ๋ฆฌ์ ๊ฒฐํจ, ์์ ํ์ง ์์ ํจํด ๋๋ ์์ ํ์ง ์์ ๋น๋๊ธฐ ์ฌ์ฉ์ ๊ฐ์งํ ์ ์์ต๋๋ค. - ์๋ฏธ๋ก ์ ๋๋ ๋ฐํ์ ๋ถ์ ์์
Semgrep ๋๋ CodeQL๊ณผ ๊ฐ์ ๋๊ตฌ์ ๋ฌ๋ฆฌ Dependency-Check๋ ๋ค์์ ์ํํฉ๋๋ค. ์ ์ ์ฝ๋ ๋ถ์ ์์๋ฐ์ดํฐ ํ๋ฆ์ ์ถ์ ํ์ง ์๊ณ , API ์ค์ฉ์ ํ์ธํ์ง ์์ผ๋ฉฐ, ์ทจ์ฝํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์ ๋ก ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ๋ชจ๋ธ๋งํ์ง ์์ต๋๋ค. - JavaScript ์ง์์ด ์ ํ์ ์ด๊ณ ๋ ์ฑ์ํจ
Java์ ๋นํด Node.js ์ง์์ ๋ ๊ฒฌ๊ณ ํ๋ค์ข ์์ฑ ํด๊ฒฐ, ์ทจ์ฝ์ฑ ๋งคํ ๋ฐ ์ ํ๋๋ ๋ณต์กํ๊ฑฐ๋ ๋จ์ผ ๋ฆฌํฌ ๊ตฌ์กฐ์์ ์ผ๊ด๋์ง ์์ ์ ์์ผ๋ฉฐ, ํนํ ๊น์ด ์ค์ฒฉ๋๊ฑฐ๋ ์ ์ด์ ์ข ์์ฑ์ด ์๋ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. - ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ ๋๋ฆฌ๊ณ ๋ฌด๊ฑฐ์
์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ๋ฌด๊ฑฐ์ด CVE ๋งคํ์ ์ํํ๋ฏ๋ก Dependency-Check๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ ์ ์์ต๋๋ค. ๋๊ท๋ชจ JavaScript ๋๋ ๋ค๊ตญ์ด ์ฝ๋๋ฒ ์ด์ค์์๋ ๋๋ฆผ. - ๊ฑฐ์ง ์์ฑ ๋ฐ ๊ฑฐ์ง ์์ฑ์ ํํฉ๋๋ค.
ํนํ JavaScript์ ๊ฒฝ์ฐ CVE ๋งคํ์ ์ด๋ฆ ๋ฐ ๋ฒ์ ํด๋ฆฌ์คํฑ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ ์ด๋ก ์ธํด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ฐ์ ์ฑ (์: ์ฌ์ฉ๋์ง ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ํ๋๊ทธ๊ฐ ์ง์ ๋ ์ทจ์ฝ์ ) ๋๋ ๋์น ํ์ง ๋ฉํ๋ฐ์ดํฐ๊ฐ ๋ถ์์ ํ ๊ฒฝ์ฐ. - ์์ ์ ์์ด๋ ์์ ์๋ํ๊ฐ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋๊ตฌ์ ๋ฌ๋ฆฌ ์ค ๋ํฌ or npm ๊ฐ์ฌDependency-Check๋ ์์ ๊ฐ๋ฅํ ์ ๊ทธ๋ ์ด๋ ๊ฒฝ๋ก, ํธํ์ฑ ๋ถ์ ๋๋ ์๋ํ๋ ์์ ๊ถ์ฅ ์ฌํญ์ ์ ๊ณตํ์ง ์์ต๋๋ค. - IDE ํตํฉ์ด๋ ์ค์๊ฐ ๊ฐ๋ฐ์ ํผ๋๋ฐฑ์ด ๋ถ์กฑํฉ๋๋ค.
์ธ๋ผ์ธ ์ ์์ด๋ ๊ฐ๋ฐ์ ์ค์ฌ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ถ๋ ฅ์ ํจ๊ณผ์ ์ผ๋ก ํ์ํ๊ธฐ ์ํด ์ถ๊ฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ง ์๋ ํ, ๊ฐ๋ฐ์๋ ๋ณด๊ณ ์๋ฅผ ์ง์ ๊ฒํ ํด์ผ ํฉ๋๋ค.
OWASP Dependency-Check๋ ํนํ ๊ท์ ๋ ํ๊ฒฝ์์ JavaScript ๋ฐ Node.js ์ข ์์ฑ์ ์ทจ์ฝ์ ์ ํ์ ํ๊ณ ์ ํ๋ ํ์๊ฒ ์ ์ฉํ ๋ฌด๋ฃ ๋๊ตฌ์ ๋๋ค. ํ์ง๋ง ์ด ๋๊ตฌ๋ ์ทจ์ฝ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์บ๋์ด๋ฉฐ, ์์ ํ ์ ์ ๋ถ์ ๋๊ตฌ๋ ์๋๋๋ค. ํจ๊ณผ์ ์ธ JavaScript ๋ณด์์ ์ํด์๋ Semgrep์ด๋ CodeQL๊ณผ ๊ฐ์ ์ฝ๋ ์์ค ๋ถ์๊ธฐ์ ESLint๋ Snyk Code์ ๊ฐ์ ์ค์๊ฐ ๋ฆฐํฐ(linter)๋ฅผ ํจ๊ป ์ฌ์ฉํ์ฌ ์ข ์์ฑ ์ํ๊ณผ ์ฝ๋ ๋ด ์ํ์ ๋ชจ๋ ํ์ ํด์ผ ํฉ๋๋ค.
NodeJsScan: ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ ์คํธ
NodeJsScan์ Node.js ๋ฐ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ์ทจ์ฝ์ ์ ํ์งํ๊ธฐ ์ํด ํน๋ณํ ๊ฐ๋ฐ๋ ์คํ์์ค ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ ์คํธ(SAST) ๋๊ตฌ์ ๋๋ค. ์๋ฒ ์ธก JavaScript ์ฝ๋(Express ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ํฌํจ)๋ฅผ ๋ถ์ํ์ฌ ์ฃผ์ ๊ณต๊ฒฉ, ์์ ํ์ง ์์ ์ฟ ํค ์ฒ๋ฆฌ, ๊ฒฝ๋ก ์ํ, ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ๋ ธ์ถ๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ณด์ ๋ฌธ์ ๋ฅผ ํ์ ํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค.
NodeJsScan์ Node.js ์ํ๊ณ์ ๋ง์ถฐ ๋ฏธ๋ฆฌ ์ ์๋ ๋ณด์ ๊ท์น ์งํฉ์ ๋ฐ๋ผ ์์ค ํ์ผ์ ๊ฒ์ฌํฉ๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ , CLI ๋๊ตฌ, Docker ์ด๋ฏธ์ง๋ก ์ ๊ณต๋์ด ๋ก์ปฌ ๊ฒ์ฌ ๋๋ DevSecOps ํ์ดํ๋ผ์ธ ํตํฉ์ ์ ์ฐํ๊ฒ ํ์ฉํ ์ ์์ต๋๋ค. ๋ํ ํ ๋ฆฌํ์คํธ๋ฅผ ํตํ ์ธ๋ผ์ธ ๋ณด์ ํผ๋๋ฐฑ์ ์ํด GitHub ์ฐ๋์ ์ง์ํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์๋ ค์ง ๋ณด์ ์ทจ์ฝ์ ์ ์ฐพ๊ธฐ ์ํด JavaScript ๋ฐ Node.js ์ฝ๋๋ฅผ ๊ฒ์ฌํฉ๋๋ค.
- XSS, SQL/NoSQL ์ฃผ์ , ์์ ํ์ง ์์ ํ๊ฐ ๋ฐ ์์ ํ์ง ์์ ์ข ์์ฑ๊ณผ ๊ฐ์ ์ํ์ ๊ฐ์งํฉ๋๋ค.
- CI/CD ์ํฌํ๋ก์ฐ์ ์ฝ๊ฒ ํตํฉํ ์ ์๋ CLI ๋ฐ Docker ์ง์
- Express, HTTP ์ฒ๋ฆฌ, JWT ์ฌ์ฉ ๋ฐ ํ์ผ ์์คํ API์ ๋ํ ๋ฏธ๋ฆฌ ์ ์๋ ๊ท์น
- ํ ๋ฆฌํ์คํธ ์ค์บ๋ ๋ฐ ์ธ๋ผ์ธ ์๋ฆผ์ ์ํ GitHub ํตํฉ
- ๋ฌด๊ฑฐ์ด SAST ๋๊ตฌ์ ๋ํ ๊ฐ๋ณ๊ณ ๊ฐ๋ฐ์ ์นํ์ ์ธ ๋์์ ์ ๊ณตํฉ๋๋ค.
NodeJsScan์ ๋จ์ :
- ๋ณด์ ์ค์บ๋์๋ง ๊ตญํ๋จ
NodeJsScan์ ๋ณด์ ๋ฌธ์ ์๋ง ์ง์คํฉ๋๋ค. ์ฝ๋ ํ์ง, ์ ์ง๋ณด์์ฑ, ์ํคํ ์ฒ ๊ตฌ์กฐ ๋๋ ๊ธฐ์ ๋ถ์ฑ๋ฅผ ๋ถ์ํ์ง ์์ต๋๋ค. ์คํ์ผ ๋ฌธ์ , ๋ก์ง ๋ฒ๊ทธ, ๋ชจ๋ฒ ์ฌ๋ก ์๋ฐ์ ๋ถ์ ๋ฒ์์ ํฌํจ๋์ง ์์ต๋๋ค. - ์๋ฏธ๋ก ์ ์ด๊ณ ์ฌ์ธต์ ์ธ ๋ฐ์ดํฐ ํ๋ฆ ๋ถ์์ด ๋ถ์กฑํฉ๋๋ค.
NodeJsScan์ ์์ ํ์ง ์์ ํจํด์ ๊ฐ์งํ์ง๋ง ํจํด ๊ธฐ๋ฐ์๋ฏธ๋ก ์ ์ด์ง ์์ต๋๋ค. ๋ณต์กํ ์ค์ผ ํ๋ฆ, ๋น๋๊ธฐ ์ ์ด ๊ฒฝ๋ก ๋๋ ๋ค์ธต ์ทจ์ฝ์ ์ ๋ค์๊ณผ ๊ฐ์ ๋๊ตฌ๋งํผ ๊น์ด ์ถ์ ํ ์ ์์ต๋๋ค. CodeQL or ์ ๊ทธ๋ . - ์์ ๊ท์น ์ธํธ ๋ฐ ์ฌ์ฉ์ ์ ์ ๊ท์น ํ๋ ์์ํฌ ์์
์ฌ์ ์ ์๋ ๊ท์น ์ธํธ๋ ์ผ๋ฐ์ ์ธ ์ทจ์ฝ์ ์ ๋์์ด ๋์ง๋ง ์ฌ์ฉ์ ์ ์ ๊ท์น ์์ฑ์ด ์ ํ๋จ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ์ง์ํ์ง ์์ ๊ณ ์ ํ ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์กฐ์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค. - ์ต์ํ์ ํ๋ ์์ํฌ ์ง์
Express๋ ์ง์๋์ง๋ง, Hapi, Koa, NestJS ๋ฑ ๋ค๋ฅธ Node.js ํ๋ ์์ํฌ๋ ์๋ฒฝํ๊ฒ ์ง์๋์ง ์์ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ๋์ฑ ๋ค์ํ ๋ฐฑ์๋ ํ๊ฒฝ์์ ๋๊ตฌ์ ํจ์จ์ฑ์ด ์ ํ๋ ์ ์์ต๋๋ค. - IDE ํตํฉ์ด๋ ์ค์๊ฐ ๊ฐ๋ฐ์ ํผ๋๋ฐฑ์ด ์์ต๋๋ค.
NodeJsScan์ ํ์ดํ๋ผ์ธ์ด๋ CLI๋ฅผ ํตํด ์ฌ์ฉํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๊ฐ๋ฐ ํ๊ฒฝ์ ์ง์ ํตํฉ๋์ง ์์ VSCode์ฒ๋ผ์. ๊ฐ๋ฐ์๋ ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ค์๊ฐ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์์ต๋๋ค. - ์ฌ์ธต์ ์ธ ์ข
์์ฑ์ด๋ ํ์ฌ ํจํค์ง ๋ถ์์ด ์์ต๋๋ค.
NodeJsScan์ ์์ ํ์ง ์์ ํจํด์ ํ์ํ ์ ์์ง๋ง ์ค์บํ์ง ์์node_modules๋๋ CVE ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํจํค์ง๋ฅผ ๋น๊ตํฉ๋๋ค.. ๊ฐ์ ๋๊ตฌ ์ค ๋ํฌ or OWASP ์ข ์์ฑ ๊ฒ์ฌ ์ ์ฒด SCA(์ํํธ์จ์ด ๊ตฌ์ฑ ๋ถ์)์ ํ์ํฉ๋๋ค. - ๊ธฐ๋ณธ ๋ณด๊ณ ๋ฐ ๋์๋ณด๋
์คํ์์ค ๋ฒ์ ์ ์ํฐํ๋ผ์ด์ฆ ๋๊ตฌ์์ ๋ณผ ์ ์๋ ๊ณ ๊ธ ๋ณด๊ณ ๊ธฐ๋ฅ์ด๋ ๋์๋ณด๋๊ฐ โโ๋ถ์กฑํฉ๋๋ค. ๊ฒฐ๊ณผ๋ ์ผ๋ฐ ์ถ๋ ฅ์ด๋ ๊ธฐ๋ณธ ์น UI๋ก ์ ๊ณต๋๋ฉฐ, ์ ์ฑ ์ ์ฉ ๊ธฐ๋ฅ์ ์ ํ์ ์ ๋๋ค.
NodeJsScan์ Node.js ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ์ทจ์ฝ์ ์ ํ์งํ๋ ์ค์ฉ์ ์ด๊ณ ์ง์ค์ ์ธ ์๋ฃจ์ ์ผ๋ก, ํนํ ์์ฉ SAST ์ ํ์ ๋ํ ์คํ์์ค ๋์์ ์ฐพ๋ ํ์๊ฒ ์ ์ฉํฉ๋๋ค. ํ์ง๋ง ์์ ํ ์ ์ ๋ถ์ ํ๋ซํผ์ ์๋๋ฉฐ, ์ฝ๋ ํ์ง์ ์ํด์๋ ESLint, ์ข ์์ฑ ์ค์บ๋์ ์ํด์๋ Snyk, ๊ทธ๋ฆฌ๊ณ ๊ณ ๊ธ ์๋ฏธ ๋ถ์ ๋ฐ ์ฌ์ฉ์ ์ ์๋ฅผ ์ํด์๋ CodeQL์ด๋ Semgrep๊ณผ ๊ฐ์ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
JSCS: ์ฝ๋ ์คํ์ผ ์ํ์ ์ฌ๋ผ์ง ์ ๊ตฌ์
JSCS(JavaScript Code Style์ ์ฝ์)๋ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ผ๊ด๋ ์ฝ๋ฉ ์คํ์ผ์ ์ ์ฉํ๋ ๋ฐ ์ค์ ์ ๋ ์ธ๊ธฐ ์๋ ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์ด ๋๊ตฌ๋ฅผ ํตํด ๋ค์ฌ์ฐ๊ธฐ, ๊ณต๋ฐฑ, ์ค๊ดํธ ์คํ์ผ, ๋ฐ์ดํ ์ฌ์ฉ ๋ฑ์ ์์ ๋ถ์ผ์น๋ฅผ ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ๊ฑฐ๋ ์ฌ์ ์ค์ ๋ ๊ท์น ์ธํธ(์: Google, Airbnb, jQuery)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ ํ๊ณ ์์ ํ ์ ์์์ต๋๋ค. JSCS๋ ์ ์ฑ๊ธฐ์๋ ์์๋ณด๋ค๋ ๋ ผ๋ฆฌ ๋ฐ ๊ตฌ๋ฌธ ์ ํ์ฑ์ ๋ ์ค์ ์ ๋ JSHint ๋ฐ JSLint์ ๊ฐ์ ๋๊ตฌ๋ฅผ ๋ณด์ํ๋ ๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋์์ต๋๋ค.
ํ์ง๋ง 2016๋ ์ JSCS๋ ๊ณต์์ ์ผ๋ก ์ง์ ์ค๋จ๋์ด ESLint์ ํตํฉ๋์์ต๋๋ค. ๋น์ ESLint๋ JavaScript์ ์ฃผ์ ๋ฆฐํฐ๋ก ์๋ฆฌ ์ก์์ต๋๋ค. ESLint๋ JSCS์ ์คํ์ผ ๊ฒ์ฌ ๊ท์น๊ณผ ์์ ๊ธฐ๋ฅ์ ํตํฉํ์ฌ ๊ฒฐ๊ตญ JSCS๋ฅผ ์ธ๋ชจ์๊ฒ ๋ง๋ค์์ต๋๋ค. ํ์ฌ JSCS๋ ๋ ์ด์ ์ ์ง ๊ด๋ฆฌ๋์ง ์์ผ๋ฉฐ, GitHub ์ ์ฅ์๋ ๋ณด๊ด๋์์ต๋๋ค.
JSCS๊ฐ ์ ๊ณตํ ๊ฒ:
- ๋ค์ฌ์ฐ๊ธฐ, ์ค ๊ฐ๊ฒฉ, ๋ฐ์ดํ ์ฌ์ฉ, ์ธ๋ฏธ์ฝ๋ก ๊ณผ ๊ฐ์ ๊ฐ์ ์ฝ๋ฉ ์คํ์ผ ๊ท์น
- ์ง์๋๋ ์ฌ์ ์ค์ ๊ตฌ์ฑ(Airbnb, Google ๋ฑ) ๋ฐ ์ฌ์ฉ์ ์ ์ ๊ท์น ์ ์
- ๋น๋ ํ์ดํ๋ผ์ธ๊ณผ์ ํตํฉ ๋ฐ ๋ช ๋ น์ค ์คํ์ ์ํ CLI ๋๊ตฌ
- ๊ท์น ๊ด๋ฆฌ๋ฅผ ์ํ JSON ๊ธฐ๋ฐ ๊ตฌ์ฑ
- Sublime Text ๋ฐ Atom๊ณผ ๊ฐ์ ๋น์ ์ธ๊ธฐ ์๋ ํธ์ง๊ธฐ์ ๋ํ ํ๋ฌ๊ทธ์ธ ์ง์
JSCS์ ๋จ์ (๋น์์ ํ์ฌ):
- ๋ ์ด์ ์ง์๋์ง ์์
JSCS๋ 2016๋ ์ดํ ์ ์ง ๊ด๋ฆฌ๋์ง ์์์ต๋๋ค. ์ ๋ฐ์ดํธ, ๋ฒ๊ทธ ์์ ๋๋ ํธํ์ฑ ๊ฐ์ ์ด ์ด๋ฃจ์ด์ง์ง ์์์ต๋๋ค. JSCS ์ํ๊ณ๋ ESLint์ ์์ ํ ํก์๋์์ผ๋ฉฐ, ์๋ก์ด ํ๋ก์ ํธ๋ JSCS๋ฅผ ํผํด์ผ ํฉ๋๋ค. - ์ฝ๋ ํ์ง์ด๋ ๋ณด์์ด ์๋ ์คํ์ผ์๋ง ์ง์ค
JSCS๋ ์์์ ์ ์ฉํ์ง๋ง ๋ฒ๊ทธ, ์ฝ๋ ์ค๋ฉ, ๋ณด์ ์ทจ์ฝ์ ์ ํฌ์ฐฉํ์ง ๋ชปํ์ต๋๋ค. ESLint๊ฐ ํ์ฌ ํฌ๊ด์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ์ฌ์ฉ๋์ง ์๋ ๋ณ์, ๋๋ฌํ ์ ์๋ ์ฝ๋, ์ํํ ํจํด ํจ์ ๋ฑ์ ๊ฐ์งํ์ง ๋ชปํ์ต๋๋ค. - ์ ํ ์ธ์์ด๋ ์๋ฏธ ๋ถ์์ด ์์ต๋๋ค.
JSCS๋ ์ฝ๋๋ฅผ ์ดํดํ์ง ๋ชปํด ํผ์์ ์ธ ์์ ๊ท์น๋ง ์ ์ฉํ์ต๋๋ค. ํจ์ ์๊ทธ๋์ฒ, ํ์ ๊ด๊ณ ๋๋ ์ ์ด ํ๋ฆ ๋ ผ๋ฆฌ๋ฅผ ๋ถ์ํ๋ ๋ฅ๋ ฅ์ด ๋ถ์กฑํ์ต๋๋ค. - ํ๋ ์์ํฌ๋ ์ต์ ๊ตฌ๋ฌธ ์ง์์ด ์์ต๋๋ค.
JSCS๋ ์ ์ฑ๊ธฐ์๋ ๋ถ๊ตฌํ๊ณ ์๋กญ๊ฒ ๋ฑ์ฅํ๋ JavaScript ๊ธฐ๋ฅ(์: ES6+ ๊ตฌ๋ฌธ, JSX)์ ์ง์ํ๋ ๋ฐ ๋ค์ฒ์ก์ต๋๋ค. JavaScript๊ฐ ๋น ๋ฅด๊ฒ ๋ฐ์ ํจ์ ๋ฐ๋ผ JSCS๋ฅผ ์ต์ ์ํฌํ๋ก์ ๋ง๊ฒ ์ ์งํ๊ณ ๊ตฌ์ฑํ๋ ๊ฒ์ด ๋์ฑ ์ด๋ ค์์ก์ต๋๋ค. - ํ๋ ํ๊ฒฝ์์๋ IDE ๊ธฐ๋ฐ ํผ๋๋ฐฑ์ด ์์ต๋๋ค.
์ค๋๋ ์ ํธ์ง๊ธฐ(์: VSCode, WebStorm)๋ ESLint ํตํฉ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. JSCS๋ ์ต์ ํ๋ฌ๊ทธ์ธ ์์คํ ์ ์ง์ํ์ง ์์ผ๋ฉฐ ์ค์๊ฐ ๋ฆฐํ ์ด๋ ์๋ ์์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. - ๋จํธํ๋ ๊ฐ๋ฐ์ ๊ฒฝํ
ESLint์ ๋ณํฉ๋๊ธฐ ์ ์๋ ๋ง์ ํ๋ก์ ํธ์์ JSCS(์คํ์ผ์ฉ)์ JSHint ๋๋ JSLint(๋ ผ๋ฆฌ์ฉ)๋ฅผ ๋ชจ๋ ์คํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ตฌ์ฑ์ด ์ค๋ณต๋๊ณ ๊ท์น์ด ์ผ๊ด๋์ง ์์ผ๋ฉฐ ๋๊ตฌ ํผ๋ก๊ฐ ๋ฐ์ํ์ต๋๋ค.
JSCS๋ JavaScript ์ํ๊ณ์์ ์ฝ๋ ์คํ์ผ ์ ์ฉ์ ๋์คํํ๋ ๋ฐ ์ค์ํ ์ญ์ฌ์ ์ญํ ์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ, ๋ชจ๋ ์ฃผ์ ๊ธฐ๋ฅ๊ณผ ์ฌ์ฉ ์ฌ๋ก๋ ์ ๊ณ ํ์ค์ผ๋ก ๋จ์ ์๋ ESLint์ ์์ ํ ํก์๋์์ต๋๋ค. ๊ฐ๋ฐ์์ ํ์ ESLint(Prettier ๋๋ eslint-plugin-prettier์ ํจ๊ป)๋ฅผ ์ฌ์ฉํ์ฌ ํ๋์ ํตํฉ๋ ๊ตฌ์ฑ์ผ๋ก ์คํ์ผ๊ณผ ํ์ง์ ๋ชจ๋ ์ ์ฉํด์ผ ํฉ๋๋ค.
StandardJS: Zero-Config JS ์คํ์ผ ๊ฐ์ด๋ ๋ฐ Linter
StandardJS๋ JavaScript์ฉ ๋
์ฐฝ์ฑ์ด ๋ฐ์ด๋๊ณ ์ค์ ์ด ํ์ ์๋ ์ฝ๋ ์คํ์ผ ๊ฒ์ฌ๊ธฐ์ด์ ํฌ๋งทํฐ์
๋๋ค. ๊ฐ๋ฐ์๊ฐ ๋ฆฐํ
๊ท์น, ํ๋ฌ๊ทธ์ธ ๋๋ ํฌ๋งทํ
๋๊ตฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ์๊ฐ์ ๋ค์ด์ง ์๊ณ ๋ ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด๋ ์ฝ๋ ํฌ๋งท์ ์ ์งํ ์ ์๋๋ก ๊ฐ๋ฐ๋์์ต๋๋ค. ESLint๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ StandardJS๋ ์๊ฒฉํ๊ณ ๋ฏธ๋ฆฌ ์ ์๋ ๊ท์น ์ธํธ๋ฅผ ์ ๊ณตํ์ฌ ๋ณ๋์ ์ค์ ์ด ํ์ํ์ง ์์ต๋๋ค. .eslintrc ํ์ผ, ํ๋ฌ๊ทธ์ธ ๊ด๋ฆฌ ๋๋ ์ฌ์ฉ์ ์ ์ ์์ ๊ฒฐ์ .
๋จ์ํจ๊ณผ "๊ทธ๋ฅ ์๋ํ๋ค"๋ ์ฒ ํ์ ์๊ท๋ชจ ํ, ์คํ์์ค ํ๋ก์ ํธ, ๊ทธ๋ฆฌ๊ณ ์ฝ๋ ์คํ์ผ ๋๋ฌธ์ ๋ถํ์ํ ์๊ฐ์ ๋ญ๋นํ๊ณ ์ถ์ง ์์ ๊ฐ๋ฐ์์๊ฒ ํนํ ๋งค๋ ฅ์ ์ ๋๋ค. ๊น๋ํ๊ณ ๋ฏธ๋๋ฉํ ์คํ์ผ์ ๊ฐ์กฐํฉ๋๋ค. ์ธ๋ฏธ์ฝ๋ก ์ ์ฌ์ฉํ์ง ์๊ณ , ์ผ๊ด๋ ๊ฐ๊ฒฉ, ์์๋ฐ์ดํ, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ ์ฑ์ ์ค์ํ๋ ๊ธฐํ ์์๋ค์ ์ฌ์ฉํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ตฌ์ฑ์ด ํ์ ์๋ ์ฌ์ ์ ์๋ ์๊ฒฉํ ๋ฆฐํ ๋ฐ ์์ ๊ท์น
- ESLint + ํ์ค ๊ท์น์ ์ฌ์ฉํ ๋ด์ฅ ํฌ๋งทํ
- ํ ๋จ๊ณ๋ก ํฌ๋งทํ ๋ฐ ๋ฆฐํ ์ ์ํ ๋ช ๋ น์ค ์ธํฐํ์ด์ค
- VSCode, Atom, Sublime Text, WebStorm๊ณผ ๊ฐ์ ํธ์ง๊ธฐ์ฉ ํ๋ฌ๊ทธ์ธ
- Prettier์ ์ ์ฌํ ์์ ์ํฌํ๋ก์ ํธํ๋์ง๋ง ์ถ๊ฐ ํ์ง ๊ท์น์ด ์ ์ฉ๋ฉ๋๋ค.
- Optional
standard --fix๋ฌธ์ ๋ฅผ ์๋์ผ๋ก ์์ ํ๋ ๋ช ๋ น
StandardJS์ ๋จ์ :
- ๊ณ ์ง์ด ์ธ๊ณ ์ตํต์ฑ์ด ์๋ค
StandardJS์ ํต์ฌ ์ฒ ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๊ตฌ์ฑ ์์. ์ด ๋ฐฉ์์ ์ด๋ค ํ์๊ฒ๋ ๋งค๋ ฅ์ ์ด์ง๋ง, ๋ค๋ฅธ ํ์๊ฒ๋ ์ ํ์ ์ ๋๋ค. ๋๊ตฌ๋ฅผ ํฌํฌํ๊ฑฐ๋ ํ๊ธฐํ์ง ์๊ณ ์๋ ๊ท์น์ ์ฌ์ ์ํ๊ฑฐ๋ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค. ์์ ESLint๋ฅผ ์ ํธํ๊ธฐ ๋๋ฌธ์ ๋๋ค. - ๋ณด์์ด๋ ์ํคํ
์ฒ ํต์ฐฐ๋ ฅ์ด ์๋ ์ฝ๋ ์คํ์ผ๊ณผ ํ์ง์๋ง ์ง์ค
StandardJS๋ ๋ณด์ ๊ฒ์ฌ, ํ ์ธํธ ๋ถ์ ๋๋ ์ฌ์ธต ์ ์ ๋ถ์์ ์ง์ํ์ง ์์ต๋๋ค. ๋ฐํ์ ์ทจ์ฝ์ , ์์ ํ์ง ์์ ์ฝ๋ฉ ํจํด ๋๋ ๋ฐ์ดํฐ ํ๋ฆ ๋ฌธ์ ๋ฅผ ํฌ์ฐฉํ์ง ๋ชปํฉ๋๋ค. - ์ ํ ์ธ์ ์์
StandardJS๋ TypeScript์ ํ์ ์์คํ ์ด๋ Flow ์ ๋ ธํ ์ด์ ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ์ปค๋ฎค๋ํฐ ํด์ ํตํด ์ผ๋ถ ์ง์์ด ์ ๊ณต๋์ง๋ง, ๋ณต์กํ ํ์ ๊ธฐ๋ฐ JavaScript ํ๋ก์ ํธ์๋ ์ถฉ๋ถํ ๊ฐ๋ ฅํ์ง ์์ต๋๋ค. - ๊ธฐ์
ํ๊ฒฝ์์๋ ํ์ฅ์ฑ์ด ์ข์ง ์์ต๋๋ค.
๊ท๋ชจ๊ฐ ํฌ๊ณ , ๋ค๊ตญ์ด๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ํ ๊ตฌ์ฑ์ด ๋ค์ํ ์กฐ์ง์์๋ ๋ชจ๋ ํ์ ์ ์ฉ๋๋ ํ์ผ์ ์ธ ์คํ์ผ ๊ท์น์ด ์ข ์ข ๋ฌด๋์ง๋๋ค. ํ์๋ ๋ง์ถค ๊ท์น ์ ์ฉ, ๊ณ์ธตํ๋ ํ๋ฌ๊ทธ์ธ ์ง์ ๋๋ ์ ํ์ ์ฌ์ ์๊ฐ ํ์ํ ์ ์์ง๋ง, StandardJS์์๋ ์ด๋ฌํ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ต๋๋ค. - ๋ ํฐ ์ํ๊ณ์์ Prettier์์ ๊ฐ๋ฑ
StandardJS์๋ ์์ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ง๋ง, ์ด๋ฏธ ์๋ ์์ ๊ธฐ๋ฅ์ Prettier๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์์๋ Prettier์ ์ถฉ๋ํ ์ ์์ต๋๋ค. Prettier์ Prettier๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ ํ์ ์ ์คํ๊ฒ ์ ๋ ฌํ์ง ์์ผ๋ฉด ์คํ์ผ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. - ์ฝ๋ ์ดํด ๋๋ ํ๋ํ ๋
ธ๋ ฅ์ ์ ํฉํ์ง ์์ต๋๋ค.
StandardJS๋ ์ข ์์ฑ ์๊ฐํ, ์ฝ๋ ์ค๋ณต ๊ฐ์ง ๋๋ ์ ์ง ๊ด๋ฆฌ ์งํ๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋ํ ๊ฐ์ฌ, ๊ธฐ์ ๋ถ์ฑ ํ๊ฐ ๋๋ ์์คํ ์ ๋ฐ์ ๋ฆฌํฉํ ๋ง์ ์ํ ๋๊ตฌ๊ฐ ์๋๋๋ค.
StandardJS๋ ๊ตฌ์ฑ ์์ด ์ผ๊ด๋ JavaScript ์คํ์ผ์ ๊ตฌํํ๋ ๋ฐ ํ์ํ ๋๊ตฌ๋ก, ์๊ท๋ชจ ํ๋ก์ ํธ, ๋น ๋ฅธ ํ๋กํ ํ์ ์ ์, ๋๋ ๊ตฌ์ฑ์ด ์๋ ์ฝ๋์ ์ง์คํ๋ ค๋ ํ์ ์ ํฉํฉ๋๋ค. ํ์ง๋ง ํ์ฅ์ฑ์ด๋ ๋ณด์์ฑ์ด ๋ถ์กฑํ๋ฏ๋ก, ๊ธฐ์ , ๋ณด์ ๋๋ ๊ณ ๋๋ก ๋ง์ถคํ๋ ํ๊ฒฝ์์๋ ๋จ๋ ์ ์ ๋ถ์ ์๋ฃจ์ ์ผ๋ก ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค. ์๋ฒฝํ ์ ์ด๋ฅผ ์ํ๋ ๋๋ถ๋ถ์ ์๋ จ๋ ํ์ ์คํ์ผ, ์ ์ฐ์ฑ, ๊ทธ๋ฆฌ๊ณ ํ์ง์ ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด ๋ง์ถคํ ๊ท์น ์ธํธ์ ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ถ ESLint๋ฅผ ์ ํธํ ๊ฒ์ ๋๋ค.
CodeClimate: ์ ์ ๋ถ์ ๋ฐ ํ์ง ์ธก์ ์ ํตํ ์์ง๋์ด๋ง ํต์ฐฐ๋ ฅ
CodeClimate๋ ์์ง๋์ด๋ง ํ์ ์ ์ง๋ณด์์ฑ, ๋ณต์ก์ฑ, ์ค๋ณต ๋ฐ ๊ธฐ์ ๋ถ์ฑ์ ๋ํ ์ ๋์ ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํ๋ ์ ์ ๋ถ์ ๋ฐ ์ฝ๋ ํ์ง ํ๋ซํผ์ ๋๋ค. JavaScript, TypeScript ๋ฐ ๊ธฐํ ์ฌ๋ฌ ์ธ์ด๋ฅผ ์ง์ํ๋ฉฐ, ์ฝ๋ ํ์ง์ ๊ฐ๋ฐ ์ํฌํ๋ก ์งํ ๋ฐ ์กฐ์ง KPI์ ์ง์ ์ฐ๊ณํ์ฌ ๊ฐ๋ฐ์์ ์์ง๋์ด๋ง ๋ฆฌ๋ ๋ชจ๋์๊ฒ ๋์์ด ๋๋๋ก ์ค๊ณ๋์์ต๋๋ค.
์ด ํ๋ซํผ์ ์ ์ ๋ถ์๊ณผ ํ ์ฑ๊ณผ ์งํ๋ฅผ ๊ฒฐํฉํ์ฌ ํ์ง ๊ธฐ์ค, ์ฝ๋ ๊ฒํ ์ํ, ๊ทธ๋ฆฌ๊ณ ์๋, ์ฒ๋ฆฌ๋, ์ดํ๋ฅ ์ ๋ํ ๊ฐ์์ฑ์ ํตํฉํ๊ณ ์ ํ๋ ๊ธฐ์ ์ ์ ํฉํฉ๋๋ค. GitHub, GitLab, Bitbucket๊ณผ ํตํฉ๋์ด ์ธ๋ผ์ธ ์ฝ๋ ๊ฒํ ํผ๋๋ฐฑ, ์ ์ง๋ณด์์ฑ ์ ์, ๊ทธ๋ฆฌ๊ณ ๊ณผ๊ฑฐ ์ถ์ธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- JavaScript, TypeScript ๋ฐ ๊ธฐํ ์ธ์ด์ ๋ํ ์ ์ ์ฝ๋ ๋ถ์
- ๋ณต์ก์ฑ, ์ค๋ณต ๋ฐ ๋ฆฐํ ๊ท์น์ ๋ฐ๋ฅธ ์ ์ง ๊ด๋ฆฌ์ฑ ์ ์
- ํ ๋ฆฌํ์คํธ์ ๋ํ ํ์ง ๊ฒ์ดํธ ๋ฐ ์ธ๋ผ์ธ ํผ๋๋ฐฑ
- ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ์์ง ๋ฐ ๊ท์น ๊ตฌ์ฑ(ESLint, PMD ๋ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํจ)
- GitHub Actions, Travis CI ๋ฐ ๊ธฐํ CI/CD ํ์ดํ๋ผ์ธ๊ณผ์ ํตํฉ
- ํ ์์ฐ์ฑ ๋ฐ ์ฝ๋ ์ํ ์ถ์ธ์ ๋ํ ์์ง๋์ด๋ง ๋ถ์
- ๊ธฐ์ ์ ์ํ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ๋ฐ ์์ฒด ํธ์คํ ์ต์
CodeClimate์ ๋จ์ :
- JavaScript์ ํนํ๋์ง ์์
CodeClimate๋ JavaScript์ TypeScript๋ฅผ ์ง์ํ์ง๋ง ๋ฒ์ฉ ํ๋ซํผESLint, Semgrep, SonarQube์ ๊ฐ์ ๋๊ตฌ์์ ์ ๊ณตํ๋ JavaScript์ ๋ํ ์ฌ์ธต์ ์ธ ์ดํด๊ฐ ๋ถ์กฑํฉ๋๋ค. ํนํ ํ๋ ์์ํฌ๋ณ ๋ฌธ์ (์: React, Vue, Node.js API)์ ๋ํ ์ดํด๊ฐ ๋ถ์กฑํฉ๋๋ค. - ์ ์ ๋ถ์ ์์ง ์ฌ์ฉ์ ์ ์๊ฐ ์ ํ์ ์ด๊ฑฐ๋ ๋ณต์กํฉ๋๋ค.
YAML ๋ฐ ์คํ ์์ค ์์ง์ ํตํด ์ฌ์ฉ์ ์ ์ ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ์ง๋ง ์์ง ๊ด๋ฆฌ ๋ฐ ํ๋(์: eslint, ์ค๋ณต, ๋ณต์ก์ฑ) ํด๋น ์ํคํ ์ฒ์ ์ต์ํ์ง ์์ ๊ฐ๋ฐ์์๊ฒ๋ ๋ณต์กํ๊ณ ์ง๊ด์ ์ด์ง ์์ ์ ์์ต๋๋ค. - ์๋ฏธ ๋ถ์์ด๋ ์ค์ผ ๋ถ์์ด ์์ต๋๋ค.
CodeClimate๋ ๋ฐ์ดํฐ ํ๋ฆ, ์ค์ผ๋ ์ ๋ ฅ ๋๋ ๋น๋๊ธฐ ๋ก์ง์ โโ์ฌ์ธต์ ์ผ๋ก ์ถ์ ํ์ง ์์ต๋๋ค. ๋ณด์ ๋๊ตฌ๊ฐ ์๋๋๋ค ํ์ฌ ํตํฉ ์์ด๋ ์ฃผ์ ์ํ, ์ธ์ฆ ์ค๋ฅ ๋๋ ์์ ํ์ง ์์ ์ญ์ง๋ ฌํ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค. - TypeScript ๊ด๋ จ ๊ธฐ๋ฅ์ ๋ํ ์ง์์ด ์ ํ๋จ
CodeClimate์ TypeScript ์ฒ๋ฆฌ๋ TSC๋ TypeScript ์ง์ ESLint ์ค์ ๊ณผ ๊ฐ์ ๋๊ตฌ์ ๋นํด ์ ํ์ ์ ๋๋ค. ์ ํ, ์ธํฐํ์ด์ค ๋๋ ์๊ฒฉ ๋ชจ๋ ๊ตฌ์ฑ์ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์๋ฒฝํ๊ฒ ํด์ํ์ง ๋ชปํ ์ ์์ต๋๋ค. - ์ ํํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ๋ ค๋ฉด ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค.
"ํ๋ฌ๊ทธ ์ค ํ๋ ์ด"๋ก ํ๋งค๋์ง๋ง ๋ง์ ํ๋ก์ ํธ์์ ๋ค์๊ณผ ๊ฐ์ ์ฌํญ์ด ํ์ํฉ๋๋ค. ๊ด๋ฒ์ํ ํ๋ ๋ ธ์ด์ฆ์ ์คํ์ง๋ฅผ ์ค์ด๋ ๊ฒ์ด ๋ชฉ์ ์ ๋๋ค. ํนํ ๋ชจ๋ ธ๋ฆฌํฌ๋ ๋นํ์ค ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์์ ๊ทธ๋ ์ต๋๋ค. - ๋ฌด๋ฃ ์ฌ์ฉ์ด ์ ํ๋ ์์
์ ์ด์
CodeClimate๋ ๋ฌด๋ฃ ํ๋์์๋ ์ ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ณ ๊ธ ๊ธฐ๋ฅ(๋์๋ณด๋, ์งํ, ๊ณผ๊ฑฐ ๋ถ์, ํ ๋น๊ต)์ ์ฌ์ฉํ๋ ค๋ฉด ์ ๋ฃ ํ๋์ด ํ์ํฉ๋๋ค. - ์ค์๊ฐ IDE ํผ๋๋ฐฑ ์์
๊ฐ๋ฐ์๋ ํธ์ง๊ธฐ์์ ์ค์๊ฐ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์์ต๋๋ค. CodeClimate๋ ํ ๋ฆฌํ์คํธ ๋ฐ CI ๋จ๊ณ์์ ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ ๋ฐ๊ฒฌ์ด ์ง์ฐ๋๊ณ ํผ๋๋ฐฑ ๋ฃจํ๊ฐ ์ง์ฐ๋ ์ ์์ต๋๋ค.
CodeClimate๋ ์ ์ ๋ถ์์ ์ฝ๋ ํ์ง ์งํ, ํ ์ฑ๊ณผ ๋ฐ ์์ง๋์ด๋ง ๋ชฉํ์ ์ฐ๊ฒฐํ๋ ค๋ ์กฐ์ง์ ํจ๊ณผ์ ์ธ ํ๋ซํผ์ ๋๋ค. ํํํ ๊ณ ์์ค ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํ๊ณ PR ์ํฌํ๋ก์ ์ํํ๊ฒ ํตํฉ๋ฉ๋๋ค. ํ์ง๋ง JavaScript ๊ด๋ จ ๋ณด์, ์๋ฏธ๋ก ์ ๋ถ์ ๋๋ ์ํคํ ์ฒ ๋ถ์์ด ๋์ฑ ์ฌ๋ ์๊ฒ ํ์ํ ํ์ ๊ฒฝ์ฐ, CodeClimate๋ ESLint, Semgrep, Snyk Code์ ๊ฐ์ ๋๊ตฌ์ ํจ๊ป ๊ด๋ฒ์ํ ํด์ฒด์ธ์ ์ผ๋ถ๋ก ์ฌ์ฉ๋์ด ํฌ๊ด์ ์ธ ๋ถ์์ ์ ๊ณตํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
Coverity(Synopsys): ๋ณด์์ ์ด์ ์ ๋ง์ถ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ ์ ๋ถ์
์๋์์ค์์ ๊ฐ๋ฐํ Coverity๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ ๋ค์ํ ์ธ์ด์์ ์ฝ๋ ํ์ง ๋ฌธ์ , ๋ ผ๋ฆฌ์ ๊ฒฐํจ, ๋ณด์ ์ทจ์ฝ์ ์ ํ์งํ๋๋ก ์ค๊ณ๋ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ ์คํธ(SAST) ๋๊ตฌ์ ๋๋ค. ์๋์์ค ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ์ ํ๊ตฐ์ ํต์ฌ ์์๋ก, ๊ธ์ต, ์๋ฃ, ๊ตญ๋ฐฉ ๋ฑ ๊ท์ ๊ฐ ์๊ฒฉํ ์ฐ์ ์์ ์์ ํ SDLC(์ํํธ์จ์ด ๊ฐ๋ฐ ์ฃผ๊ธฐ)๋ฅผ ์ง์ํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
Coverity๋ ์ฝ๋์ ๋ํ ์ฌ์ธต์ ์ธ ์๋ฏธ ๋ถ์์ ์ํํ์ฌ null ์ญ์ฐธ์กฐ, ๋ฆฌ์์ค ๋์, ๊ฒ์ฆ๋์ง ์์ ์ ๋ ฅ, ์์ ํ์ง ์์ API ์ฌ์ฉ ๋ฑ์ ๋ฌธ์ ๋ฅผ ํ์ ํฉ๋๋ค. JavaScript์ ๊ฒฝ์ฐ, ์๋ฒ ์ธก(Node.js) ๋ฐ ํ๋ฐํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ์ง์ํฉ๋๋ค. Coverity๋ CI/CD ํ์ดํ๋ผ์ธ๊ณผ ํตํฉ๋์ด ๋๊ท๋ชจ ํ์ ์ํ ์์ธ ๋์๋ณด๋, ๊ท์ ์ค์ ์ถ์ ๋ฐ ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- JavaScript, TypeScript ๋ฐ ๊ธฐํ ์ฃผ์ ์ธ์ด์ ๋ํ ์ฌ์ธต์ ์ ์ ๋ถ์
- ๋ณด์ ์ทจ์ฝ์ , ๋ ผ๋ฆฌ ๋ฒ๊ทธ ๋ฐ ์ฝ๋ฉ ์ํฐ ํจํด ๊ฐ์ง
- OWASP, CWE ๋ฐ CERT ๊ท์ ์ค์ ๋ณด๊ณ
- GitHub, GitLab, Azure DevOps, Jenkins ๋ฑ๊ณผ์ ํตํฉ
- ํ ๋ฆฌํ์คํธ ๋ฐ ํ์ดํ๋ผ์ธ์์์ ์ ์ฑ ์ํ ๋ฐ ๋ฌธ์ ์ถ์
- ์ํ ์ ์, ์์ ์ง์นจ ๋ฐ ๊ฐ์ฌ ์ถ์ ๊ธฐ๋ฅ์ด ์๋ ์ํฐํ๋ผ์ด์ฆ ๋์๋ณด๋
- ๋ชจ๋ ธ๋ ํฌ ๋ฐ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ง์ํฉ๋๋ค.
Coverity์ ๋จ์ :
- ์ฃผ๋ก ๊ธฐ์
์ฉ์ผ๋ก ์ค๊ณ๋์์ต๋๋ค
Coverity๋ ๋๊ท๋ชจ์ ๊ท์ ๋์ ์กฐ์ง์ ์ํด ์ค๊ณ๋์์ต๋๋ค. ๊ฐ๋ฒผ์ด ๋ฆฐํ ์ด๋ ์ค์๊ฐ ํผ๋๋ฐฑ์ ์ํ๋ ์๊ท๋ชจ ํ์ด๋ ์คํ์์ค ํ๋ก์ ํธ์๋ ๊ณผํ ์ ์์ต๋๋ค. - ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ๋ผ์ด์ผ์ฑ์ด ๋ณต์กํจ
Coverity์ ์์ ๋ชจ๋ธ์ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ๊ธฐ์ ๊ตฌ๋งค์์๊ฒ ๋ง์ถฐ์ ธ ์์ต๋๋ค. ๊ฐ๊ฒฉ ์ฑ ์ ์ด ํฌ๋ช ํ์ง ์์ผ๋ฉฐ, ๊ตฌ์ถํ๋ ค๋ฉด ์ ์ฉ ์์ฐ๊ณผ ๋ฒ์ ์น์ธ์ด ํ์ํ ์ ์์ต๋๋ค. - ๊ฐํ๋ฅธ ํ์ต ๊ณก์ ๊ณผ ์ค์ ๋ณต์ก์ฑ
๊ตฌ์ฑ, ํ๊ฒฝ ์ค์ ๋ฐ ํตํฉ์๋ ์๋นํ ๋ ธ๋ ฅ์ด ํ์ํ๋ฉฐ, ํนํ Java ๋๋ C/C++๊ฐ ์๋ ์ํ๊ณ์ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. JavaScript ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ํด ๋ง์ถค ์กฐ์ ์ด ํ์ํ ์ ์์ต๋๋ค. - ๋๊ท๋ชจ ํ๋ก์ ํธ์์์ ๋๋ฆฐ ์ค์บ ์๊ฐ
Coverity๋ ๋ถ์์ ์ฌ๋ ๋๋ฌธ์ ๊ณ์ฐ๋์ด ๋ง์ ๋๊ท๋ชจ JavaScript/TypeScript ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ๊ฒ์ฌ ์๋๊ฐ ๋๋ ค์ง ์ ์์ผ๋ฉฐ, ํนํ React๋ Next.js์ ๊ฐ์ ์ต์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. - ์ ํ๋ ์ต์ JavaScript ์ํ๊ณ ์ธ์
Coverity๋ JavaScript๋ฅผ ์ง์ํ์ง๋ง ๋ฐ์ฝ๋ ์ดํฐ, ์ ํ์ ์ฒด์ด๋, ๋์ ๊ฐ์ ธ์ค๊ธฐ์ ๊ฐ์ ์ต์ ES ๊ธฐ๋ฅ์ด๋ Vue, Svelte, Angular์ ๊ฐ์ ํ๋ ์์ํฌ์์ ํํ ๋ณผ ์ ์๋ ์ฌ์ธํ ํจํด์ ์ดํดํ๋ ๋ฐ๋ ๋๋ฆด ์ ์์ต๋๋ค. - ์์, ์คํ์ผ ๋๋ ๋ชจ๋ฒ ์ฌ๋ก ๋ฆฐํ
์์
ESLint๋ Prettier์ ๊ฐ์ ๋๊ตฌ์ ๋ฌ๋ฆฌ Coverity๋ ๋ฌธ์ฒด ๊ท์น์ ์ํํ์ง ์๋๋ค. ์ฝ๋ ์ผ๊ด์ฑ์ด๋ ๊ฐ๋ ์ฑ ๊ฐํ๋ฅผ ์ํ ์ผ์์ ์ธ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ๋์ฒดํ ์๋ ์์ต๋๋ค. - IDE ๊ธฐ๋ฐ ํผ๋๋ฐฑ ์์
๊ฐ๋ฐ์๋ VSCode๋ WebStorm๊ณผ ๊ฐ์ ํธ์ง๊ธฐ์์ ๊ฒฐ๊ณผ๋ฅผ ์ง์ ๋ณผ ์ ์์ต๋๋ค. ๋ฌธ์ ๋ฐ๊ฒฌ์ ์ค์บ ์คํ์ด ์ง์ฐ๋จ๋ค๋ฅธ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋น ๋ฅธ ๋ฐ๋ณต ์์ ๊ณผ ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
Coverity๋ ์ํฐํ๋ผ์ด์ฆ JavaScript ๋ณด์ ๋ฐ ๊ฒฐํจ ๋ฐฉ์ง๋ฅผ ์ํ ๊ฐ๋ ฅํ ์ ์ ๋ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ํนํ ๊ท์ ์ค์ ๋ฐ ์ํ ๊ด๋ฆฌ๊ฐ ์ค์ํ ํ๊ฒฝ์์ ์ ์ฉํฉ๋๋ค. ํ์ง๋ง ESLint, Semgrep, Snyk Code์ ๊ฐ์ ๊ฐ๋ฐ์ ์ค์ฌ ๋๊ตฌ๋ฅผ ๋์ฒดํ ์๋ ์์ผ๋ฉฐ, ๋ฆฌ์์ค, ๊ต์ก ๋ฐ ์ธํ๋ผ ์ธก๋ฉด์์ ์๋นํ ํฌ์๊ฐ ํ์ํฉ๋๋ค. Coverity๋ ๊ณ์ธตํ๋ AppSec ์ ๋ต์ ๋ฐฑ์คํฑ์ผ๋ก ๊ฐ์ฅ ํจ๊ณผ์ ์ผ๋ก ํ์ฉ๋๋ฉฐ, ์ต์ JavaScript ํ์ดํ๋ผ์ธ์์ ๋ฏผ์ฒฉํ ๋๊ตฌ๋ฅผ ๋ณด์ํฉ๋๋ค.
Veracode ์ ์ ๋ถ์: ์ํฐํ๋ผ์ด์ฆ๊ธ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์์ ์ํ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ SAST
Veracode Static Analysis๋ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ ์คํธ(SAST) ์๋ฃจ์ ์ผ๋ก, ์กฐ์ง์ด ์ ์ฒด ๋น๋ ํ๊ฒฝ์ ์ ๊ทผํ์ง ์๊ณ ๋ ์์ค ์ฝ๋, ๋ฐ์ด๋๋ฆฌ ๋ฐ ๋ฐ์ดํธ์ฝ๋์ ์ทจ์ฝ์ ์ ์๋ณํ๊ณ ํด๊ฒฐํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. JavaScript ๋ฐ TypeScript๋ฅผ ํฌํจํ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํ๋ฉฐ, ์์ ํ SDLC ํตํฉ, ๊ฑฐ๋ฒ๋์ค ๋ฐ ๊ท์ ์ค์๋ฅผ ์ํด ๋๊ธฐ์ ์์ ๋๋ฆฌ ์ฑํ๋๊ณ ์์ต๋๋ค.
Veracode๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์๋ ๊ฒ์ฌ๋ฅผ ์ํํ์ฌ ์ฃผ์ ์ทจ์ฝ์ , ์์ ํ์ง ์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์๋ชป๋ ์ธ์ฆ ๋ฐ ๊ธฐํ ๊ณ ์ํ ๋ณด์ ๋ฌธ์ ์ ๊ฐ์ ์ทจ์ฝ์ ์ ํ์งํฉ๋๋ค. CI/CD ํ์ดํ๋ผ์ธ, ๋ฒ์ ์ ์ด ์์คํ ๋ฐ DevOps ๋๊ตฌ์ ํตํฉ๋๋ฉฐ, ๊ฐ๋ฐ์์๊ฒ ๊ฐ ์ทจ์ฝ์ ๊ณผ ์ง์ ์ฐ๊ฒฐ๋ ์์ ์ง์นจ์ ์ ๊ณตํฉ๋๋ค. JavaScript ์ง์์ ํ๋ฐํธ์๋ ๋ฐ ๋ฐฑ์๋ ํ๋ ์์ํฌ(์: Node.js) ๋ชจ๋์ ์ ์ฉ๋ฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- JavaScript, TypeScript ๋ฐ ๊ธฐํ 20๊ฐ ์ด์์ ์ธ์ด์ ๋ํ ์ ์ ๋ถ์
- ์ฝ๋ ๋ฐ ํ๋ ์์ํฌ์์ OWASP Top 10 ๋ฐ CWE ์ทจ์ฝ์ ๊ฐ์ง
- ์ ์ํ ์จ๋ณด๋ฉ ๋ฐ ์ค์ ๊ด๋ฆฌ๋ฅผ ์ํ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ์ค์บ๋
- ์ ์ฑ ์ํ ๋์๋ณด๋ ๋ฐ ๊ท์ ์ค์ ์ถ์ (์: PCI-DSS, HIPAA, ISO)
- ์์ธํ ์์ ์ง์นจ, ์ํ ๋ฑ๊ธ ๋ฐ ๋ฌธ์ ๋ถ๋ฅ
- GitHub, Azure DevOps, Jenkins, GitLab, Bitbucket ๋ฐ Jira์์ ์ํํ ํตํฉ
- ์์ ๋ฐ ๊ฐ์ฌ ์ดํด ๊ด๊ณ์๋ฅผ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ์ธ ๋ณด๊ณ
Veracode ์ ์ ๋ถ์์ ๋จ์ :
- ์ฃผ๋ก ์ฝ๋ ํ์ง์ด ์๋ ๋ณด์์ ์ค์ ์ ๋ก๋๋ค.
Veracode๋ ์คํ์ผ ์ผ๊ด์ฑ, ๋ชจ๋ฒ ์ฌ๋ก ๋๋ ์ํคํ ์ฒ ํจํด์ ๊ฐ์ ํ์ง ์์ต๋๋ค. ์ฝ๋ ๋์, ์์ ๋ฌธ์ ๋๋ ๋ณด์๊ณผ ๊ด๋ จ ์๋ ๊ธฐ์ ๋ถ์ฑ๋ฅผ ํฌ์ฐฉํ์ง ๋ชปํฉ๋๋ค. - IDE ๊ธฐ๋ฐ ์ค์บ๋ ๊ฒฝํ ์์
Veracode Static Analysis๋ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ด๋ฉฐ ์ค์๊ฐ ํธ์ง์ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ง ์์ต๋๋ค (์: VSCode ๋๋ WebStorm์์). ๊ฐ๋ฐ์๋ CI ๋๋ ์๋ ์ ๋ก๋๋ฅผ ํตํด ์ค์บ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. - ์ ํ๋ JavaScript ๊ด๋ จ ์ฌ์ฉ์ ์ ์
Veracode๋ JavaScript๋ฅผ ์ง์ํ์ง๋ง, JavaScript ํน์ ํ๋ ์์ํฌ(์: React, Vue, Svelte)์ ๋ํ ์ฌ์ธต์ ์ธ ์ฌ์ฉ์ ์ ์๊ฐ ๋ถ์กฑํฉ๋๋ค. ์ฌ์ฉ์ ์ ์ ๊ท์น ์กฐ์ ์ Semgrep์ด๋ CodeQL๊ณผ ๊ฐ์ ๋๊ตฌ๋ณด๋ค ์ธ๋ถ์ ์ด์ง ์์ต๋๋ค. - ์ค์บ์ ์ํด์๋ ์ ์ฒด ๋น๋ ๋๋ ํจํค์ง ์ฝ๋๊ฐ ํ์ํฉ๋๋ค.
ํจ๊ณผ์ ์ธ ์ค์บ์ ์ํด Veracode๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฒ๋ค, ๋น๋ ๋๋ ์์ถ๋ ์ฝ๋๋ฅผ ์๊ตฌํฉ๋๋ค. ์ด๋ ํนํ ์ฆ๋ถ์ ๋ณ๊ฒฝ์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ ํ๋ฐํธ์๋ ์ค์ฌ ์ํฌํ๋ก์์ ํผ๋๋ฐฑ ๋ฃจํ๋ฅผ ์ง์ฐ์ํฌ ์ ์์ต๋๋ค. - ์ต์ JavaScript ๊ฐ๋ฐ์ ์ํฌํ๋ก์ ๋ง๊ฒ ์ค๊ณ๋์ง ์์์ต๋๋ค.
Veracode๋ ๋ฆฐํ , ์์ ์ง์ ๋๋ ํ ์คํธ ๊ธฐ๋ฐ ๊ท์น์ ์ง์ํ์ง ์์ต๋๋ค. ESLint๋ Prettier๋ฅผ ๋์ฒดํ ์ ์์ผ๋ฉฐ, ๋น ๋ฅด๊ฒ ์งํ๋๋ ํผ๋๋ฐฑ ๊ธฐ๋ฐ ๊ฐ๋ฐ ๋ฐฉ์์ ์ฝ๊ฒ ํตํฉ๋์ง ์์ต๋๋ค. - ๊ฑฐ์ง ์์ฑ ๋ฐ ์ ํ๋ ํฌ๋ช
์ฑ
Veracode๋ ์๋ ค์ง ์ทจ์ฝ์ ์ ์๋ณํ๋ ๋ฐ ํจ๊ณผ์ ์ด์ง๋ง ๊ฐ์ ์ฑํนํ ๋์จํ๊ฒ ์ ๋ ฅ๋ ์ฝ๋๋ ๋น๋๊ธฐ ์ฝ๋์ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ๊ฐ๋ฐ์๋ ๋ฌธ์ ๊ฐ ์ด๋ป๊ฒ ๊ฐ์ง๋๋์ง ํ์ ํ๊ธฐ ์ด๋ ค์ ๋ถ๋ฅ๊ฐ ๋์ฑ ์ด๋ ค์์ง๋๋ค. - ์์
์ ๋ผ์ด์ ์ค์ ๊ณต๊ธ์
์ฒด ์ ๊ธ์ด ํ์ํฉ๋๋ค.
๋ฒ ๋ผ์ฝ๋๋ ํ๋ฆฌ๋ฏธ์, ์ํฐํ๋ผ์ด์ฆ ์ ํ๋น์ฉ, ๋ผ์ด์ ์ค ๊ตฌ์กฐ, ์์ฒด ํธ์คํ ์คํ์์ค ๋์ ์๋ฃจ์ ์ ๋ถ์กฑ ๋ฑ์ผ๋ก ์ธํด ์๊ท๋ชจ ํ์ด๋ ์คํ์์ค ํ๋ก์ ํธ์๋ ์ ํฉํ์ง ์์ต๋๋ค.
Veracode ์ ์ ๋ถ์์ ๊ฐ๋ ฅํ๊ณ ๊ธฐ์ ์ค์ฌ์ ์ธ ๋ณด์ ์ค์บ๋๋ก, ํนํ ๊ท์ ์ค์, ์ํ ๋ณด๊ณ ๋ฐ ์ค์ ์ง์ค์ ์ ์ฑ ์ํ์ด ํ์ํ JavaScript ์ฝ๋๋ฒ ์ด์ค์์ ๊ณ ์ํ ์ทจ์ฝ์ ์ ์๋ณํ๋ ๋ฐ ํ์ํฉ๋๋ค. ํ์ง๋ง ๊ฐ๋ฐ์ ์์ฐ์ฑ, ์ค์๊ฐ ๋ฐ๋ณต ์์ ๋๋ ํฌ๊ด์ ์ธ ์ฝ๋ ์ํ ์ ์ง๋ฅผ ์ํด ์ค๊ณ๋ ๊ฒ์ ์๋๋๋ค. ์ ์ฒด ์คํํธ๋ผ ๋ถ์์ ์ํด์๋ Veracode๋ฅผ ESLint(ํ์ง ํฅ์), Prettier(์คํ์ผ ํฅ์), Semgrep ๋๋ CodeQL(์ํฉ ์ธ์ ๋ณด์ ๊ท์น ๋ฐ DevSecOps ํตํฉ)๊ณผ ๊ฐ์ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค.
JS ์ ์ ๋ถ์ ๋๊ตฌ ํ๊ฒฝ ํ์
์ต์ JavaScript ์ํ๊ณ๋ ํ๋ถํ ๋๊ตฌ๋ฅผ ๊ฐ์ถ๊ณ ์์ด ๊ฐ๋ฐ์์๊ฒ ์ ์ํ ์์ ์์ ๋ถํฐ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ทจ์ฝ์ ํ์ง๊น์ง ๋ชจ๋ ๊ฒ์ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง ๋จ์ผ ๋๊ตฌ๋ง์ผ๋ก ์ฝ๋ ํ์ง, ๋ณด์, ์ ์ง ๊ด๋ฆฌ์ ๋ชจ๋ ์ธก๋ฉด์ ํด๊ฒฐํ ์๋ ์์ต๋๋ค. ์ง์ ํ ํ์ ์ ์ ํ ๋๊ตฌ๋ฅผ ์กฐํฉํ์ฌ ์ฌ์ฉํ๊ณ ์กฐ์ง์ ๋ณต์ก์ฑ, ํ ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ ์ฅ๊ธฐ์ ์ธ ๋ชฉํ์ ๋ง๋ ๋๊ตฌ๋ฅผ ์ ํํ๋ ๋ฐ ์์ต๋๋ค.
ESLint, Prettier, TypeScript์ ๊ฐ์ ๊ธฐ๋ณธ ๋๊ตฌ๋ ๊ฐ๋ฐ์ ์์ค์์ ์ ํ์ฑ, ์ผ๊ด์ฑ, ๋ช ํ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋ณด์์ ์ํด Semgrep, Snyk Code, CodeQL์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ค์๊ฐ ํผ๋๋ฐฑ๊ณผ ์ฌ์ธต์ ์ธ ์ทจ์ฝ์ ํ์ง ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์คํ์ผ๊ณผ ๋จ์์ฑ์ ์ํด StandardJS์ ๊ฐ์ ์ต์ ์ ๋น ๋ฅด๊ณ ๊ฐ๊ฒฐํ ํ๋ก์ ํธ์์ ์ฌ์ ํ ํจ๊ณผ์ ์ ๋๋ค.
ํ์ง๋ง ์ฝ๋๋ฒ ์ด์ค์ ๋น์ฆ๋์ค๊ฐ ํ์ฅ๋จ์ ๋ฐ๋ผ, ํนํ ๊ท์ ๋๊ฑฐ๋ ๊ณ ์ํ ํ๊ฒฝ์์๋ ์ฝ๋ ์ํคํ ์ฒ, ์ข ์์ฑ ๋ฐ ๋์์ ๋ํ ํฌ๊ด์ ์ธ ํต์ฐฐ๋ ฅ์ ํ์์ฑ์ด ๋์ฑ ์ค์ํด์ง๋๋ค. ๋ฐ๋ก ์ด๋ฌํ ๊ฒฝ์ฐ์ ๋ค์๊ณผ ๊ฐ์ ๋๊ตฌ๊ฐ ํ์ํฉ๋๋ค. SMART TS XL ๋ค๋ฅด๋ค.
SMART TS XL ์ํฐํ๋ผ์ด์ฆ JS ํ๊ฒฝ์์ ์ฃผ๋ชฉํ ๋งํ ์ฌํญ
๋ง์ ๋๊ตฌ๊ฐ ๊ฐ๋ณ ํ์ผ์ด๋ ์์ ๋ชจ๋์ ์ด์ ์ ๋ง์ถ๋ ๋ฐ๋ฉด, SMART TS XL ๊ธฐ์ ์์ง๋์ด๋ง ํ์๊ฒ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ์ ๋ํ ์ ์ฒด์ ์ธ ๊ด์ ์ ์ ๊ณตํ ์ ์๋ ๋ ๋ณด์ ์ธ ์ ์ง๋ฅผ ๊ฐ์ถ๊ณ ์์ต๋๋ค. ์๋๋ COBOL๊ณผ ๊ฐ์ ๋ณต์กํ ๋ ๊ฑฐ์ ์์คํ ์ ๋ถ์ํ๋๋ก ์ค๊ณ๋์์ง๋ง, SMART TS XL ์ต์ JavaScript์ ๋ค๊ตญ์ด ์ํ๊ณ๋ฅผ ์ง์ํ๋๋ก ๋ฐ์ ํ์ฌ ๋๋ถ๋ถ์ ๋ฆฐํฐ๋ ๋ณด์ ์ค์บ๋๊ฐ ์ ๋๋ก ๊ธฐ๋ฅํ์ง ๋ชปํ๋ ์์ญ์์๋ ๊ฐ์น๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ธฐ์ ํ์ด ์ฑํํ๋ ์ฃผ์ ์ด์ SMART TS XL:
- ์์คํ ์ ์ฒด ์ ์ด ๋ฐ ๋ฐ์ดํฐ ํ๋ฆ ๊ฐ์์ฑ๋ชจ๋ํ JS ์ฝ๋๋ฒ ์ด์ค ์ ๋ฐ์ ๊ฑธ์ณ
- ํฌ๋ก์ค ํ๋ซํผ ํต์ฐฐ๋ ฅ (๋ ๊ฑฐ์ + ๋ชจ๋), ํ์ด๋ธ๋ฆฌ๋ ์คํ ๋ฐ ๋์งํธ ๋ณํ์ ์ด์์
- ์ํฐํ๋ผ์ด์ฆ๊ธ ๋ฉํ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง, ์ํฅ ๋ถ์ ๋ฐ ๋ ผ๋ฆฌ ์ดํด
- ๋๊ท๋ชจ ๋ชจ๋ ธ๋ ํฌ ๋ฐ ๋ถ์ฐ ํ์ผ๋ก ํ์ฅ ๊ฐ๋ฅ, ํ์ ๋ถ์ ํ๊ฒฝ
- ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ๋ณด์ํฉ๋๋คESLint, Prettier ๋ฑ์ด ๋จ๊ธด ๊ฐ์์ฑ ๋ฐ ์ํคํ ์ฒ ๊ฒฉ์ฐจ๋ฅผ ๋ฉ์๋๋ค.
๋ฆฐํ ๋ฐ ์ทจ์ฝ์ฑ ๊ฒ์ฌ๋ฅผ ๋์ด์๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ์กฐ์ง์ ๊ฒฝ์ฐ SMART TS XL ๋ณต์ก์ฑ์ ๊ด๋ฆฌํ๊ณ , ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ํ๋ํํ๊ณ , ์์ ๊ฐ์ ๊ฐ์ง๊ณ ์ํคํ ์ฒ ๊ด๋ จ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ํ์ํ ๋ช ํ์ฑ๊ณผ ์ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ ์ ํ JavaScript ์ ์ ๋ถ์ ์คํ์ ์ ํํ๋ ๊ฒ์ ๋ ์ด์ ๋จ์ํ ์ฝ๋ ์ ํ์ฑ๋ง์ ์๋ฏธํ๋ ๊ฒ์ด ์๋๋ผ ๊ฑฐ๋ฒ๋์ค, ์ํ ๊ฐ์, ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ, ๊ทธ๋ฆฌ๊ณ ํ ์๋๊น์ง ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์๊ท๋ชจ ํ์ ๊ฐ๋ณ๊ณ ๊ฐ๋ฐ์ ์ค์ฌ์ ์ธ ๋๊ตฌ์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค. ํ์ง๋ง ์ค์ํ๊ณ ๋ฐฉ๋ํ ์์ ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๊ฑฐ๋ ์ฌ๋ฌ ์ธ๋์ ๊ฑธ์น ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ์ ์ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ ๋๊ตฌ๊ฐ ์ ํฉํฉ๋๋ค. SMART TS XL ์์ง๋์ด๋ง ๋ผ์ดํ์ฌ์ดํด ์ ๋ฐ์ ๊ฑธ์ณ ํ์ ์ ์ด๋๊ณ , ์ฅ๊ธฐ์ ์ง์ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฅํ๋ฉฐ, ์์ ํ๊ณ ๊ณ ํ์ง์ ์ํํธ์จ์ด๋ฅผ ํ์ฅํ ์ ์๋ ์ ๋ต์ ์ฌ์ธต์ฑ์ ์ ๊ณตํฉ๋๋ค.