์๋ํ๋ ์ ๋ฐ์ดํธ์ ๋ณด์ ์ค์บ๋์ ํตํด ํ๋ก ํธ์๋ ์์กด์ฑ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ์ฌ ๊ฒฌ๊ณ ํ๊ณ ์์ ํ๋ฉฐ ํจ์จ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
ํ๋ก ํธ์๋ ์์กด์ฑ ๊ด๋ฆฌ: ์๋ํ๋ ์ ๋ฐ์ดํธ ๋ฐ ๋ณด์ ์ค์บ๋
๋์์์ด ์งํํ๋ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์ ํ๋ก ํธ์๋ ์์กด์ฑ ๊ด๋ฆฌ๋ ๊ฒฌ๊ณ ํ๊ณ ์์ ํ๋ฉฐ ํจ์จ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํ ์ธก๋ฉด์ ๋๋ค. ํ๋ ํ๋ก ํธ์๋ ํ๋ก์ ํธ๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ์ ํฌ๊ฒ ์์กดํ๋ฉฐ, ์ด๋ ์ข ์ข ๋ณต์กํ ์์กด์ฑ ์น์ ์ด๋ํฉ๋๋ค. ์ด๋ฌํ ๋ณต์ก์ฑ์ผ๋ก ์ธํด ์ํ์ ์ํํ๊ณ ์ฅ๊ธฐ์ ์ธ ์ ์ง๋ณด์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์๋ํ๋ ์ ๋ฐ์ดํธ์ ์๊ฒฉํ ๋ณด์ ์ค์บ๋์ ํตํฉํ๋ ๊ฐ๋ ฅํ ์์กด์ฑ ๊ด๋ฆฌ ์ ๋ต์ด ํ์ํฉ๋๋ค.
ํ๋ก ํธ์๋ ์์กด์ฑ ๊ด๋ฆฌ๊ฐ ์ค์ํ ์ด์
ํจ๊ณผ์ ์ธ ์์กด์ฑ ๊ด๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ์๋ง์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ๋ณด์ ํฅ์: ์์กด์ฑ์๋ ์ ์์ ์ธ ๊ณต๊ฒฉ์๊ฐ ์ ์ฉํ ์ ์๋ ์ทจ์ฝ์ ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์ ๊ธฐ์ ์ธ ๋ณด์ ์ค์บ๋๊ณผ ์๊ธฐ์ ์ ํ ์ ๋ฐ์ดํธ๋ ์ด๋ฌํ ์ทจ์ฝ์ ์ ํจ์นํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์์ ์ฑ ํฅ์: ์์กด์ฑ์ ์ ๋ฐ์ดํธํ๋ฉด ๋ฒ๊ทธ๋ฅผ ์์ ํ๊ณ ์ฑ๋ฅ์ ๊ฐ์ ํ์ฌ ๋ ์์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ ์๊ฐ ๋จ์ถ: ์ ๊ด๋ฆฌ๋ ์์กด์ฑ์ ํ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ๋ฐํด๋ฅผ ๋ค์ ๋ฐ๋ช ํ๋ ๋์ ํต์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ์ง์คํ ์ ์์ต๋๋ค.
- ์ ์ง๋ณด์ ๋จ์ํ: ์ ๊ด๋ฆฌ๋ ์์กด์ฑ ํธ๋ฆฌ๋ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ดํดํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด, ๋ธ๋ ์ดํน ์ฒด์ธ์ง(breaking changes)๋ฅผ ๋์ ํ ์ํ์ ์ค์ ๋๋ค.
- ๊ท์ ์ค์: ๋ง์ ์กฐ์ง์๋ ์๊ฒฉํ ๋ณด์ ๋ฐ ๊ท์ ์ค์ ์๊ตฌ์ฌํญ์ด ์์ต๋๋ค. ์ ์ ํ ์์กด์ฑ ๊ด๋ฆฌ๋ ์ด๋ฌํ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
ํ๋ก ํธ์๋ ์์กด์ฑ ์ดํดํ๊ธฐ
ํ๋ก ํธ์๋ ์์กด์ฑ์ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ฅํ ์ ์์ต๋๋ค:
- ์ง์ ์์กด์ฑ(Direct Dependencies): ํ๋ก์ ํธ๊ฐ ์ง์ ์์กดํ๋ ํจํค์ง๋ก, `package.json` ํ์ผ์ ๋ช ์๋ฉ๋๋ค.
- ์ ์ด ์์กด์ฑ(Transitive Dependencies): ์ง์ ์์กด์ฑ์ด ์์กดํ๋ ํจํค์ง์ ๋๋ค. ์ด๋ค์ ์์กด์ฑ ํธ๋ฆฌ๋ฅผ ํ์ฑํฉ๋๋ค.
์ง์ ์์กด์ฑ๊ณผ ์ ์ด ์์กด์ฑ์ ๋ชจ๋ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ ์ด ์์กด์ฑ์ ์ทจ์ฝ์ ์ ์ง์ ์์กด์ฑ์ ์ทจ์ฝ์ ๋งํผ์ด๋ ์น๋ช ์ ์ผ ์ ์์ต๋๋ค.
ํ๋ก ํธ์๋ ์์กด์ฑ ๊ด๋ฆฌ ๋๊ตฌ
ํ๋ก ํธ์๋ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ด ๋๋ ์ฌ๋ฌ ํจํค์ง ๋งค๋์ ๊ฐ ์์ต๋๋ค. ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๊ฒ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
npm (Node Package Manager)
npm์ Node.js์ ๊ธฐ๋ณธ ํจํค์ง ๋งค๋์ ์ด๋ฉฐ ํ๋ก ํธ์๋ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. `package.json` ํ์ผ์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ ์์กด์ฑ์ ์ ์ํ๊ณ ๊ฐ๋ฐ์๊ฐ ๋ช ๋ น์ค์ ์ฌ์ฉํ์ฌ ํจํค์ง๋ฅผ ์ค์น, ์ ๋ฐ์ดํธ ๋ฐ ์ ๊ฑฐํ ์ ์๋๋ก ํฉ๋๋ค.
์์: npm์ ์ฌ์ฉํ์ฌ ํจํค์ง ์ค์นํ๊ธฐ
npm install lodash
์์: npm์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํจํค์ง ์ ๋ฐ์ดํธํ๊ธฐ
npm update
npm์ ๋ํ ํจํค์ง ๋ฒ์ ๊ด๋ฆฌ, ์คํฌ๋ฆฝํธ ์คํ, npm ๋ ์ง์คํธ๋ฆฌ์ ํจํค์ง ๊ฒ์ ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ v3 ์ด์ ์ npm ๋ฒ์ ์ ์์กด์ฑ ํด๊ฒฐ์ ๋ฌธ์ ๊ฐ ์์ด ์ค์ฒฉ๋ ์์กด์ฑ ํธ๋ฆฌ์ ์ ์ฌ์ ์ธ ์ค๋ณต์ ์ด๋ํ์ต๋๋ค. ์ต์ ๋ฒ์ ์์๋ ์์กด์ฑ ํด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ์ ๋์์ต๋๋ค.
Yarn
Yarn์ npm์ ๋ช ๊ฐ์ง ๋จ์ ์ ํด๊ฒฐํ ๋ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ํจํค์ง ๋งค๋์ ์ ๋๋ค. ๋ ๋น ๋ฅธ ์ค์น ์๊ฐ, ๊ฒฐ์ ๋ก ์ ์์กด์ฑ ํด๊ฒฐ ๋ฐ ํฅ์๋ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. Yarn์ ๋กํ์ผ(`yarn.lock`)์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ๊ฒฝ์์๋ ๋์ผํ ์์กด์ฑ์ด ์ค์น๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์: Yarn์ ์ฌ์ฉํ์ฌ ํจํค์ง ์ค์นํ๊ธฐ
yarn add lodash
์์: Yarn์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํจํค์ง ์ ๋ฐ์ดํธํ๊ธฐ
yarn upgrade
Yarn์ ๊ฒฐ์ ๋ก ์ ์์กด์ฑ ํด๊ฒฐ์ ๋ถ์ผ์น๋ฅผ ๋ฐฉ์งํ๊ณ ํ๋ก์ ํธ์์ ์์ ํ๋ ๋ชจ๋ ์ฌ๋์ด ๋์ผํ ๋ฒ์ ์ ์์กด์ฑ์ ์ฌ์ฉํ๋๋ก ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. Yarn์ ๋ํ ์คํ๋ผ์ธ ์บ์ฑ ๋ฐ ๋ณ๋ ฌ ์ค์น์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
pnpm (Performant npm)
pnpm์ ์๋์ ๋์คํฌ ๊ณต๊ฐ ํจ์จ์ฑ์ ์ค์ ์ ๋ ์ต์ ํจํค์ง ๋งค๋์ ์ ๋๋ค. ์ฝํ ์ธ ์ฃผ์ ์ง์ ํ์ผ ์์คํ ์ ์ฌ์ฉํ์ฌ ์ผ๋ง๋ ๋ง์ ํ๋ก์ ํธ๊ฐ ์์กดํ๋์ง์ ๊ด๊ณ์์ด ํจํค์ง๋ฅผ ๋์คํฌ์ ํ ๋ฒ๋ง ์ ์ฅํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋์คํฌ ๊ณต๊ฐ ์ฌ์ฉ๋์ ํฌ๊ฒ ์ค์ด๊ณ ์ค์น ์๊ฐ์ ๊ฐ์ ํฉ๋๋ค.
์์: pnpm์ ์ฌ์ฉํ์ฌ ํจํค์ง ์ค์นํ๊ธฐ
pnpm add lodash
์์: pnpm์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํจํค์ง ์ ๋ฐ์ดํธํ๊ธฐ
pnpm update
pnpm์ ๋ํ ํ๋ซํ์ง ์์(non-flat) `node_modules` ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์์ฑํ์ฌ ์ ์ธ๋์ง ์์ ์์กด์ฑ์ ๋ํ ์ฐ๋ฐ์ ์ธ ์ ๊ทผ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ํ๋ก์ ํธ์ ์ ๋ฐ์ ์ธ ์์ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํต๋๋ค.
์ฌ๋ฐ๋ฅธ ํจํค์ง ๋งค๋์ ์ ํํ๊ธฐ
ํจํค์ง ๋งค๋์ ์ ์ ํ์ ํ๋ก์ ํธ์ ํน์ ์๊ตฌ์ฌํญ๊ณผ ์ ํธ๋์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. npm์ ๋๋ถ๋ถ์ ํ๋ก์ ํธ์ ๊ฒฌ๊ณ ํ ์ ํ์ด์ง๋ง, Yarn๊ณผ pnpm์ ์ฑ๋ฅ ๋ฐ ๋ณด์์์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ๊ฒฐ์ ์ ๋ด๋ฆด ๋ ๋ค์ ์์๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ์ค์น ์๋: Yarn๊ณผ pnpm์ ์ผ๋ฐ์ ์ผ๋ก npm๋ณด๋ค ๋น ๋ฅธ ์ค์น ์๊ฐ์ ์ ๊ณตํฉ๋๋ค.
- ๋์คํฌ ๊ณต๊ฐ ์ฌ์ฉ๋: pnpm์ ๊ฐ์ฅ ๋์คํฌ ๊ณต๊ฐ ํจ์จ์ ์ธ ํจํค์ง ๋งค๋์ ์ ๋๋ค.
- ๋ณด์ ๊ธฐ๋ฅ: ์ธ ํจํค์ง ๋งค๋์ ๋ชจ๋ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, Yarn๊ณผ pnpm์ด ์ฝ๊ฐ์ ์ด์ ์ด ์์ต๋๋ค.
- ์ปค๋ฎค๋ํฐ ์ง์: npm์ ๊ฐ์ฅ ํฐ ์ปค๋ฎค๋ํฐ์ ๊ฐ์ฅ ๊ด๋ฒ์ํ ํจํค์ง ์ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ๋กํ์ผ ๊ด๋ฆฌ: Yarn๊ณผ pnpm์ ๋ฐ์ด๋ ๋กํ์ผ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์๋ํ๋ ์์กด์ฑ ์ ๋ฐ์ดํธ
์์กด์ฑ์ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ ๋ณด์๊ณผ ์์ ์ฑ์ ์ํด ๋งค์ฐ ์ค์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์๋์ผ๋ก ์์กด์ฑ์ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. ์๋ํ๋ ์์กด์ฑ ์ ๋ฐ์ดํธ๋ ์ด ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๊ณ ํ๋ก์ ํธ๊ฐ ํญ์ ์ต์ ๋ฒ์ ์ ์์กด์ฑ์ ์ฌ์ฉํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
Dependabot
Dependabot์ ํ๋ก์ ํธ์ ์์กด์ฑ์ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ์๋์ผ๋ก ํ ๋ฆฌํ์คํธ(pull request)๋ฅผ ์์ฑํ๋ ์ธ๊ธฐ ์๋ ์๋น์ค์ ๋๋ค. ์์กด์ฑ์ ์ ๋ฒ์ ๊ณผ ๋ณด์ ์ทจ์ฝ์ ์ ๋ชจ๋ํฐ๋งํ๊ณ ํ์ํ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋ ํ ๋ฆฌํ์คํธ๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. Dependabot์ ์ด์ GitHub์ ํตํฉ๋์ด ์์ด ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ฝ๊ฒ ํ์ฑํํ๊ณ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
Dependabot ์ฌ์ฉ์ ์ด์ :
- ์๋ํ๋ ์ ๋ฐ์ดํธ: Dependabot์ ์์กด์ฑ ์ ๋ฐ์ดํธ๋ฅผ ์ํด ์๋์ผ๋ก ํ ๋ฆฌํ์คํธ๋ฅผ ์์ฑํ์ฌ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ์ ์ฝํฉ๋๋ค.
- ๋ณด์ ์ทจ์ฝ์ ํ์ง: Dependabot์ ์์กด์ฑ์ ๋ณด์ ์ทจ์ฝ์ ์ ์๋ณํ๊ณ ๋ณด๊ณ ํฉ๋๋ค.
- ๊ฐํธํ ํตํฉ: Dependabot์ GitHub์ ์ํํ๊ฒ ํตํฉ๋ฉ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ๊ตฌ์ฑ: ํ๋ก์ ํธ์ ํน์ ์๊ตฌ์ ๋ง๊ฒ Dependabot์ ๋์์ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค.
Renovate
Renovate๋ ์์กด์ฑ ์ ๋ฐ์ดํธ๋ฅผ ์๋ํํ๋ ๋ ๋ค๋ฅธ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ๊ด๋ฒ์ํ ๊ตฌ์ฑ ์ต์ ์ ์ ๊ณตํ๋ฉฐ ๋ค์ํ ํจํค์ง ๋งค๋์ ์ ํ๋ซํผ์ ์ง์ํฉ๋๋ค. Renovate๋ ์์กด์ฑ ์๋ ์ ๋ฐ์ดํธ, ๋ฆด๋ฆฌ์ค ๋ ธํธ ์์ฑ ๋ฐ ๊ธฐํ ์ ์ง๋ณด์ ์์ ์ ์ํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Renovate ์ฌ์ฉ์ ์ด์ :
- ๊ณ ๋๋ก ๊ตฌ์ฑ ๊ฐ๋ฅ: Renovate๋ ๋์์ ์ฌ์ฉ์ ์ ์ํ๊ธฐ ์ํ ๊ด๋ฒ์ํ ๊ตฌ์ฑ ์ต์ ์ ์ ๊ณตํฉ๋๋ค.
- ์ฌ๋ฌ ํจํค์ง ๋งค๋์ ์ง์: Renovate๋ npm, Yarn, pnpm ๋ฐ ๊ธฐํ ํจํค์ง ๋งค๋์ ๋ฅผ ์ง์ํฉ๋๋ค.
- ๋ฆด๋ฆฌ์ค ๋ ธํธ ์์ฑ: Renovate๋ ํ๋ก์ ํธ์ ๋ฆด๋ฆฌ์ค ๋ ธํธ๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค.
- CI/CD ์์คํ ๊ณผ ํตํฉ: Renovate๋ ์ธ๊ธฐ ์๋ CI/CD ์์คํ ๊ณผ ์ํํ๊ฒ ํตํฉ๋ฉ๋๋ค.
์๋ํ๋ ์ ๋ฐ์ดํธ ์ค์ ํ๊ธฐ
์๋ํ๋ ์์กด์ฑ ์ ๋ฐ์ดํธ๋ฅผ ์ค์ ํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ด ํ์ํฉ๋๋ค:
- ๋๊ตฌ ์ ํ: Dependabot, Renovate ๋๋ ๋ค๋ฅธ ์ ์ฌํ ๋๊ตฌ๋ฅผ ์ ํํฉ๋๋ค.
- ๋๊ตฌ ๊ตฌ์ฑ: ํ๋ก์ ํธ์ ์์กด์ฑ์ ๋ชจ๋ํฐ๋งํ๋๋ก ๋๊ตฌ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- ์๋ ํ ๋ฆฌํ์คํธ ํ์ฑํ: ์์กด์ฑ ์ ๋ฐ์ดํธ๋ฅผ ์ํด ์๋์ผ๋ก ํ ๋ฆฌํ์คํธ๋ฅผ ์์ฑํ๋๋ก ๋๊ตฌ๋ฅผ ํ์ฑํํฉ๋๋ค.
- ํ ๋ฆฌํ์คํธ ๊ฒํ ๋ฐ ๋ณํฉ: ์์ฑ๋ ํ ๋ฆฌํ์คํธ๋ฅผ ๊ฒํ ํ๊ณ ์ฝ๋๋ฒ ์ด์ค์ ๋ณํฉํฉ๋๋ค.
ํ๋ก ํธ์๋ ์์กด์ฑ ๋ณด์ ์ค์บ๋
ํ๋ก ํธ์๋ ์์กด์ฑ์ ๋ณด์ ์ทจ์ฝ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฌ์ฉ์์๊ฒ ์ฌ๊ฐํ ์ํ์ ์ด๋ํ ์ ์์ต๋๋ค. ๋ณด์ ์ค์บ๋ ๋๊ตฌ๋ ์ด๋ฌํ ์ทจ์ฝ์ ์ ์๋ณํ๊ณ ์ํ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ ์ ๊ณตํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋จ์ํ *์ ๋ฐ์ดํธ*ํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ผ๋ฉฐ, ์ฌ์ ์ *์ค์บ*ํด์ผ ํฉ๋๋ค.
OWASP Dependency-Check
OWASP Dependency-Check๋ ํ๋ก์ ํธ ์์กด์ฑ์์ ์๋ ค์ง ์ทจ์ฝ์ ์ ์๋ณํ๋ ๋ฌด๋ฃ ์คํ ์์ค ๋๊ตฌ์ ๋๋ค. ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํจํค์ง ๋งค๋์ ๋ฅผ ์ง์ํ๋ฉฐ ๋น๋ ํ๋ก์ธ์ค์ ํตํฉ๋ ์ ์์ต๋๋ค. OWASP(Open Web Application Security Project)๋ ๋ณด์ ์ ๋ณด ๋ฐ ๋๊ตฌ์ ๋ํด ๋งค์ฐ ์กด๊ฒฝ๋ฐ๋ ์ถ์ฒ์ ๋๋ค.
OWASP Dependency-Check์ ํน์ง:
- ์ทจ์ฝ์ ํ์ง: ํ๋ก์ ํธ ์์กด์ฑ์์ ์๋ ค์ง ์ทจ์ฝ์ ์ ์๋ณํฉ๋๋ค.
- ์ฌ๋ฌ ์ธ์ด ์ง์: ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํจํค์ง ๋งค๋์ ๋ฅผ ์ง์ํฉ๋๋ค.
- ๋น๋ ๋๊ตฌ์ ํตํฉ: ๋น๋ ํ๋ก์ธ์ค์ ํตํฉํ ์ ์์ต๋๋ค.
- ์์ธ ๋ณด๊ณ ์: ์๋ณ๋ ์ทจ์ฝ์ ์ ๋ํ ์์ธ ๋ณด๊ณ ์๋ฅผ ์์ฑํฉ๋๋ค.
Snyk
Snyk๋ ํ๋ก ํธ์๋ ์์กด์ฑ์ ๋ํ ํฌ๊ด์ ์ธ ๋ณด์ ์ค์บ๋์ ์ ๊ณตํ๋ ์์ฉ ๋๊ตฌ์ ๋๋ค. CI/CD ํ์ดํ๋ผ์ธ๊ณผ ํตํฉ๋๋ฉฐ ์ค์๊ฐ ์ทจ์ฝ์ ํ์ง ๋ฐ ํด๊ฒฐ ์ง์นจ์ ์ ๊ณตํฉ๋๋ค. Snyk๋ ๋ํ ํ๋ก๋์ ํ๊ฒฝ์ ์์กด์ฑ์ ๋ชจ๋ํฐ๋งํ๊ณ ์ทจ์ฝ์ ์ ์๋์ผ๋ก ํจ์นํ๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค.
Snyk์ ํน์ง:
- ์ค์๊ฐ ์ทจ์ฝ์ ํ์ง: ๊ฐ๋ฐ ์ค ์ค์๊ฐ ์ทจ์ฝ์ ํ์ง๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ํด๊ฒฐ ์ง์นจ: ์๋ณ๋ ์ทจ์ฝ์ ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ ์ ๊ณตํฉ๋๋ค.
- CI/CD ํตํฉ: CI/CD ํ์ดํ๋ผ์ธ๊ณผ ์ํํ๊ฒ ํตํฉ๋ฉ๋๋ค.
- ํ๋ก๋์ ๋ชจ๋ํฐ๋ง: ํ๋ก๋์ ํ๊ฒฝ์ ์์กด์ฑ์์ ์๋ก์ด ์ทจ์ฝ์ ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
npm Audit
npm Audit์ ํ๋ก์ ํธ์ ์์กด์ฑ์์ ์๋ ค์ง ์ทจ์ฝ์ ์ ์ค์บํ๋ npm์ ๋ด์ฅ ๊ธฐ๋ฅ์ ๋๋ค. ์๋ณ๋ ์ทจ์ฝ์ ์ ๋ํ ์์ฝ์ ์ ๊ณตํ๊ณ ๊ฐ๋ฅํ ์์ ์ฌํญ์ ์ ์ํฉ๋๋ค. npm Audit์ ๊ธฐ๋ณธ์ ์ธ ๋ณด์ ์ค์บ๋์ ์ํ ํธ๋ฆฌํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ๋๊ตฌ์ ๋๋ค.
์์: npm audit ์คํํ๊ธฐ
npm audit
npm Audit์ ํน์ง:
- ๋ด์ฅ ๊ธฐ๋ฅ: npm Audit์ npm์ ๋ด์ฅ ๊ธฐ๋ฅ์ ๋๋ค.
- ์ฌ์ฉ ์ฉ์ด์ฑ: ์คํํ๊ธฐ ์ฝ๊ณ ์ทจ์ฝ์ ์ ๋ํ ๊ฐ๋จํ ์์ฝ์ ์ ๊ณตํฉ๋๋ค.
- ์์ ๊ถ์ฅ ์ฌํญ: ์๋ณ๋ ์ทจ์ฝ์ ์ ๋ํ ๊ฐ๋ฅํ ์์ ์ฌํญ์ ์ ์ํฉ๋๋ค.
Yarn Audit
Yarn์๋ npm๊ณผ ์ ์ฌํ audit ๋ช ๋ น์ด๊ฐ ์์ต๋๋ค. `yarn audit`์ ์คํํ๋ฉด ํ๋ก์ ํธ์ ์์กด์ฑ์ ๋ถ์ํ๊ณ ์๋ ค์ง ์ทจ์ฝ์ ์ ๋ณด๊ณ ํฉ๋๋ค.
์์: yarn audit ์คํํ๊ธฐ
yarn audit
๋ณด์ ์ค์บ๋ ์ค์ ํ๊ธฐ
ํ๋ก ํธ์๋ ์์กด์ฑ์ ๋ํ ๋ณด์ ์ค์บ๋์ ์ค์ ํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ด ํ์ํฉ๋๋ค:
- ๋๊ตฌ ์ ํ: OWASP Dependency-Check, Snyk ๋๋ npm Audit๊ณผ ๊ฐ์ ๋ณด์ ์ค์บ๋ ๋๊ตฌ๋ฅผ ์ ํํฉ๋๋ค.
- ๋น๋ ํ๋ก์ธ์ค์ ๋๊ตฌ ํตํฉ: CI/CD ํ์ดํ๋ผ์ธ ๋๋ ๋น๋ ํ๋ก์ธ์ค์ ๋๊ตฌ๋ฅผ ํตํฉํฉ๋๋ค.
- ๋๊ตฌ ๊ตฌ์ฑ: ํ๋ก์ ํธ์ ์์กด์ฑ์์ ์ทจ์ฝ์ ์ ์ค์บํ๋๋ก ๋๊ตฌ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- ์ทจ์ฝ์ ๊ฒํ ๋ฐ ํด๊ฒฐ: ์๋ณ๋ ์ทจ์ฝ์ ์ ๊ฒํ ํ๊ณ ํด๊ฒฐํ๊ธฐ ์ํ ์กฐ์น๋ฅผ ์ทจํฉ๋๋ค.
- ํ๋ก์ธ์ค ์๋ํ: ์ค์บ๋ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ์ฌ ์ทจ์ฝ์ ์ด ์กฐ๊ธฐ์ ์์ฃผ ํ์ง๋๋๋ก ํฉ๋๋ค.
ํ๋ก ํธ์๋ ์์กด์ฑ ๊ด๋ฆฌ ๋ชจ๋ฒ ์ฌ๋ก
ํ๋ก ํธ์๋ ์์กด์ฑ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ํจํค์ง ๋งค๋์ ์ฌ์ฉ: ํญ์ npm, Yarn ๋๋ pnpm๊ณผ ๊ฐ์ ํจํค์ง ๋งค๋์ ๋ฅผ ์ฌ์ฉํ์ฌ ์์กด์ฑ์ ๊ด๋ฆฌํ์ญ์์ค.
- ์๋งจํฑ ๋ฒ์ ๋ ์ฌ์ฉ: ์๋งจํฑ ๋ฒ์ ๋(semver)์ ์ฌ์ฉํ์ฌ ์์กด์ฑ ๋ฒ์ ์ ์ง์ ํ์ญ์์ค. Semver๋ฅผ ์ฌ์ฉํ๋ฉด ์์กด์ฑ ์ ๋ฐ์ดํธ์ ๊ด๋ จ๋ ์ํ ์์ค์ ์ ์ดํ ์ ์์ต๋๋ค. ๋ฒ์ ์ ์ผ๋ฐ์ ์ผ๋ก MAJOR.MINOR.PATCH๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์์กด์ฑ ๋ฒ์ ๊ณ ์ : ์๊ธฐ์น ์์ ๋ธ๋ ์ดํน ์ฒด์ธ์ง๋ฅผ ํผํ๊ธฐ ์ํด ์์กด์ฑ ๋ฒ์ ์ ๊ณ ์ ํ์ญ์์ค. ์ด๋ ๋ณดํต ๋กํ์ผ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
- ์ ๊ธฐ์ ์ธ ์์กด์ฑ ์ ๋ฐ์ดํธ: ๋ฒ๊ทธ ์์ , ์ฑ๋ฅ ํฅ์ ๋ฐ ๋ณด์ ํจ์น์ ์ด์ ์ ๋๋ฆฌ๋ ค๋ฉด ์ ๊ธฐ์ ์ผ๋ก ์์กด์ฑ์ ์ ๋ฐ์ดํธํ์ญ์์ค.
- ์๋ํ๋ ์์กด์ฑ ์ ๋ฐ์ดํธ ์ฌ์ฉ: Dependabot ๋๋ Renovate์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์กด์ฑ ์ ๋ฐ์ดํธ๋ฅผ ์๋ํํ์ญ์์ค.
- ๋ณด์ ์ค์บ๋ ์ํ: ์ ๊ธฐ์ ์ผ๋ก ์์กด์ฑ์์ ๋ณด์ ์ทจ์ฝ์ ์ ์ค์บํ์ญ์์ค.
- ํ๋ก๋์ ํ๊ฒฝ์ ์์กด์ฑ ๋ชจ๋ํฐ๋ง: ํ๋ก๋์ ํ๊ฒฝ์ ์์กด์ฑ์์ ์๋ก์ด ์ทจ์ฝ์ ์ ๋ชจ๋ํฐ๋งํ์ญ์์ค.
- ์ฌ์ฉํ์ง ์๋ ์์กด์ฑ ์ ๊ฑฐ: ์ฃผ๊ธฐ์ ์ผ๋ก ์์กด์ฑ์ ๊ฒํ ํ๊ณ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ ์ ๊ฑฐํ์ญ์์ค.
- ์์กด์ฑ ์๊ฒ ์ ์ง: ํฌ๊ณ ๋จ์ผ์ฒด์ ์ธ ์์กด์ฑ ์ฌ์ฉ์ ํผํ์ญ์์ค. ๋์ ๋ ์๊ณ ์ง์ค๋ ์์กด์ฑ์ ์ ํธํ์ญ์์ค. ์ด๋ฅผ ์ข ์ข "ํธ๋ฆฌ ์ ฐ์ดํน(tree shaking)"์ด๋ผ๊ณ ํฉ๋๋ค.
- ์์กด์ฑ ๋ฌธ์ํ: ํ๋ก์ ํธ์ ๊ฐ ์์กด์ฑ์ ๋ชฉ์ ๊ณผ ์ฌ์ฉ๋ฒ์ ๋ช ํํ๊ฒ ๋ฌธ์ํํ์ญ์์ค.
- ์ ์ฑ ์๋ฆฝ: ํ์ด ๋ฐ๋ฅผ ๋ช ํํ ์์กด์ฑ ๊ด๋ฆฌ ์ ์ฑ ์ ๋ง๋์ญ์์ค.
- ๋ผ์ด์ ์ค ํธํ์ฑ ๊ณ ๋ ค: ์์กด์ฑ์ ๋ผ์ด์ ์ค๋ฅผ ์ผ๋์ ๋๊ณ ํ๋ก์ ํธ์ ๋ผ์ด์ ์ค์ ํธํ๋๋์ง ํ์ธํ์ญ์์ค.
- ์ ๋ฐ์ดํธ ํ ํ ์คํธ: ์์กด์ฑ์ ์ ๋ฐ์ดํธํ ํ์๋ ํญ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํ์ฌ ๋ชจ๋ ๊ฒ์ด ์์๋๋ก ์๋ํ๋์ง ํ์ธํ์ญ์์ค.
์์: ์๋ ์ ๋ฐ์ดํธ๋ฅผ ์ํ Dependabot ์ค์ ํ๊ธฐ
GitHub ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์๋ ์ ๋ฐ์ดํธ๋ฅผ ์ํด Dependabot์ ์ค์ ํ๋ ๋จ๊ณ๋ณ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Dependabot ํ์ฑํ: GitHub ๋ฆฌํฌ์งํ ๋ฆฌ ์ค์ ์ผ๋ก ์ด๋ํ์ฌ "Security" ํญ์ผ๋ก ์ด๋ํฉ๋๋ค. Dependabot ๋ฒ์ ์ ๋ฐ์ดํธ์ Dependabot ๋ณด์ ์ ๋ฐ์ดํธ๋ฅผ ํ์ฑํํฉ๋๋ค.
- Dependabot ๊ตฌ์ฑ: ๋ฆฌํฌ์งํ ๋ฆฌ์ `.github/dependabot.yml` ํ์ผ์ ๋ง๋ค์ด Dependabot์ ๋์์ ๊ตฌ์ฑํฉ๋๋ค.
์์ `dependabot.yml` ๊ตฌ์ฑ:
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
์ด ๊ตฌ์ฑ์ Dependabot์ด ๋งค์ฃผ npm ์ ๋ฐ์ดํธ๋ฅผ ํ์ธํ๋๋ก ์ง์ํฉ๋๋ค.
์์: ๋ณด์ ์ค์บ๋์ ์ํ Snyk ์ฌ์ฉํ๊ธฐ
๋ณด์ ์ค์บ๋์ ์ํด Snyk๋ฅผ ์ฌ์ฉํ๋ ๋จ๊ณ๋ณ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Snyk ๊ณ์ ์์ฑ: https://snyk.io์์ Snyk ๊ณ์ ์ ๊ฐ์ ํฉ๋๋ค.
- ๋ฆฌํฌ์งํ ๋ฆฌ ์ฐ๊ฒฐ: GitHub, GitLab ๋๋ Bitbucket ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ Snyk์ ์ฐ๊ฒฐํฉ๋๋ค.
- ํ๋ก์ ํธ ์ค์บ: Snyk๊ฐ ์๋์ผ๋ก ํ๋ก์ ํธ์ ์ทจ์ฝ์ ์ ์ค์บํฉ๋๋ค.
- ์ทจ์ฝ์ ๊ฒํ ๋ฐ ํด๊ฒฐ: ์๋ณ๋ ์ทจ์ฝ์ ์ ๊ฒํ ํ๊ณ Snyk์ ์ง์นจ์ ๋ฐ๋ผ ํด๊ฒฐํฉ๋๋ค.
๊ธ๋ก๋ฒ ๊ณ ๋ ค์ฌํญ
๊ธ๋ก๋ฒ ํ๊ฒฝ์์ ์์กด์ฑ์ ๊ด๋ฆฌํ ๋ ๋ค์ ์์๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ๋ค๋ฅธ ์๊ฐ๋: ์ค๋จ์ ์ต์ํํ๊ธฐ ์ํด ๋น์์ ์๊ฐ์ ์ ๋ฐ์ดํธ ๋ฐ ์ค์บ์ ์์ฝํ์ญ์์ค.
- ๋ค์ํ ์ธํฐ๋ท ์๋: ๋๋ฆฐ ์ฐ๊ฒฐ์ ์ํด ์์กด์ฑ ์ค์น๋ฅผ ์ต์ ํํ์ญ์์ค.
- ํ์งํ: ์์กด์ฑ์ด ํ์ํ ์ธ์ด์ ๋ก์ผ์ผ์ ์ง์ํ๋์ง ํ์ธํ์ญ์์ค.
- ๊ธ๋ก๋ฒ CDN ์ฌ์ฉ: ๋ ๋น ๋ฅธ ์์ ์ ๋ฌ์ ์ํด ์ ์ธ๊ณ์ ์ผ๋ก ๋๋ฌ ๊ฐ๋ฅํ ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN)๋ฅผ ํ์ฉํ์ญ์์ค.
๊ฒฐ๋ก
ํ๋ก ํธ์๋ ์์กด์ฑ ๊ด๋ฆฌ๋ ํ๋ ์น ๊ฐ๋ฐ์ ์ค์ํ ์ธก๋ฉด์ ๋๋ค. ์๋ํ๋ ์ ๋ฐ์ดํธ์ ๋ณด์ ์ค์บ๋์ ๊ตฌํํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฒฌ๊ณ ํ๊ณ ์์ ํ๋ฉฐ ์ ์ง๋ณด์ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ๋๊ตฌ๋ฅผ ์ ํํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๊ณ ์ฝ๋๋ฒ ์ด์ค์ ์ทจ์ฝ์ ์ ๋์ ํ ์ํ์ ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ดํ์ ์์ฉํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ๋ ์ข๊ณ , ๋ ์์ ํ๋ฉฐ, ๋ ์ ๋ขฐํ ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ์ญ์์ค.